Skip to content

Commit 511f370

Browse files
committed
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.
1 parent 307021e commit 511f370

File tree

1 file changed

+91
-84
lines changed

1 file changed

+91
-84
lines changed

TESTS/mbed_hal/crc/main.cpp

Lines changed: 91 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -38,78 +38,14 @@ const uint8_t input_data[] = "123456789";
3838
typedef struct
3939
{
4040
const crc_mbed_config config_data;
41-
const char* input_data;
4241
uint32_t expected_result;
4342

4443
} TEST_CASE;
4544

46-
static TEST_CASE test_cases[] = {
47-
/* Predefined polynomials. */
48-
{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, "123456789", 0xEA },
49-
{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, "123456789", 0xA0 },
50-
{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, "123456789", 0x74 },
51-
{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, "123456789", 0x95 },
52-
{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, "123456789", 0xC1 },
53-
{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, "123456789", 0xA4 },
54-
{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, "123456789", 0x57 },
55-
56-
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, "123456789", 0xF4 },
57-
{ {POLY_8BIT_CCITT , 8, 0x000000FF, 0x00000000, false, false}, "123456789", 0xFB },
58-
{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, false, false}, "123456789", 0x87 },
59-
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000FF, false, false}, "123456789", 0x0B },
60-
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000AB, false, false}, "123456789", 0x5F },
61-
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, true , false}, "123456789", 0x04 },
62-
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, true }, "123456789", 0x2F },
63-
64-
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, "123456789", 0x31C3 },
65-
{ {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, "123456789", 0x29B1 },
66-
{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, "123456789", 0x7D70 },
67-
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, "123456789", 0xCE3C },
68-
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, "123456789", 0x9A68 },
69-
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, "123456789", 0x9184 },
70-
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, "123456789", 0xC38C },
71-
72-
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, false}, "123456789", 0xFEE8 },
73-
{ {POLY_16BIT_IBM , 16, 0x0000FFFF, 0x00000000, false, false}, "123456789", 0xAEE7 },
74-
{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, false, false}, "123456789", 0x0887 },
75-
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000FFFF, false, false}, "123456789", 0x0117 },
76-
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000ABAB, false, false}, "123456789", 0x5543 },
77-
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, true , false}, "123456789", 0xBCDD },
78-
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, true }, "123456789", 0x177F },
79-
80-
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, false}, "123456789", 0x89A1897F },
81-
{ {POLY_32BIT_ANSI , 32, 0xFFFFFFFF, 0x00000000, false, false}, "123456789", 0x0376E6E7 },
82-
{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, false, false}, "123456789", 0x871A2FAA },
83-
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xFFFFFFFF, false, false}, "123456789", 0x765E7680 },
84-
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xABABABAB, false, false}, "123456789", 0x220A22D4 },
85-
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, true , false}, "123456789", 0x11B4BFB4 },
86-
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, true }, "123456789", 0xFE918591 },
87-
88-
/* Not-predefined polynomials. */
89-
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, false}, "123456789", 0xA2 },
90-
{ {POLY_8BIT_MAXIM , 8, 0x000000FF, 0x00000000, false, false}, "123456789", 0xF7 },
91-
{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, false, false}, "123456789", 0x71 },
92-
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000FF, false, false}, "123456789", 0x5D },
93-
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000AB, false, false}, "123456789", 0x09 },
94-
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, true , false}, "123456789", 0x85 },
95-
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, true }, "123456789", 0x45 },
96-
97-
{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, false}, "123456789", 0xFEE8 },
98-
{ {POLY_16BIT_MAXIM , 16, 0x0000FFFF, 0x00000000, false, false}, "123456789", 0xAEE7 },
99-
{ {POLY_16BIT_MAXIM , 16, 0x0000ABAB, 0x00000000, false, false}, "123456789", 0x0887 },
100-
{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000FFFF, false, false}, "123456789", 0x0117 },
101-
{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000ABAB, false, false}, "123456789", 0x5543 },
102-
{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, true , false}, "123456789", 0xBCDD },
103-
{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, true }, "123456789", 0x177F },
104-
105-
{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, false}, "123456789", 0x89A1897F },
106-
{ {POLY_32BIT_POSIX , 32, 0xFFFFFFFF, 0x00000000, false, false}, "123456789", 0x0376E6E7 },
107-
{ {POLY_32BIT_POSIX , 32, 0xABABABAB, 0x00000000, false, false}, "123456789", 0x871A2FAA },
108-
{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xFFFFFFFF, false, false}, "123456789", 0x765E7680 },
109-
{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xABABABAB, false, false}, "123456789", 0x220A22D4 },
110-
{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, true , false}, "123456789", 0x11B4BFB4 },
111-
{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, true }, "123456789", 0xFE918591 },
112-
};
45+
/* We will allocate test case array on stack since memory limits on some boards
46+
* like NUCLEO_F070RB. */
47+
static TEST_CASE *test_cases;
48+
static uint32_t test_cases_size;
11349

