Перейти к содержанию
    

размещение констант в ROM

работая с 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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

1. Прочитать документацию на компилятор и линкер, особое внимание уделить сегментам, глава Placing code and data.

2. Описать в XCL-файле свой сегмент с нужными границами, поправив границы других сегментов.

3. Объявить свою переменную в нужном сегменте, см. #pragma segment="имя сегмента".

4. Уяснить разницу между словами flesh (плоть) и flash (вспышка).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. необходимо чтобы при заливке программы через JTAG,

по этому адресу flesh была константа, скорее всего дело в настройке

Linkerа , т. е. как нужно изменить файл __FLESH.xcl, и что потом ещё сделать?

 

не заметил что выответили, я описывал свой сегмент, и пробовал объявлять таким образом,

1)поправил границы..

2) задал адрес начала и конца нового сегмента

3) и создал сегмент -Z(CONST)MYROM=ROMMYSTART-ROMMYEND

4) #pragma location = "MYROM"

static const uint Adr_flesh = 0x1234;

не получается так !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не получается так !

Специально проверил - все получилось. Нужно только чтобы на данную переменную была ссылка или она была объявлена как

__root const uint Adr_flash = 0x1234;

иначе линкер её выбрасывает как неиспользуемую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очлично, всё получилось, большое спасибо!

flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh, flAsh !

:07:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переползаю с IAR4.42 на IAR5.11.

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

В IAR 4,42 делал следующим образом:

 

#pragma location = 0x00001000

__root const unsigmed int data = 0x25022008;

 

В IAR5.11 не работает, говорит, что константа должна быть __no_init.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переползаю с IAR4.42 на IAR5.11.

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

пару дней назад обсуждалось

http://electronix.ru/forum/index.php?showtopic=43739

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пару дней назад обсуждалось

http://electronix.ru/forum/index.php?showtopic=43739

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Специально проверил - все получилось. Нужно только чтобы на данную переменную была ссылка или она была объявлена как

__root const uint Adr_flash = 0x1234;

иначе линкер её выбрасывает как неиспользуемую.

извиняюсь за опечатки, забыл ответить. Получилось с константами. Спасибо за ответы!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...