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

 
 
 
Reply to this topicStart new topic
> Линковщик IAR 7.50, Размещает секции в произвольном порядке, как сделать упорядоченно
haker_fox
сообщение Jan 10 2017, 01:44
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Добрый день! Столкнулся с проблемой, что линковщик ложит секции в произвольном порядке в область RAM. Это документированно, это нормально. Но не для меня rolleyes.gif

В скрипте написано так
CODE
place in RAM_region   { readwrite,
                        block CSTACK,
                         };

По факту, глядя в map я вижу, что после блока CSTACK находится секция .bss.

Я пытался её принудительно прописывать в начало (перед секциеё readwrite). Но это не меняло поведения линковщика. Читая доку, понял что можно секции ложить в блоки, но не понял как. Помогло временно сделать так
CODE
place in RAM_region   { readwrite,
                        block CSTACK };
place at start of RAM_region { zeroinit };

Теперь .bss лежить в начале ОЗУ, а блок CSTACK - последним. Но это временная мера, не гарантирующая ничего. Также в документации не нашёл, что значит
QUOTE
"P2", part 1 of 2:
. Т.е. получается он (линковщик) разбивает процесс укладывания секций на части? Как эти управлять? В общем я маленько в растерянности... Подскажите, пожалуйста, что я упустил в доке? Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
bseyur
сообщение Jan 10 2017, 04:09
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Код
place at end of RAM_region   { block CSTACK };

Попробуйте так. Кроме того, есть директива fixed order, которая позволяет задать порядок следования секций именно в том порядке, как они объявлены в фигурных скобках. Например:

Код
define block STARTCODE_block with fixed order    { readonly section .intvec , readonly section .startcode };
place at start of ROM_region { block STARTCODE_block };

Но в любом случае правильность работы скрипта нужно контролировать по map-файлу.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 10 2017, 05:12
Сообщение #3


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (bseyur @ Jan 10 2017, 12:09) *
CODE
place at end of RAM_region   { block CSTACK };

Попробуйте так. Кроме того, есть директива fixed order, которая позволяет задать порядок следования секций именно в том порядке, как они объявлены в фигурных скобках. Например:

CODE
define block STARTCODE_block with fixed order    { readonly section .intvec , readonly section .startcode };
place at start of ROM_region { block STARTCODE_block };

Но в любом случае правильность работы скрипта нужно контролировать по map-файлу.

Ок, спасибо!!! Попробую)


QUOTE (bseyur @ Jan 10 2017, 12:09) *
Но в любом случае правильность работы скрипта нужно контролировать по map-файлу.

Правда вот это и настараживает, как бы в релиз не ушло то. что может потенциально дать проблему rolleyes.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
bseyur
сообщение Jan 10 2017, 05:31
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Цитата(haker_fox @ Jan 10 2017, 12:12) *
Правда вот это и настараживает, как бы в релиз не ушло то. что может потенциально дать проблему rolleyes.gif

Ну практика показала, при каждой сборке не обязательно проверять, достаточно раз написать стабильно работающую конфигурацию :-)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th May 2024 - 12:32
Рейтинг@Mail.ru


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