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

 
 
 
Reply to this topicStart new topic
> Размещение переменной по адресу и задание начальных значений в IAR, IAR v 5.30.2
Sanya_kv
сообщение Jun 23 2009, 07:33
Сообщение #1


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

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



Разбираясь с данной темой, перелопатил весь форум, первую часть вопроса решил. Со второй возникают проблемы.
Есть несколько способов объявить сегмент по адресу и разместить в нем переменные, но как задать им начальные значения?
Есть способ:
#pragma location=0x1004
__no_init const int beta;

или
__no_init volatile char alpha @ 0x1000;
, но с __no_init все понятно.
Пробую дальше:
Определяю секцию во flash.icf (можно добавить в конце файла):
/* определяем секцию конфигурации размер 4096*/
define block CONF_DATA with size = 0x1000, alignment = 512 {};
place in ROM_region { block CONF_DATA };


далее в *.с объявляем:
#pragma section = "CONF_DATA"
const char fff[4096]@"CONF_DATA" = {"Начальные значения smile.gif"};

int main(void)
{
const char *Config = __section_begin("CONF_DATA");//Указатель на секцию конфигурации
const char *fff_Config = fff;

...
return 0;
}

Компилятор все проглатывает, только при отладке адрес fff_Config совсем не лежит в области Config.
Перепробовал множество методов, но в виду не идеальности документации, или плохой прокладки правильного решения найти не могу.
Если у кого есть готовое решение данной проблемы в IAR 5.xx, буду благодарен если прольёт свет на данную проблему.

Сообщение отредактировал Sanya_kv - Jun 23 2009, 07:37
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jun 23 2009, 07:48
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Помоему это не один раз обсуждалось.

Вот линк на мануал как это делается

http://supp.iar.com/Support/?note=36121&am...m=search+result
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 23 2009, 07:50
Сообщение #3


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Sanya_kv @ Jun 23 2009, 11:33) *

Вы хотите сказать что у вас
fff_Config != Config?
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 23 2009, 08:08
Сообщение #4


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

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



Цитата
Вы хотите сказать что у вас
fff_Config != Config?

Именно:
Config == 0х10ЕС00
fff_Config == 0х10759С

Цитата(MALLOY2 @ Jun 23 2009, 11:48) *
Помоему это не один раз обсуждалось.

Вот линк на мануал как это делается

http://supp.iar.com/Support/?note=36121&am...m=search+result


сделал так:

#pragma section = "CONF_DATA"
//const char fff[4096]@"CONF_DATA" = {"Начальные значения."};
#pragma location = "CONF_DATA"
__root const char fff[4096]={"Начальные значения."};

результат:
Config == 0х10ЕС00
fff_Config == 0х10759A

Сообщение отредактировал Sanya_kv - Jun 23 2009, 08:10
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jun 23 2009, 08:23
Сообщение #5


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



а в линк файле что у вас ? там тоже надо внести изменения
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 23 2009, 09:05
Сообщение #6


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

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



Указываю в flash.icf:
place at address mem: 0x010E000{ readonly section ConstSection1 };

далее в *.с объявляем:
Код
#pragma section = "ConstSection1"//без этого не работает
#pragma location = "ConstSection1"
__root const char RELEASEDATE[16] = __DATE__;
...
const char *uk_ConstSection1 = __section_begin("ConstSection1");
const char *uk_RELEASEDATE = RELEASEDATE;

результат:
uk_ConstSection1 == 0х10Е000
uk_RELEASEDATE == 0х10Е000
Ну наконец АЛИЛУЯ!!
Пробую далее:
Код
#pragma section = "ConstSection1"
#pragma location = "ConstSection1"
__root const char fff[128]={"Начальные значения."};
...
const char *uk_ConstSection1 = __section_begin("ConstSection1");
//const char *uk_RELEASEDATE = RELEASEDATE;
const char *fff_Config = fff;

результат:
uk_ConstSection1 == 0x0
fff_Config == 0x10C894
Вчем прикол?
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 23 2009, 10:30
Сообщение #7


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

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



УУУУРРРАААА!!!!!
Большое спасибо, нет ОГРОМНОЕ СПАСИБО MALLOY2, за тыканье носом.
С Меня сто грамм и кусочек сала.
Просьба модераторам поощрить его всеми доступными методами!!!
Сплав по Чусовой не отменяется!!!
Проясняю ситуацию:
Достаточно было удалить предыдущее объявление:
/* определяем секцию конфигурации размер 4096*/
/*define block CONF_DATA with size = 0x1000, alignment = 1024 {};
place in ROM_region { block CONF_DATA };*/

Окончательно проясняю ситуацию для всех нуждающихся (сейчас или в будущем):
Как разметить переменную по адресу (во flash) и присвоить ей начальное значение в IAR v 5.ХХ:
1. добавляем в flash.icf строчку:
Код
place at address mem: 0x010E000{ readonly section ConstSection1 };
где ConstSection1 Ваша секция.
2. В *.с пишем:

Код
#pragma section = "ConstSection1"
#pragma location = "ConstSection1"
__root const char fff[4096]= {"Начальные значения."};

int main(void)
{
const char *uk_ConstSection1 = __section_begin("ConstSection1");
const char *fff_Config = fff;

...
return 0;
}
Получаем:
uk_ConstSection1 == 0x10E000 "Начальные значения."
fff_Config == 0x10E000 "Начальные значения."

Как писать во flash описывается Здесь>>
Всем Спасибо!

Сообщение отредактировал Sanya_kv - Jun 23 2009, 10:34
Go to the top of the page
 
+Quote Post

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

 


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


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