Хранить 200 КБ данных в массиве?

Я довольно новичок в программировании для встраиваемых приложений (помимо некоторых вещей Arduino) и работаю с микроконтроллером CC3220SF от Texas Instruments.

В настоящее время у меня есть программа, которая постоянно опрашивает устройство и сохраняет результат. Я хотел бы сохранить 100 000 этих образцов (каждый по 2 байта), давая мне 200 КБ данных для хранения. Я не совсем уверен, как мне поступить, потому что попытка создать массив размером [100] [1000] просто приводит к сбою устройства.

Как мне сохранить данные для последующего использования?

#define MAX_ARR_LENGTH                   1000
#define MAX_ARR_DEPTH                    100

// Later in the collection function:
uint16_t measurmentsArr[MAX_ARR_DEPTH][MAX_ARR_LENGTH] = {0};
unsigned int arr_length = 0;
unsigned int arr_depth = 0;

// And later, after a data point has
// been verified as useful:
if (arr_length < MAX_ARR_LENGTH){
measurmentsArr[arr_depth][arr_length++] = angle;
} else {
arr_length = 0;
measurmentsArr[arr_depth++][arr_length] = angle;
}

Этот способ ^^^ работает для небольших массивов, но, как я уже сказал, мне нужно хранить 200 КБ … Я знаю, что CC3220SF имеет 512 КБ для использования, как мне лучше записать / прочитать в этом?

С уважением,
-Джеймс

1

Решение

Скорее всего, что придерживаться static перед этим огромным массивом заставляет его работать.

Большинство компиляторов для встроенных систем размещают локальные переменные функции в стеке процессора, но static переменные имеют «статическую длительность хранения» и по сути ведут себя как глобальные переменные. Линкер точно знает, сколько памяти им нужно, и постарается их разместить.

Конечно, static сделает функцию не входящей, но вы все равно не можете выделить два массива по 200 кБ на устройстве 256 кБ.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]