haker_fox 59 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Добрый день! Столкнулся с проблемой, что линковщик ложит секции в произвольном порядке в область RAM. Это документированно, это нормально. Но не для меня :rolleyes: В скрипте написано так place in RAM_region { readwrite, block CSTACK, }; По факту, глядя в map я вижу, что после блока CSTACK находится секция .bss. Я пытался её принудительно прописывать в начало (перед секциеё readwrite). Но это не меняло поведения линковщика. Читая доку, понял что можно секции ложить в блоки, но не понял как. Помогло временно сделать так place in RAM_region { readwrite, block CSTACK }; place at start of RAM_region { zeroinit }; Теперь .bss лежить в начале ОЗУ, а блок CSTACK - последним. Но это временная мера, не гарантирующая ничего. Также в документации не нашёл, что значит "P2", part 1 of 2:. Т.е. получается он (линковщик) разбивает процесс укладывания секций на части? Как эти управлять? В общем я маленько в растерянности... Подскажите, пожалуйста, что я упустил в доке? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bseyur 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба 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-файлу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба 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-файлу. Ок, спасибо!!! Попробую) Но в любом случае правильность работы скрипта нужно контролировать по map-файлу. Правда вот это и настараживает, как бы в релиз не ушло то. что может потенциально дать проблему :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bseyur 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Правда вот это и настараживает, как бы в релиз не ушло то. что может потенциально дать проблему :rolleyes: Ну практика показала, при каждой сборке не обязательно проверять, достаточно раз написать стабильно работающую конфигурацию :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться