Принудительное сохранение данных в оперативной памяти, а не в ПЗУ - PullRequest
0 голосов
/ 29 марта 2020

Можно ли принудительно сохранить значение const в ОЗУ вместо ПЗУ на встроенном устройстве вместо того, чтобы предлагать компилятору. Я хочу сохранить скорость чтения из ОЗУ, но убедитесь, что значение не изменилось где-то в коде?

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Вы можете принудительно поместить переменную в область данных (или где-либо еще) и сообщить компилятору, что она не будет изменена:

const int variable __attribute__((section(".data")));

Способ указания раздел зависит от компилятора, но обычно __attribute__ является правильным подходом.

Чтобы узнать нужный раздел, проверьте код запуска, там вы увидите их адреса и размеры (или проверьте компоновщик).

1 голос
/ 29 марта 2020

На Arduino они будут размещены в оперативной памяти. Проблема заключается в доступе к FLA SH, который требует определенных операций c, поскольку AVR u C имеет отдельные адресные пространства.

Без специальных расширений компилятора, таких как g cc Именованные адресные пространства или PROGMEM, вы не можете получить доступ к данным в FLA SH.

Таким образом, все данные const будут помещены в оперативную память. Вам не нужно ничего делать.


Вам нужно будет что-то сделать, если вы решите получить к ним доступ из FLA SH

...