Terrabyte 0 18 сентября, 2007 Опубликовано 18 сентября, 2007 · Жалоба работая с 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 0 18 сентября, 2007 Опубликовано 18 сентября, 2007 · Жалоба Что нужно сделать? 1. Прочитать документацию на компилятор и линкер, особое внимание уделить сегментам, глава Placing code and data. 2. Описать в XCL-файле свой сегмент с нужными границами, поправив границы других сегментов. 3. Объявить свою переменную в нужном сегменте, см. #pragma segment="имя сегмента". 4. Уяснить разницу между словами flesh (плоть) и flash (вспышка). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 18 сентября, 2007 Опубликовано 18 сентября, 2007 · Жалоба т.е. необходимо чтобы при заливке программы через JTAG, по этому адресу flesh была константа, скорее всего дело в настройке Linkerа , т. е. как нужно изменить файл __FLESH.xcl, и что потом ещё сделать? не заметил что выответили, я описывал свой сегмент, и пробовал объявлять таким образом, 1)поправил границы.. 2) задал адрес начала и конца нового сегмента 3) и создал сегмент -Z(CONST)MYROM=ROMMYSTART-ROMMYEND 4) #pragma location = "MYROM" static const uint Adr_flesh = 0x1234; не получается так ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 18 сентября, 2007 Опубликовано 18 сентября, 2007 · Жалоба не получается так ! Специально проверил - все получилось. Нужно только чтобы на данную переменную была ссылка или она была объявлена как __root const uint Adr_flash = 0x1234; иначе линкер её выбрасывает как неиспользуемую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 18 сентября, 2007 Опубликовано 18 сентября, 2007 · Жалоба Очлично, всё получилось, большое спасибо! flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh ! :07: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 25 февраля, 2008 Опубликовано 25 февраля, 2008 · Жалоба Переползаю с IAR4.42 на IAR5.11. В мануалах по компановщику не встретил такой информации (может чего-то упустил). Нашел только как размещать в регионах памяти не инициаконстанты. В мануале нашел лишь то, что можно размещать только неининциализируемые константы. Танцы с бубном не помогают. В IAR 4,42 делал следующим образом: #pragma location = 0x00001000 __root const unsigmed int data = 0x25022008; В IAR5.11 не работает, говорит, что константа должна быть __no_init. Собственно вопрос тот же, как разместить инициализируемую константу по указанному адресу в IAR5.11? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 25 февраля, 2008 Опубликовано 25 февраля, 2008 · Жалоба Переползаю с IAR4.42 на IAR5.11. Собственно вопрос тот же, как разместить инициализируемую константу по указанному адресу в IAR5.11? пару дней назад обсуждалось http://electronix.ru/forum/index.php?showtopic=43739 В общем надо переменную закинуть в секцию и расположить секцию по определеннуму адресу в icf файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 25 февраля, 2008 Опубликовано 25 февраля, 2008 · Жалоба пару дней назад обсуждалось http://electronix.ru/forum/index.php?showtopic=43739 В общем надо переменную закинуть в секцию и расположить секцию по определеннуму адресу в icf файле. Да уж, не весело. Собственно я так и думал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 6 января, 2014 Опубликовано 6 января, 2014 · Жалоба Специально проверил - все получилось. Нужно только чтобы на данную переменную была ссылка или она была объявлена как __root const uint Adr_flash = 0x1234; иначе линкер её выбрасывает как неиспользуемую. извиняюсь за опечатки, забыл ответить. Получилось с константами. Спасибо за ответы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться