Movesense RAM, распределение переменных
С 1.6.2 почему я могу построить код с
byte data[100000000];
Если я правильно помню с предыдущими версиями, я получил ошибку, поскольку есть ограниченная RAM. Я предполагаю, что более правильным способом было бы что-то
byte* data=new byte[10000];
if (data!=NULL) ...
Извините за основной вопрос C/C++
1 ответ
Если вы добавите этот первый код в функцию или метод, он будет выделен из стека во время выполнения. Вот почему компоновщик не предупредит вас об этом. Если вы добавите его как глобальную переменную (вне методов и классов), произойдет ошибка. Хотя оператор "new" иногда работает в Movesense, это не рекомендуемый способ выделения памяти. Процедуры выделения памяти объявлены в файле movesense.h:
void* memalloc(size_t size);
void* memcalloc(size_t size);
void memfree(void* ptr);
Однако есть более простой способ. Поскольку пользователи LaunchableModules выделяются из Movesense HEAP, вы можете просто объявить любые буферы фиксированного размера, которые вам нужны, в качестве членов класса, и они будут автоматически распределены при создании экземпляра LaunchableModule. Несмотря на то, что перед добавлением больших выделений буфера в модуль рекомендуется выполнить запрос свободной памяти во время работы датчика, чтобы не допустить повторного сброса датчика, который постоянно сбрасывается при каждой попытке загрузки, поскольку у него заканчивается HEAP.