Работа с флеш памятью в AtTiny24
#1
Продолжаем пытать камень.
Поиск в сети не дал конкретики по вопросу. Может, не те параметры поиска задаю?...
А именно: после старта программы нужно доставать из флеш-памяти некую переменную типа "char", и потом в процессе программы записывать ее, по ее же адресу, но с обновленной величиной. Как это делается?
Спасибо!
#2
Так как вы хотите - не получиться. А для понимания процесса записи флэша можно изучить аппноты 106 и 109, ну и даташит, ессесно. Да и возникает вопрос, а зачем такое надо?
#3
(16-03-2023, 07:46)nolpofaze : Да и возникает вопрос, а зачем такое надо?
В процессе выполнения программы возникает необходимость сохранить некий условный параметр, метку если хотите, который при следующем включении процессора повлияет на ход алгоритма.
#4
(16-03-2023, 10:13)Globus_vrn :
(16-03-2023, 07:46)nolpofaze : Да и возникает вопрос, а зачем такое надо?
В процессе выполнения программы возникает необходимость сохранить некий условный параметр, метку если хотите, который при следующем включении процессора повлияет на ход алгоритма.
А EEPROM (ППЗУ) для таких целей разве не подходит? 128 байт на борту тини24.
#5
Ну я не специалист... Флеш, ЕЕПРОМ...
Пусть это будет ЕЕПРОМ. Я не против. Как же мне решить проблемку?
#6
Код:
void eepWriteData(uint16_t addr, uint8_t data) {
//запись 8 битной переменной data по адресу addr
     cli();
     while(EECR & (1<<EEWE)) ;
     EEAR = addr;
     EEDR = data;
     EECR |= (1<<EEMWE);
     EECR |= (1<<EEWE);
     sei();
}
uint8_t eepReadData(uint16_t addr) {
//чтение
     while(EECR & (1<<EEWE));
     EEAR = addr;
     EECR |= (1<<EERE);
     return EEDR;
}

Если используете (AVR)AtmelStudio, WinAVR - можно использовать библиотеку "avr/eeprom.h".

Примеров использования eeprom.h в сети тьма 1
#7
Ну с этим все нормально. Накопал информации. Много разговоров в сети как объявлять переменные и пр. Я напишу как это сделал я и каков результат.

Запись переменной в ЕЕПРОМ

Код:
char eeADDR = 0;
char Hoba = 152;
...
...
...

eeprom_write_byte (eeADDR, Hoba);

Считывание переменной
Код:
char eeADDR = 0;
char Hoba;
...
...
...

Hoba = eeprom_read_byte (eeADDR);

Компилятор выбрасывает варнинги. Но программа сохраняет и восстанавливает данные.