Я работаю над проектом с использованием Atmega644 и хочу включить данные EEPROM в начальное программирование. Я использую MPLAB X и компилятор XC8 (версия 2.31), а для программирования использую PICkit4.
Я знаю, что компилятор xc8 для микроконтроллеров PIC имеет макрос __EEPROM_DATA(), который идеально подходит для моего варианта использования. Однако версия компилятора AVR, по-видимому, не имеет этого макроса (я пробовал как с синтаксисом CCI, так и без него...), поскольку он не распознает вызов и просто выдает ошибку при попытке компиляции.
Я просмотрел руководство для компилятора, но в нем нет никаких макросов/функций для этого.
Я пытался добавить макрос сам, скопировав его из компилятора PIC в шапку в моем проекте, но он, кажется, содержит инструкции по сборке, которых нет на атмеге, и я не смог найти их даже в документации для PIC (Иначе Я бы попробовал найти аналогичную инструкцию и заменить их)...
Есть ли другой способ включить исходные данные EEPROM в проект, чтобы они записывались в микроконтроллер во время программирования?
__EEPROM_DATA()
макрос поддерживается только для базовых и средних устройств с 8-битной PIC. Также есть квалификатор __eeprom
для размещения переменных в EEPROM. Но ни один из них не предназначен для чипов AVR.
Microchip поддерживает чипы AVR в XC8, используя заголовки avr. Существует заголовок eeprom, в котором определены некоторые макросы. Одним из таких макросов является EEMEM
. Вы можете использовать его для установки значений EEPROM во время программирования. Вот как вы его используете:
#include <avr/eeprom.h>
char EEMEM nums[] = { 1, 2, 3, 4, 5 };
Хорошая информация об использовании этого макроса содержится в этом и этом SO-ответах. Обязательно взгляните на них.
Я также рекомендую вам взглянуть на Руководство пользователя MPLAB XC8 C Compiler для AVR MCU, если вы не знали об этом.
XC8 для AVR — это всего лишь искалеченный avr-gcc, так что лучше использовать настоящий.
avr-gcc
вместоxc8-cc
, и они переименовали-mmcu=
в-mcpu=
, чтобы повысить ценность XC8.