From 511f3703c3d2de46f3c77978c26d09551c3ba76b Mon Sep 17 00:00:00 2001 From: Przemyslaw Stekiel Date: Thu, 7 Jun 2018 14:49:30 +0200 Subject: [PATCH] HAL CRC test: Fix out of memory issue on NULCLEO_F070RB, NULCLEO_F072RB/IAR Allocate test case array on stack since memory limits on some boards. --- TESTS/mbed_hal/crc/main.cpp | 175 +++++++++++++++++++----------------- 1 file changed, 91 insertions(+), 84 deletions(-) diff --git a/TESTS/mbed_hal/crc/main.cpp b/TESTS/mbed_hal/crc/main.cpp index 317981010d..27f3234160 100644 --- a/TESTS/mbed_hal/crc/main.cpp +++ b/TESTS/mbed_hal/crc/main.cpp @@ -38,78 +38,14 @@ const uint8_t input_data[] = "123456789"; typedef struct { const crc_mbed_config config_data; - const char* input_data; uint32_t expected_result; } TEST_CASE; -static TEST_CASE test_cases[] = { - /* Predefined polynomials. */ - { {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, "123456789", 0xEA }, - { {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, "123456789", 0xA0 }, - { {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, "123456789", 0x74 }, - { {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, "123456789", 0x95 }, - { {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, "123456789", 0xC1 }, - { {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, "123456789", 0xA4 }, - { {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, "123456789", 0x57 }, - - { {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, "123456789", 0xF4 }, - { {POLY_8BIT_CCITT , 8, 0x000000FF, 0x00000000, false, false}, "123456789", 0xFB }, - { {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, false, false}, "123456789", 0x87 }, - { {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000FF, false, false}, "123456789", 0x0B }, - { {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000AB, false, false}, "123456789", 0x5F }, - { {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, true , false}, "123456789", 0x04 }, - { {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, true }, "123456789", 0x2F }, - - { {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, "123456789", 0x31C3 }, - { {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, "123456789", 0x29B1 }, - { {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, "123456789", 0x7D70 }, - { {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, "123456789", 0xCE3C }, - { {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, "123456789", 0x9A68 }, - { {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, "123456789", 0x9184 }, - { {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, "123456789", 0xC38C }, - - { {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, false}, "123456789", 0xFEE8 }, - { {POLY_16BIT_IBM , 16, 0x0000FFFF, 0x00000000, false, false}, "123456789", 0xAEE7 }, - { {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, false, false}, "123456789", 0x0887 }, - { {POLY_16BIT_IBM , 16, 0x00000000, 0x0000FFFF, false, false}, "123456789", 0x0117 }, - { {POLY_16BIT_IBM , 16, 0x00000000, 0x0000ABAB, false, false}, "123456789", 0x5543 }, - { {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, true , false}, "123456789", 0xBCDD }, - { {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, true }, "123456789", 0x177F }, - - { {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, false}, "123456789", 0x89A1897F }, - { {POLY_32BIT_ANSI , 32, 0xFFFFFFFF, 0x00000000, false, false}, "123456789", 0x0376E6E7 }, - { {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, false, false}, "123456789", 0x871A2FAA }, - { {POLY_32BIT_ANSI , 32, 0x00000000, 0xFFFFFFFF, false, false}, "123456789", 0x765E7680 }, - { {POLY_32BIT_ANSI , 32, 0x00000000, 0xABABABAB, false, false}, "123456789", 0x220A22D4 }, - { {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, true , false}, "123456789", 0x11B4BFB4 }, - { {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, true }, "123456789", 0xFE918591 }, - - /* Not-predefined polynomials. */ - { {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, false}, "123456789", 0xA2 }, - { {POLY_8BIT_MAXIM , 8, 0x000000FF, 0x00000000, false, false}, "123456789", 0xF7 }, - { {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, false, false}, "123456789", 0x71 }, - { {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000FF, false, false}, "123456789", 0x5D }, - { {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000AB, false, false}, "123456789", 0x09 }, - { {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, true , false}, "123456789", 0x85 }, - { {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, true }, "123456789", 0x45 }, - - { {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, false}, "123456789", 0xFEE8 }, - { {POLY_16BIT_MAXIM , 16, 0x0000FFFF, 0x00000000, false, false}, "123456789", 0xAEE7 }, - { {POLY_16BIT_MAXIM , 16, 0x0000ABAB, 0x00000000, false, false}, "123456789", 0x0887 }, - { {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000FFFF, false, false}, "123456789", 0x0117 }, - { {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000ABAB, false, false}, "123456789", 0x5543 }, - { {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, true , false}, "123456789", 0xBCDD }, - { {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, true }, "123456789", 0x177F }, - - { {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, false}, "123456789", 0x89A1897F }, - { {POLY_32BIT_POSIX , 32, 0xFFFFFFFF, 0x00000000, false, false}, "123456789", 0x0376E6E7 }, - { {POLY_32BIT_POSIX , 32, 0xABABABAB, 0x00000000, false, false}, "123456789", 0x871A2FAA }, - { {POLY_32BIT_POSIX , 32, 0x00000000, 0xFFFFFFFF, false, false}, "123456789", 0x765E7680 }, - { {POLY_32BIT_POSIX , 32, 0x00000000, 0xABABABAB, false, false}, "123456789", 0x220A22D4 }, - { {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, true , false}, "123456789", 0x11B4BFB4 }, - { {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, true }, "123456789", 0xFE918591 }, -}; +/* We will allocate test case array on stack since memory limits on some boards + * like NUCLEO_F070RB. */ +static TEST_CASE *test_cases; +static uint32_t test_cases_size; /* Test that hal_crc_is_supported() function returns true if given polynomial * is supported, false otherwise (at least one polynomial from the predefined list must be supported). */ @@ -118,8 +54,9 @@ void crc_is_supported_test() /* Check if at least one crc polynomial/config is supported. */ uint32_t num_of_supported_polynomials = 0; - for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) { + for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) { if (hal_crc_is_supported(&test_cases[i].config_data) == true) { + num_of_supported_polynomials++; } } @@ -131,11 +68,11 @@ void crc_is_supported_test() * be successfully obtained. */ void crc_calc_single_test() { - for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) { + for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) { if (hal_crc_is_supported(&test_cases[i].config_data) == true) { hal_crc_compute_partial_start(&test_cases[i].config_data); - hal_crc_compute_partial((uint8_t*) test_cases[i].input_data, strlen((const char*) test_cases[i].input_data)); + hal_crc_compute_partial((uint8_t*) input_data, strlen((const char*) input_data)); const uint32_t crc = hal_crc_get_result(); TEST_ASSERT_EQUAL(test_cases[i].expected_result, crc); @@ -147,18 +84,18 @@ void crc_calc_single_test() * succession in order to provide additional data to CRC module. */ void crc_calc_multi_test() { - for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) { + for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) { if (hal_crc_is_supported(&test_cases[i].config_data) == true) { const uint32_t first_part_bytes = 3; const uint32_t second_part_bytes = 1; - const uint32_t third_part_bytes = strlen((const char*) test_cases[i].input_data) - first_part_bytes + const uint32_t third_part_bytes = strlen((const char*) input_data) - first_part_bytes - second_part_bytes; hal_crc_compute_partial_start(&test_cases[i].config_data); - hal_crc_compute_partial((uint8_t*) test_cases[i].input_data, first_part_bytes); - hal_crc_compute_partial((uint8_t*) (test_cases[i].input_data + first_part_bytes), second_part_bytes); - hal_crc_compute_partial((uint8_t*) (test_cases[i].input_data + first_part_bytes + second_part_bytes), + hal_crc_compute_partial((uint8_t*) input_data, first_part_bytes); + hal_crc_compute_partial((uint8_t*) (input_data + first_part_bytes), second_part_bytes); + hal_crc_compute_partial((uint8_t*) (input_data + first_part_bytes + second_part_bytes), third_part_bytes); const uint32_t crc = hal_crc_get_result(); @@ -178,7 +115,7 @@ void crc_reconfigure_test() /* At least one configuration must be supported. If two are supported, then * re-initialize CRC module using different config. */ - for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) { + for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) { /* Find two supported polynomials if possible. */ if (hal_crc_is_supported(&test_cases[i].config_data) == true) { @@ -209,8 +146,7 @@ void crc_reconfigure_test() /* Now re-init CRC module and provide new data and check the result. */ hal_crc_compute_partial_start(&test_cases[pol_idx[pol_cnt]].config_data); - hal_crc_compute_partial((uint8_t*) test_cases[pol_idx[pol_cnt]].input_data, - strlen((const char*) test_cases[pol_idx[pol_cnt]].input_data)); + hal_crc_compute_partial((uint8_t*) input_data, strlen((const char*) input_data)); const uint32_t crc = hal_crc_get_result(); TEST_ASSERT_EQUAL(test_cases[pol_idx[pol_cnt]].expected_result, crc); @@ -223,18 +159,18 @@ void crc_compute_partial_invalid_param_test() uint32_t crc = 0; /* At least one polynomial must be supported. */ - for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) { + for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) { if (hal_crc_is_supported(&test_cases[i].config_data) == true) { hal_crc_compute_partial_start(&test_cases[i].config_data); /* Call hal_crc_compute_partial() with invalid parameters. */ - hal_crc_compute_partial((uint8_t*) NULL, strlen((const char*) test_cases[i].input_data)); - hal_crc_compute_partial((uint8_t*) test_cases[i].input_data, 0); + hal_crc_compute_partial((uint8_t*) NULL, strlen((const char*) input_data)); + hal_crc_compute_partial((uint8_t*) input_data, 0); /* Now use valid parameters. */ - hal_crc_compute_partial((uint8_t*) test_cases[i].input_data, - strlen((const char*) test_cases[i].input_data)); + hal_crc_compute_partial((uint8_t*) input_data, + strlen((const char*) input_data)); crc = hal_crc_get_result(); @@ -270,5 +206,76 @@ Specification specification(greentea_test_setup, cases, greentea_test_teardown_h int main() { + TEST_CASE local_test_cases[] = { + /* Predefined polynomials. */ +/* 00 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0xEA }, +/* 01 */{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0xA0 }, +/* 02 */{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x74 }, +/* 03 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x95 }, +/* 04 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0xC1 }, +/* 05 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0xA4 }, +/* 06 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, 0x57 }, + +/* 07 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, 0xF4 }, +/* 08 */{ {POLY_8BIT_CCITT , 8, 0x000000FF, 0x00000000, false, false}, 0xFB }, +/* 09 */{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, false, false}, 0x87 }, +/* 10 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000FF, false, false}, 0x0B }, +/* 11 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000AB, false, false}, 0x5F }, +/* 12 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, true , false}, 0x04 }, +/* 13 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, true }, 0x2F }, + +/* 14 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, 0x31C3 }, +/* 15 */{ {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, 0x29B1 }, +/* 16 */{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, 0x7D70 }, +/* 17 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, 0xCE3C }, +/* 18 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, 0x9A68 }, +/* 19 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, 0x9184 }, +/* 20 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, 0xC38C }, + +/* 21 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8 }, +/* 22 */{ {POLY_16BIT_IBM , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7 }, +/* 23 */{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887 }, +/* 24 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117 }, +/* 25 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543 }, +/* 26 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD }, +/* 27 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, true }, 0x177F }, + +/* 28 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F }, +/* 29 */{ {POLY_32BIT_ANSI , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 }, +/* 30 */{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA }, +/* 31 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 }, +/* 32 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 }, +/* 33 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 }, +/* 34 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 }, + + /* Not-predefined polynomials. */ +/* 35 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, false}, 0xA2 }, +/* 36 */{ {POLY_8BIT_MAXIM , 8, 0x000000FF, 0x00000000, false, false}, 0xF7 }, +/* 37 */{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, false, false}, 0x71 }, +/* 38 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000FF, false, false}, 0x5D }, +/* 39 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000AB, false, false}, 0x09 }, +/* 40 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, true , false}, 0x85 }, +/* 41 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, true }, 0x45 }, + +/* 42 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8 }, +/* 43 */{ {POLY_16BIT_MAXIM , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7 }, +/* 44 */{ {POLY_16BIT_MAXIM , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887 }, +/* 45 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117 }, +/* 46 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543 }, +/* 47 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD }, +/* 48 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, true }, 0x177F }, + +/* 49 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F }, +/* 50 */{ {POLY_32BIT_POSIX , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 }, +/* 51 */{ {POLY_32BIT_POSIX , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA }, +/* 52 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 }, +/* 53 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 }, +/* 54 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 }, +/* 55 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 }, + }; + + test_cases = local_test_cases; + test_cases_size = sizeof(local_test_cases); + Harness::run(specification); }