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

 
 
 
Reply to this topicStart new topic
> размещение констант в ROM, AT91SAM7Sxxx
Terrabyte
сообщение Sep 18 2007, 11:47
Сообщение #1


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

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



работая с IAR 4.30А столкнулся с проблемой,
не получается разместить константу в internal flesh по абсолютному адресу,
проц ..SAM7S128, - 512 сегментов по 256 байт .
задача : разместить число 0x1234 в последнем сегменте, т.е.
по адресу 0x1FF00.
пробовал следующее:
1) static const int Adr_flesh @ 0x1FF00 = 0x1234;
2) #pragma location = 0x1FF00
const int Adr_flesh = 0x1234;
3) пробовал в файле __.xcl поменять
-D ROMEND=0001FFFF на
-D ROMEND=0001FEFF

Что нужно сделать? прошу помоч
Go to the top of the page
 
+Quote Post
vmp
сообщение Sep 18 2007, 11:54
Сообщение #2


Местный
***

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



Цитата
Что нужно сделать?

1. Прочитать документацию на компилятор и линкер, особое внимание уделить сегментам, глава Placing code and data.
2. Описать в XCL-файле свой сегмент с нужными границами, поправив границы других сегментов.
3. Объявить свою переменную в нужном сегменте, см. #pragma segment="имя сегмента".
4. Уяснить разницу между словами flesh (плоть) и flash (вспышка).
Go to the top of the page
 
+Quote Post
Terrabyte
сообщение Sep 18 2007, 12:02
Сообщение #3


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

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



т.е. необходимо чтобы при заливке программы через JTAG,
по этому адресу flesh была константа, скорее всего дело в настройке
Linkerа , т. е. как нужно изменить файл __FLESH.xcl, и что потом ещё сделать?

не заметил что выответили, я описывал свой сегмент, и пробовал объявлять таким образом,
1)поправил границы..
2) задал адрес начала и конца нового сегмента
3) и создал сегмент -Z(CONST)MYROM=ROMMYSTART-ROMMYEND
4) #pragma location = "MYROM"
static const uint Adr_flesh = 0x1234;
не получается так !
Go to the top of the page
 
+Quote Post
vmp
сообщение Sep 18 2007, 12:15
Сообщение #4


Местный
***

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



Цитата(Terrabyte @ Sep 18 2007, 16:02) *
не получается так !

Специально проверил - все получилось. Нужно только чтобы на данную переменную была ссылка или она была объявлена как
__root const uint Adr_flash = 0x1234;
иначе линкер её выбрасывает как неиспользуемую.
Go to the top of the page
 
+Quote Post
Terrabyte
сообщение Sep 18 2007, 12:36
Сообщение #5


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

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



Очлично, всё получилось, большое спасибо!
flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh !
07.gif
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Feb 25 2008, 11:05
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Переползаю с IAR4.42 на IAR5.11.
В мануалах по компановщику не встретил такой информации (может чего-то упустил). Нашел только как размещать в регионах памяти не инициаконстанты. В мануале нашел лишь то, что можно размещать только неининциализируемые константы. Танцы с бубном не помогают.
В IAR 4,42 делал следующим образом:

#pragma location = 0x00001000
__root const unsigmed int data = 0x25022008;

В IAR5.11 не работает, говорит, что константа должна быть __no_init.
Собственно вопрос тот же, как разместить инициализируемую константу по указанному адресу в IAR5.11? help.gif


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 25 2008, 13:06
Сообщение #7


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

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



Цитата(Vitaliy_ARM @ Feb 25 2008, 14:05) *
Переползаю с IAR4.42 на IAR5.11.
Собственно вопрос тот же, как разместить инициализируемую константу по указанному адресу в IAR5.11? help.gif

пару дней назад обсуждалось
http://electronix.ru/forum/index.php?showtopic=43739

В общем надо переменную закинуть в секцию и расположить секцию по определеннуму адресу в icf файле.
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Feb 25 2008, 14:46
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(KRS @ Feb 25 2008, 16:06) *
пару дней назад обсуждалось
http://electronix.ru/forum/index.php?showtopic=43739

В общем надо переменную закинуть в секцию и расположить секцию по определеннуму адресу в icf файле.


Да уж, не весело. Собственно я так и думал


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Terrabyte
сообщение Jan 6 2014, 11:17
Сообщение #9


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

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



Цитата(vmp @ Sep 18 2007, 15:15) *
Специально проверил - все получилось. Нужно только чтобы на данную переменную была ссылка или она была объявлена как
__root const uint Adr_flash = 0x1234;
иначе линкер её выбрасывает как неиспользуемую.

извиняюсь за опечатки, забыл ответить. Получилось с константами. Спасибо за ответы!
Go to the top of the page
 
+Quote Post

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

 


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


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