Я не уверен, как поставить этот вопрос, но здесь это идет:
При программировании на моих микроконтроллерах Atmel на c ++ я склонен смешивать переменные «программы» и «переменные пользователя» в одной и той же памяти данных. Что со временем доставляет неудобства, потому что я хочу сделать несколько предустановок, которые можно загрузить или сохранить. И я не хочу, чтобы «программные» переменные сохранялись, потому что программа будет генерировать правильные значения на основе «пользовательских» значений. Является ли обычной практикой разделять это в местах памяти? Например. таймер в PGM-памяти, thresholdByUser в DATA-памяти?
В моей программе я сделал несколько различных функций, каждый из которых имеет свой собственный набор пользовательских переменных.
Например: в настройках 5 пользовательских переменных, в генераторе 6 пользовательских переменных и т. Д.
Вы бы сделали 1 большой массив, а затем сделать #define settingsgeneratorSpeed 1, #define settingsBacklight 2
как места, так что вы могли бы назвать их так: Array[generatorSpeed], Array[settingsBacklight]
или вы все еще разделите его и соберете, используя struct orso?
Работаю на atmelstudio 4.0 с ATMEGA644 на STK500.
Спасибо за всю помощь, которую вы можете оказать!
Предполагая, что вы используете AT (X) Mega, при обращении к микроконтроллерам Atmel: IIRC зависит, какой комплект компиляторов вы используете. С gcc, если у вас есть что-то вроде статического int, оно перейдет в PGM и будет скопировано в RAM при запуске программы. Следовательно, если вы хотите, чтобы ваши переменные не находились в памяти PGM, вы должны сделать их переменными стека или кучи. Константы и статика всегда будут находиться в обоих. Если вы не хотите иметь только PGM-константы, вы можете указать это, но это требует специальных операций чтения.
Для вопроса 2, я бы использовал const int& settingX = array[Xoffset]
вместо определения. Но это предполагает, что есть некоторая потребность в итерации по массиву, иначе я бы просто определил отдельные переменные.