массивы — использование памяти в переполнении стека

Я не уверен, как поставить этот вопрос, но здесь это идет:

  1. При программировании на моих микроконтроллерах Atmel на c ++ я склонен смешивать переменные «программы» и «переменные пользователя» в одной и той же памяти данных. Что со временем доставляет неудобства, потому что я хочу сделать несколько предустановок, которые можно загрузить или сохранить. И я не хочу, чтобы «программные» переменные сохранялись, потому что программа будет генерировать правильные значения на основе «пользовательских» значений. Является ли обычной практикой разделять это в местах памяти? Например. таймер в PGM-памяти, thresholdByUser в DATA-памяти?

  2. В моей программе я сделал несколько различных функций, каждый из которых имеет свой собственный набор пользовательских переменных.
    Например: в настройках 5 пользовательских переменных, в генераторе 6 пользовательских переменных и т. Д.
    Вы бы сделали 1 большой массив, а затем сделать #define settingsgeneratorSpeed 1, #define settingsBacklight 2 как места, так что вы могли бы назвать их так: Array[generatorSpeed], Array[settingsBacklight] или вы все еще разделите его и соберете, используя struct orso?

Работаю на atmelstudio 4.0 с ATMEGA644 на STK500.

Спасибо за всю помощь, которую вы можете оказать!

3

Решение

Предполагая, что вы используете AT (X) Mega, при обращении к микроконтроллерам Atmel: IIRC зависит, какой комплект компиляторов вы используете. С gcc, если у вас есть что-то вроде статического int, оно перейдет в PGM и будет скопировано в RAM при запуске программы. Следовательно, если вы хотите, чтобы ваши переменные не находились в памяти PGM, вы должны сделать их переменными стека или кучи. Константы и статика всегда будут находиться в обоих. Если вы не хотите иметь только PGM-константы, вы можете указать это, но это требует специальных операций чтения.

1

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

Для вопроса 2, я бы использовал const int& settingX = array[Xoffset] вместо определения. Но это предполагает, что есть некоторая потребность в итерации по массиву, иначе я бы просто определил отдельные переменные.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector