реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Адресация констант EEPROM в IAR и VS, как совместить?
sevstels
сообщение Dec 5 2009, 07:01
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



Есть утилита, которая меняет параметры устройства записью их в 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;

-


--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
vmp
сообщение Dec 5 2009, 13:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



http://caxapa.ru/163421.html?todo=full
Go to the top of the page
 
+Quote Post
sevstels
сообщение Dec 5 2009, 16:57
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



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

-


--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
vmp
сообщение Dec 5 2009, 17:35
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(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 и т.д.};
?
Go to the top of the page
 
+Quote Post
sevstels
сообщение Dec 5 2009, 19:05
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



Цитата
{0x80, 0x1234 и т.д.};

Когда порядка 3к различных типов и значений переменных идут подряд без имён, сомневаюсь что это облегчит сопровождение кода. Да и Вижуал студио не понимает директив #pragma location, __eeprom ...


--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
vmp
сообщение Dec 5 2009, 19:21
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(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
Go to the top of the page
 
+Quote Post
sevstels
сообщение Dec 7 2009, 00:53
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



>>Объединение переменных в осмысленные структуры
Всё равно, "криво" это как то... не удобно.


--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 8 2009, 07:38
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(sevstels @ Dec 7 2009, 04:53) *
Всё равно, "криво" это как то... не удобно.

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

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

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

Успехов wink.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01548 секунд с 7
ELECTRONIX ©2004-2016