Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: размещение констант в ROM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Terrabyte
работая с 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

Что нужно сделать? прошу помоч
vmp
Цитата
Что нужно сделать?

1. Прочитать документацию на компилятор и линкер, особое внимание уделить сегментам, глава Placing code and data.
2. Описать в XCL-файле свой сегмент с нужными границами, поправив границы других сегментов.
3. Объявить свою переменную в нужном сегменте, см. #pragma segment="имя сегмента".
4. Уяснить разницу между словами flesh (плоть) и flash (вспышка).
Terrabyte
т.е. необходимо чтобы при заливке программы через JTAG,
по этому адресу flesh была константа, скорее всего дело в настройке
Linkerа , т. е. как нужно изменить файл __FLESH.xcl, и что потом ещё сделать?

не заметил что выответили, я описывал свой сегмент, и пробовал объявлять таким образом,
1)поправил границы..
2) задал адрес начала и конца нового сегмента
3) и создал сегмент -Z(CONST)MYROM=ROMMYSTART-ROMMYEND
4) #pragma location = "MYROM"
static const uint Adr_flesh = 0x1234;
не получается так !
vmp
Цитата(Terrabyte @ Sep 18 2007, 16:02) *
не получается так !

Специально проверил - все получилось. Нужно только чтобы на данную переменную была ссылка или она была объявлена как
__root const uint Adr_flash = 0x1234;
иначе линкер её выбрасывает как неиспользуемую.
Terrabyte
Очлично, всё получилось, большое спасибо!
flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh !
07.gif
Vitaliy_ARM
Переползаю с IAR4.42 на IAR5.11.
В мануалах по компановщику не встретил такой информации (может чего-то упустил). Нашел только как размещать в регионах памяти не инициаконстанты. В мануале нашел лишь то, что можно размещать только неининциализируемые константы. Танцы с бубном не помогают.
В IAR 4,42 делал следующим образом:

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

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

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

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

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


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

извиняюсь за опечатки, забыл ответить. Получилось с константами. Спасибо за ответы!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.