Исходное содержимое EEPROM в Atmega644

Я работаю над проектом с использованием Atmega644 и хочу включить данные EEPROM в начальное программирование. Я использую MPLAB X и компилятор XC8 (версия 2.31), а для программирования использую PICkit4.

Я знаю, что компилятор xc8 для микроконтроллеров PIC имеет макрос __EEPROM_DATA(), который идеально подходит для моего варианта использования. Однако версия компилятора AVR, по-видимому, не имеет этого макроса (я пробовал как с синтаксисом CCI, так и без него...), поскольку он не распознает вызов и просто выдает ошибку при попытке компиляции.

Я просмотрел руководство для компилятора, но в нем нет никаких макросов/функций для этого.

Я пытался добавить макрос сам, скопировав его из компилятора PIC в шапку в моем проекте, но он, кажется, содержит инструкции по сборке, которых нет на атмеге, и я не смог найти их даже в документации для PIC (Иначе Я бы попробовал найти аналогичную инструкцию и заменить их)...

Есть ли другой способ включить исходные данные EEPROM в проект, чтобы они записывались в микроконтроллер во время программирования?

XC8 для AVR — это всего лишь искалеченный avr-gcc, так что лучше использовать настоящий. avr-gcc вместо xc8-cc, и они переименовали -mmcu= в -mcpu=, чтобы повысить ценность XC8.

emacs drives me nuts 29.11.2022 17:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

__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, если вы не знали об этом.

Другие вопросы по теме