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

 
 
 
Reply to this topicStart new topic
> Оптимизация данных в eeprom, Как сделать чтобы IAR не оптимизировал
mempfis_
сообщение Jan 20 2009, 12:46
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Добрый день.
Стоит задача сохранить в eeprom несколько байт данных. Сохраняю по 3 набора данных и пытаюсь отделить их друг от друга разделительной областью:

Код
__eeprom unsigned char var1;
__eeprom unsigned char area1[32];

__eeprom unsigned char var2;
__eeprom unsigned char area2[32];

__eeprom unsigned char var3;
__eeprom unsigned char area3[32];


Компилятор упорно оптимизирует эти разделительные области т.к. я к ним не обращаюсь.
Приходится вводить фиктивное обращение к ним чтобы обмануть компилятор.
Подскажите пожалуйста как явно указать компилятору чтобы он не оптимизировал эти области.
Пробовал использовать __require(area1) выдаёт следующие ошибки:

Код
Error[Pe147]: declaration is incompatible with "void __require(void *)" (declared at line 57 of "C:\Program Files\IAR Systems\IAR AVR\ D:\projects\Kotel\IAR\eeprom.h 36
Error[Pe144]: a value of type "unsigned char __eeprom *" cannot be used to initialize an entity of type "int" D:\projects\Kotel\IAR\eeprom.h 36


Подскажите как в IARe решается эта проблема.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 20 2009, 12:55
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Kлючевое слово __root. Или, что лучше, создать неименованную структуру, примерно так:

Код
struct
{
__eeprom unsigned char var1;
__eeprom unsigned char area1[32];

__eeprom unsigned char var2;
__eeprom unsigned char area2[32];

__eeprom unsigned char var3;
__eeprom unsigned char area3[32];
}


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jan 20 2009, 13:17
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата
Kлючевое слово __root. Или, что лучше, создать неименованную структуру, примерно так:


Спасибо за подсказку.
Попутно вопрос если применить __root с __no_init то как линкер разместит переменные?
Я вижу что файл для eeprom тает с применением __no_init но будут-ли мои переменные расположенны именно там где нужно (т.е. останется между ними интервал) или компилятор оптимизирует и расположит их все вместе?
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Jan 20 2009, 13:19
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491



Цитата(mempfis_ @ Jan 20 2009, 16:17) *
Спасибо за подсказку.
Попутно вопрос если применить __root с __no_init то как линкер разместит переменные?
Я вижу что файл для eeprom тает с применением __no_init но будут-ли мои переменные расположенны именно там где нужно (т.е. останется между ними интервал) или компилятор оптимизирует и расположит их все вместе?

это зависит от того, разрешена ли соответствующая опция оптимизации. по опыту скажу, что лучше (и правильнее) использовать структуру, там расположение полей будет гарантировано в любом случае. при необходимости, вопросы выравнивания решаются применением #pragma align
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jan 20 2009, 14:17
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Уговорили - вместо переменных использовал структуру smile.gif
Надеюсь компилятор не посмеет оптимизировать разделительные поля структуры и не изменит порядок их размещения smile.gif
Всем спасибо за подсказки smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 12th July 2025 - 13:37
Рейтинг@Mail.ru


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