Чтение и запись EEPROM в WinAVR

Просмотров: 22590Комментарии: 3
Электроника. СхемотехникаAVR.Начинающим

Решил вот написать короткую заметку по работе с EEPROM в AVR. EEPROM (Electrically Erasable Programmable Read-Only Memory) - электрически стираемое перепрограммируемое ПЗУ. 
Итак, давайте каким нибудь простым способом научимся читать и записывать данные в память EEPROM микроконтроллера.  Запись, чтение и обновление данных в EEPROM производится функциями определенными в файле eeprom.h (в папке с установленной WinAVR - \avr\include\avr\eeprom.h). С помощью этих функций могут быть прочитаны и записаны отдельные байты, двухбайтные данные (так называемое слово - word) и блоки данных. В этой заметке разберем как читать/писать отдельные байты и слова. Потому что, если писать о других типах и блоках данных, тогда заметка превратится в большую статью. При объявлении переменной в EEPROM должен быть определен атрибут для раздела ".eeprom". Обычно он определен в файле eeprom.h, но можно и перестраховаться и добавить в нашу программу
#ifndef EEMEM
#define EEMEM__attribute__ ((section (".eeprom")))
#endif
Теперь объявим переменные разных типов в EEPROM и поработаем с ними:
unsigned char eeVar EEMEM = 200;//byte
unsigned short int eeWord EEMEM = 32768;//word

Чтение/запись байта
unsigned char myVar;
myVar = eeprom_read_byte(&eeVar);//читаем содержимое переменной
myVar = 100;//изменяем значение
eeprom_write_byte(&eeVar, myVar); // записываем новые данные в EEPROM

Чтение/запись слова
unsigned short int myWord;
myWord = eeprom_read_word(&eeWord); // чтение данных из EEPROM
myWord = 65000;//изменяем значение
eeprom_write_word(&eeWord, myWord); //записываем в EEPROM

Немного подитожим. Аргументом функций eeprom_read_... является адрес переменной в EEPROM, а результатом - значение переменной в EEPROM. Аргументами функций eeprom_write_... являются адрес в EEPROM, куда записать данные и значение которое нужно записать.
Еще есть функции обновления eeprom_update_byte и eeprom_update_word, они используются также как и update_write_...
Да, еще, компилятор создаст файл с расширением .eep. Этот файл должен быть передан в микроконтроллер (запись EEPROM), если в EEPROM уже содержатся данные для начальной работы программы.
На этом пока всеsmile
Добавлено 3.03.2011 - Продолжение

Комментариев: 3 RSS

1 NikB Сайт 05-04-2011 00:04

Хорошо, прочитал : "Еще есть функции обновления eeprom_update_byte и eeprom_update_word, они используются также как и update_write_..."

А чем они отличаются? (используются как write, значит ли ето, что они работают вполне одинаково?)

Зачем они нам?

2 Dmitry 05-04-2011 03:35

функции write записывают в любом случае, а функции update только если изменились байты. таким образом, можем дольше сохранять работоспособность eeprom памяти

3 Александр 20-02-2015 01:17

Спасибо! Особенно за функцию update.

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)