Сохранение констант в EEPROM при использовании WinAVR (GCC) |
![]() |
Добавил(а) microsin | ||
В этой статье будет показано, как сохранять данные в EEPROM путем определения переменных специального типа. Для этого нужно подключить к модулю (файлу исходного кода C) библиотечный заголовочный файл eeprom.h с помощью директивы #include "avr/eeprom.h". Этот заголовочный файл можно найти в директории установки WinAVR, полный путь будет наподобие c: \ WinAVR-20100110 \ avr \ include \ avr \ eeprom.h. В коде примера простое декларирование переменной EEPROM использует слово атрибута EEMEM:
Ключевое слово атрибута EEMEM говорит компилятору, что переменная должна быть сохранена в EEPROM, и при этом создается специальный файл *.eep, который должен быть отдельно записан в EEPROM чипа AVR при программировании его программатором. Можно посмотреть на результат компиляции этого кода компилятором AVR-GCC. Size after: main.elf : section size addr .text 156 0 .data 0 8388704 .bss 0 8388704 .noinit 0 8388704 .eeprom 8 8454144 .stab 876 0 .stabstr 132 0 .debug_aranges 20 0 .debug_pubnames 74 0 .debug_info 486 0 .debug_abbrev 316 0 .debug_line 240 0 .debug_str 271 0 Total 2579 Здесь приведена информация компилятора по размерам и адресам выделенных блоков памяти на различные секции кода. Выделенная жирным шрифтом строка (.eeprom 8 8454144) показывает размер занятой памяти в EEPROM. В нашем частном случае можно увидеть, что занятый размер составляет 8 байт: 1 байт на байтовую переменную, 2 байта на переменную слова, и 5 байт на текстовый массив, всего получается в сумме 8 занятых байт EEPROM. Если открыть файл .eep (он обычно размещен в папке проекта) текстовым редактором, то можно увидеть, что это обычный HEX-файл [2] со следующим содержанием: :0800000054657374005555109E :00000001FF Не забывайте о том, что этот файл должен быть записан в память микроконтроллера любым стандартным программатором, например ISP [1]. [Ссылки] 1. Программаторы для AVR. |