А нельзя так сохранять значения и на время отключения питания? В какой момент они уничтожаются во флеше?
Вид для печати
А нельзя так сохранять значения и на время отключения питания? В какой момент они уничтожаются во флеше?
Пример
Следующий фрагмент кода иллюстрируют, как читать и писать данные в PROGMEM
#include <avr/pgmspace.h>
// save some unsigned ints
const PROGMEM uint16_t charSet[]={65000,32796,16843,10,11234};
// save some chars
const char signMessage[] PROGMEM ={"I AM PREDATOR, UNSEEN COMBATANT. CREATED BY THE UNITED STATES DEPART"};
unsignedint displayInt;
int k;// counter variable
char myChar;
voidsetup(){
Serial.begin(9600);
while(!Serial);
// put your setup code here, to run once:
// read back a 2-byte int
for(k =0; k <5; k++)
{
displayInt = pgm_read_word_near(charSet + k);
Serial.println(displayInt);
}
Serial.println();
// read back a char
int len = strlen_P(signMessage);
for(k =0; k < len; k++)
{
myChar = pgm_read_byte_near(signMessage + k);
Serial.print(myChar);
}
Serial.println();
}
voidloop(){
// put your main code here, to run repeatedly:
}
Это я знаю. Вопрос мой вот в чём: поскольку тут идет размещение значений "во флеш памяти", то, возможно, что они там сохраняются и после отключения питания? МОжет можно использовать как более ёмкий и простой вариант вместо EEPROM?
Получается что можно. Я на maple mini так и делал, у нее него нет EEPROM
Такие вот цены, на сегодняшний день. У наны кроме контроллера еще куча обвеса, включая дорогой FTDI чип
Ясно по стм32.
А по поводу обращения к старым, сохранённым во флеше значениям - как? Я же так понимаю, что по имени переменной уже нельзя будет обратиться - попадёт в другое место флеша?
Имя это для компилятора, он автоматически, везде где встретит в коде эту запись, подставит вместо нее физический адрес
Т.е. есть уверенность, что отработав на объекте и записав значения массива в PROGMEM я, запустив дома ардуинку, смогу обратиться к записанным на объекте во флеш данным как к тем же самым элементам массива и получить в результате ранее записанные данные? Не получится, что массив будет создан уже по другому физическому адресу и, соответственно, он будет нулевым, а не со старыми значениями?
С чего бы? Объяснение есть?Цитата:
Не получится, что массив будет создан уже по другому физическому адресу
Компиляция, оптимизация... Может там сначала какая очистка памяти делается под область массива при создании... Это же не машинные коды...
Не на чем просто сейчас попробовать - бутлоадер, похоже, слетел. Поэтому и вопросы. И "немного смущает", что вроде удобная вещь, а нет примеров использования, всё исключительно через EEPROM...