Назрел вопрос сохранения нескольких параметров программы между включениями МК. Как писать в флеш на асме знаю, а что на Си делать? просто обьявить переменную flash uint8_t var; достаточно? как задать исходное значение параметра (которое сразу после перепрошивки будет)? if(var==0) var=33; Чтото может красивше есть? Писать в эту переменную также как и в обычную, значение автоматически в память прошьется и восстановится после рестарта?
однако обе памяти действительно одинаковы и могут считаться EEPROM. Просто кусочек именуемый "EEPROM" спецом предназначен для длительного хранения констант и чтения/записи их из другой части - flash, где находится сама программа.
как задать исходное значение параметра (которое сразу после перепрошивки будет)?
просто var=33; это пропишется в flash и будет стартовым значением переменной. А если это значение изменилось и его нужно сохранить и использовать при новом старте программы, то понадобится хранение в EEPROM.
//store initial byte to eeprom uint8_t EEMEM eeprombyte=0x10; //store initial word to eeprom uint16_t EEMEM eepromword=0x5555; //store string to eeprom uint8_t EEMEM eepromstring[5]={"Test\0"}; int main(void) {
//RAM byte variable uint8_t RAMbyte; //RAM word variable uint16_t RAMword; //RAM array of bytes uint8_t RAMstring[5]; //read byte from EEPROm and store to RAM RAMbyte = eeprom_read_byte(&eeprombyte); // обратная функция - запись eeprom_write_byte (uint8_t *__p, uint8_t __value) //read word from EEPROM and store to RAM RAMword = eeprom_read_word(&eepromword); // подробная инфа в хелпе к ВинАВР "file://localhost/C:/Program%20Files/WinAVR/doc/avr-libc/avr-libc-user-manual/group__avr__eeprom.html" (без кавычек) //copy string fro mEEPROM to RAM eeprom_read_block ((void *)&RAMstring, (const void *)&eepromstring,5); return (0); }