Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Адресация констант EEPROM в IAR и VS
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
sevstels
Есть утилита, которая меняет параметры устройства записью их в EEPROM AVR. Переменных этих накопилось уже довольно много, и начинаются проблемы с совпадением адресов (заданных жестко) при изменении кода утилиты и кода AVR. Приходится перепахивать всё, в случае сдвига переменной в секторе eeprom или добавлении новых на их место.

Подскажите плиз, как оформить файл "eeprom.h", чтоб компилятор IAR и MSVS C++ могли извлекать адреса переменных по их именам. Подключение IAR-овской версии Visual Studio не понимает и выдаёт кучу ошибок.

пример как сейчас сделано
#define AUDIO_LEVEL_L 0x0fe8
#pragma location = AUDIO_LEVEL_L
__root __eeprom volatile unsigned char AU_level_l = 0x80;

-
sevstels
Спасибо, но использование варианта со структурами не подходит тем, что не позволяет автоматом сделать дефолтную прошивку для первого включения. Надо инициализировать новые значения в еепром вручную, что занимает пожалуй времени больше, чем правка адресов в коде. Т.е. нужен вариант, чтоб одновременно с работоспособостью обоих компиляторов использовать адреса, существовала возможность получить прошивку начальной инициализации. rolleyes.gif

-
vmp
Цитата(sevstels @ Dec 5 2009, 19:57) *
Спасибо, но использование варианта со структурами не подходит тем, что не позволяет автоматом сделать дефолтную прошивку для первого включения.

А кто мешает при использовании структур вместо
#pragma location = AUDIO_LEVEL_L
__root __eeprom volatile unsigned char AU_level_l = 0x80;
написать
#pragma location = MY_EEPROM_START
__root __eeprom volatile MY_EEPROM_T my_eeprom = {0x80, 0x1234 и т.д.};
?
sevstels
Цитата
{0x80, 0x1234 и т.д.};

Когда порядка 3к различных типов и значений переменных идут подряд без имён, сомневаюсь что это облегчит сопровождение кода. Да и Вижуал студио не понимает директив #pragma location, __eeprom ...
vmp
Цитата(sevstels @ Dec 5 2009, 22:05) *
Когда порядка 3к различных типов и значений переменных идут подряд без имён, сомневаюсь что это облегчит сопровождение кода.

Если в проекте присутствуют 3к переменных, которые объявляются побайтно и по отдельности, как в примере, тут поможет только полный редизайн проекта. Объединение переменных в осмысленные структуры (в том числе многоуровневые) заметно облегчает жизнь.
А внутрь инициализатора структуры можно вставлять комментарии.


Цитата(sevstels @ Dec 5 2009, 22:05) *
Да и Вижуал студио не понимает директив #pragma location, __eeprom ...

Зато она прекрасно понимает директиву #ifdef:
Код
#ifdef __IAR_SYSTEMS_ICC__
// 64-битное целое без знака для компилятора от IAR
typedef unsigned long long qword;
#else
// 64-битное целое без знака для компилятора Microsoft Visual C
typedef unsigned __int64 qword;
#endif
sevstels
>>Объединение переменных в осмысленные структуры
Всё равно, "криво" это как то... не удобно.
Dog Pawlowa
Цитата(sevstels @ Dec 7 2009, 04:53) *
Всё равно, "криво" это как то... не удобно.

Всем удобно, а Вам - неудобно. Вспоминаю как страшный сон свои попытки неиспользования структур. Это сродни ручной линковке.

Что касается инициализации трех сотен байт, то есть способ включения в текст имен полей, с предшествующей точкой, кажется, поищите тут по форуму.
Типа ={.field1=30, ...} Мне неактульно, вот и подзабыл, сорри.

Для того, чтобы не удивлять Вижуал студио страшными словами типа __eeprom, используется условная компиляция.

Успехов wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.