Я довольно новичок в программировании для встраиваемых приложений (помимо некоторых вещей 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 КБ для использования, как мне лучше записать / прочитать в этом?
С уважением,
-Джеймс
Скорее всего, что придерживаться static
перед этим огромным массивом заставляет его работать.
Большинство компиляторов для встроенных систем размещают локальные переменные функции в стеке процессора, но static
переменные имеют «статическую длительность хранения» и по сути ведут себя как глобальные переменные. Линкер точно знает, сколько памяти им нужно, и постарается их разместить.
Конечно, static
сделает функцию не входящей, но вы все равно не можете выделить два массива по 200 кБ на устройстве 256 кБ.
Других решений пока нет …