11450
/* Test that hal_crc_is_supported() function returns true if given polynomial
11551
* is supported, false otherwise (at least one polynomial from the predefined list must be supported). */
@@ -118,8 +54,9 @@ void crc_is_supported_test()
11854
/* Check if at least one crc polynomial/config is supported. */
11955
uint32_t num_of_supported_polynomials = 0;
12056

121-
for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) {
57+
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
12258
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
59+
12360
num_of_supported_polynomials++;
12461
}
12562
}
@@ -131,11 +68,11 @@ void crc_is_supported_test()
13168
* be successfully obtained. */
13269
void crc_calc_single_test()
13370
{
134-
for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) {
71+
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
13572
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
13673

13774
hal_crc_compute_partial_start(&test_cases[i].config_data);
138-
hal_crc_compute_partial((uint8_t*) test_cases[i].input_data, strlen((const char*) test_cases[i].input_data));
75+
hal_crc_compute_partial((uint8_t*) input_data, strlen((const char*) input_data));
13976
const uint32_t crc = hal_crc_get_result();
14077

14178
TEST_ASSERT_EQUAL(test_cases[i].expected_result, crc);
@@ -147,18 +84,18 @@ void crc_calc_single_test()
14784
* succession in order to provide additional data to CRC module. */
14885
void crc_calc_multi_test()
14986
{
150-
for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) {
87+
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
15188
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
15289

15390
const uint32_t first_part_bytes = 3;
15491
const uint32_t second_part_bytes = 1;
155-
const uint32_t third_part_bytes = strlen((const char*) test_cases[i].input_data) - first_part_bytes
92+
const uint32_t third_part_bytes = strlen((const char*) input_data) - first_part_bytes
15693
- second_part_bytes;
15794

15895
hal_crc_compute_partial_start(&test_cases[i].config_data);
159-
hal_crc_compute_partial((uint8_t*) test_cases[i].input_data, first_part_bytes);
160-
hal_crc_compute_partial((uint8_t*) (test_cases[i].input_data + first_part_bytes), second_part_bytes);
161-
hal_crc_compute_partial((uint8_t*) (test_cases[i].input_data + first_part_bytes + second_part_bytes),
96+
hal_crc_compute_partial((uint8_t*) input_data, first_part_bytes);
97+
hal_crc_compute_partial((uint8_t*) (input_data + first_part_bytes), second_part_bytes);
98+
hal_crc_compute_partial((uint8_t*) (input_data + first_part_bytes + second_part_bytes),
16299
third_part_bytes);
163100
const uint32_t crc = hal_crc_get_result();
164101

@@ -178,7 +115,7 @@ void crc_reconfigure_test()
178115

179116
/* At least one configuration must be supported. If two are supported, then
180117
* re-initialize CRC module using different config. */
181-
for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) {
118+
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
182119

183120
/* Find two supported polynomials if possible. */
184121
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
@@ -209,8 +146,7 @@ void crc_reconfigure_test()
209146

210147
/* Now re-init CRC module and provide new data and check the result. */
211148
hal_crc_compute_partial_start(&test_cases[pol_idx[pol_cnt]].config_data);
212-
hal_crc_compute_partial((uint8_t*) test_cases[pol_idx[pol_cnt]].input_data,
213-
strlen((const char*) test_cases[pol_idx[pol_cnt]].input_data));
149+
hal_crc_compute_partial((uint8_t*) input_data, strlen((const char*) input_data));
214150
const uint32_t crc = hal_crc_get_result();
215151

216152
TEST_ASSERT_EQUAL(test_cases[pol_idx[pol_cnt]].expected_result, crc);
@@ -223,18 +159,18 @@ void crc_compute_partial_invalid_param_test()
223159
uint32_t crc = 0;
224160

225161
/* At least one polynomial must be supported. */
226-
for (unsigned int i = 0; i < (sizeof(test_cases) / sizeof(TEST_CASE)); i++) {
162+
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
227163
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
228164

229165
hal_crc_compute_partial_start(&test_cases[i].config_data);
230166

231167
/* Call hal_crc_compute_partial() with invalid parameters. */
232-
hal_crc_compute_partial((uint8_t*) NULL, strlen((const char*) test_cases[i].input_data));
233-
hal_crc_compute_partial((uint8_t*) test_cases[i].input_data, 0);
168+
hal_crc_compute_partial((uint8_t*) NULL, strlen((const char*) input_data));
169+
hal_crc_compute_partial((uint8_t*) input_data, 0);
234170

235171
/* Now use valid parameters. */
236-
hal_crc_compute_partial((uint8_t*) test_cases[i].input_data,
237-
strlen((const char*) test_cases[i].input_data));
172+
hal_crc_compute_partial((uint8_t*) input_data,
173+
strlen((const char*) input_data));
238174

239175
crc = hal_crc_get_result();
240176

@@ -270,5 +206,76 @@ Specification specification(greentea_test_setup, cases, greentea_test_teardown_h
270206

271207
int main()
272208
{
209+
TEST_CASE local_test_cases[] = {
210+
/* Predefined polynomials. */
211+
/* 00 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0xEA },
212+
/* 01 */{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0xA0 },
213+
/* 02 */{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x74 },
214+
/* 03 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x95 },
215+
/* 04 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0xC1 },
216+
/* 05 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0xA4 },
217+
/* 06 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, 0x57 },
218+
219+
/* 07 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, 0xF4 },
220+
/* 08 */{ {POLY_8BIT_CCITT , 8, 0x000000FF, 0x00000000, false, false}, 0xFB },
221+
/* 09 */{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, false, false}, 0x87 },
222+
/* 10 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000FF, false, false}, 0x0B },
223+
/* 11 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000AB, false, false}, 0x5F },
224+
/* 12 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, true , false}, 0x04 },
225+
/* 13 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, true }, 0x2F },
226+
227+
/* 14 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, 0x31C3 },
228+
/* 15 */{ {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, 0x29B1 },
229+
/* 16 */{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, 0x7D70 },
230+
/* 17 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, 0xCE3C },
231+
/* 18 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, 0x9A68 },
232+
/* 19 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, 0x9184 },
233+
/* 20 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, 0xC38C },
234+
235+
/* 21 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8 },
236+
/* 22 */{ {POLY_16BIT_IBM , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7 },
237+
/* 23 */{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887 },
238+
/* 24 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117 },
239+
/* 25 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543 },
240+
/* 26 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD },
241+
/* 27 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, true }, 0x177F },
242+
243+
/* 28 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F },
244+
/* 29 */{ {POLY_32BIT_ANSI , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 },
245+
/* 30 */{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA },
246+
/* 31 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 },
247+
/* 32 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 },
248+
/* 33 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 },
249+
/* 34 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 },
250+
251+
/* Not-predefined polynomials. */
252+
/* 35 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, false}, 0xA2 },
253+
/* 36 */{ {POLY_8BIT_MAXIM , 8, 0x000000FF, 0x00000000, false, false}, 0xF7 },
254+
/* 37 */{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, false, false}, 0x71 },
255+
/* 38 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000FF, false, false}, 0x5D },
256+
/* 39 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000AB, false, false}, 0x09 },
257+
/* 40 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, true , false}, 0x85 },
258+
/* 41 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, true }, 0x45 },
259+
260+
/* 42 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8 },
261+
/* 43 */{ {POLY_16BIT_MAXIM , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7 },
262+
/* 44 */{ {POLY_16BIT_MAXIM , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887 },
263+
/* 45 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117 },
264+
/* 46 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543 },
265+
/* 47 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD },
266+
/* 48 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, true }, 0x177F },
267+
268+
/* 49 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F },
269+
/* 50 */{ {POLY_32BIT_POSIX , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 },
270+
/* 51 */{ {POLY_32BIT_POSIX , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA },
271+
/* 52 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 },
272+
/* 53 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 },
273+
/* 54 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 },
274+
/* 55 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 },
275+
};
276+
277+
test_cases = local_test_cases;
278+
test_cases_size = sizeof(local_test_cases);
279+
273280
Harness::run(specification);
274281
}

0 commit comments

Comments
 (0)