Автор |
Съобщение |
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Област с 0x00 в края на генерирания от GCC bin
Направо ме подлуди този път. Вече 7-8 часа се боря. В края на бинарния файл имам голяма област с нули и то извън диапазона за flash който съм задал. Процесора е Атмелски Cortex M0 и Компилирам с Atml Studio. Това ми е линкерския скрипт: Но упорито гадината слага някакви нули отзад. Интересно е като извадя hex файл се получава това в края. Изглежда че отнякъде се слага секция извън диапазона за rom който съм задал. И в бинарния фал между края на програмата и това запълва с нули. Като откоментирам .CRC секцията си я слага на мястото и след този адрес пак същите нули. Вече ми писна и пуснах един питонски скрипт изхода да изреже излишното. Някой да има повече опит и да има идеи. Моите се изчерпаха. Почвам да си мисля че output converter-a който ползва Atmel Studio прави идиотията но не ми е ясно как да изясня случая.
|
Вто Дек 25, 2018 1:08 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Област с 0x00 в края на генерирания от GCC bin
Пробва ли така? Друг вариант е да направиш отделен регион за CRC-то:
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Вто Дек 25, 2018 10:31 pm |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: Област с 0x00 в края на генерирания от GCC bin
Може би не съм обяснил правилно, с CRC то и без него все си имам такъв регион с нули. Просто като го включа за тест го слага на верния адрес и нулите си продължават. Това го писах само като някаква допълнителна зависимост която открих.
|
Сря Дек 26, 2018 9:29 am |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Област с 0x00 в края на генерирания от GCC bin
Да, на някои места ми се губеше нишката на обясненията. А .map файл имаш ли генериран? -T mapfile.map при извикването на линкера. В .map файла би трябвало да видиш какво мапва на тези адреси. Възможно е да имаш входна секция, която не е указано в линкер скрипта, къде в коя изходна секция да отиде.Вероятно имаш секция за която линкера предполага, че трябва да се инициализира и съответно заделя и в rom региона неявно секция с нули която се предполага при стартъп да бъде качена в ram.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Дек 26, 2018 9:46 am |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: Област с 0x00 в края на генерирания от GCC bin
Гледам ама нищо не е отбелязано след CRC32 то. Ето я тази част която гледам: Ако някъде другаде във файла може да е отбелязано, то не се сещам къде.
|
Сря Дек 26, 2018 12:25 pm |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: Област с 0x00 в края на генерирания от GCC bin
Всъщност имам версия която е с орязана функционалност. Тоест генерира по малко код. При нея генерирания бин е в размера на rom от линкерския скрипт. Но областта с нули е след генерирания код.
|
Сря Дек 26, 2018 12:34 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Област с 0x00 в края на генерирания от GCC bin
Имам смътен спомен че и аз съм срещал този проблем. Останало ми е в главата, че заклинанието (NOLOAD) го решаваше. Според мен съмнението, че някой Атмелски-Микрочипски output converter прави проблемите може да се провери като ръчно изгенерираш от .elf файла hex файл с objcopy(вероятно при теб е arm-none-eabi-objcopy). И най-вероятно при теб за генерирането на hex файла се ползва точно objcopy, а не някакъв convertor. Кои версии на gcc и ld се ползват?
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Дек 26, 2018 2:11 pm |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: Област с 0x00 в края на генерирания от GCC bin
Ебаси и лайняната работа. Точно това заклинание оправи работата. Но какъв му е зора? Нали това е секция в рама? Много благодаря за подсказките
|
Сря Дек 26, 2018 3:10 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Област с 0x00 в края на генерирания от GCC bin
Странното е че вероятно има неявно насочени/мапнати входни секции към .no_init В .map файла виждат ли се някакви секции в .no_init ? Вероятно там отиват неинициализирани променливи от къстъм входна секция. Т.е. неинициализирани, но не са насочени към .bss В този случай явно линкера решава да генерира същия по размер блок с 0x00, за да може стартъп кода да "зареди" тези нули и да инициализра с нули къстъм секцията в RAM-a. Потърси тези къстъм секции или из .map файла или като пуснеш търсене из всички .с сорс файлове на проекта за променливи сложени в къстъм секции. Търсиш __attribute__ и преглеждаш всички които имат следния вид: ((section(".име на къстъм секция"))) после в линкер скрипта насочваш тези секции към изходни секции и слагаш заклинанието (NOLOAD) на тези изходни секции. Поне да бъдат явно насочени/мапнати.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Дек 26, 2018 3:32 pm |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: Област с 0x00 в края на генерирания от GCC bin
Хм , нали идеята на no_init секцията е че тази област не се инициализира? Тази секция не е някаква моя секция а се ползва за променливите които са __no_init обявени.
|
Сря Дек 26, 2018 4:10 pm |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: Област с 0x00 в края на генерирания от GCC bin
Уф GCC то си е ебало майката. След поправката генерирания бин е неработоспособен. След още доста блъскане на главата използвах синтаксиса на .bss секцията и стана така Така си работи и не генерира излишни нули в края.
|
Сря Дек 26, 2018 6:37 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Област с 0x00 в края на генерирания от GCC bin
Да, това имах предвид. В началото имаше просто една празна изходна секция .no_init Връзката между входна и изходна не става по име. Така както си го направил сега, вътре в блока на изходната секция .no_init имаш мапнати от всички обекти, входните секции .no_init както и секциите чието име започва с този стринг т.е. .no_init.* Това че имената на входна и изходна секция са същите е съвпадение. За име на изходна секция би трябвало да можеш да сложиш каквото име си избереш. Обаче как и защо преди това е мапвал точно тези секции в точно тази изходна секция е неясно.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Дек 26, 2018 8:41 pm |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: Област с 0x00 в края на генерирания от GCC bin
Нямаше нищо в map файла свързано с no_init. Извратена работа. Поне някакво предупреждение да изгенерира. Изобщо колкото пъти съм стигал да правя нещо по линкерски конфигурационен файл на GCC все някакъв главобол е имало.
|
Сря Дек 26, 2018 9:45 pm |
|
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 10:31 pm Мнения: 9635
|
Re: Област с 0x00 в края на генерирания от GCC bin
e, то писането на линкер скриптове вече се доближава до стария стил на sendmail конфига... и (уж за твое добро) в съвременните среди, тя замества естествения интелект и ти го генерира скрипта всеки път. съответно съвсем вече нищо не знаеш какво и къде отива. ако компилираш чужд сорс, може да има някаква вероятност някоя дефиниция да му се вижда на gcc-то като константа, без да е инициализирана с по-сложните кортекси (м7, примерно) е по-комплицирано излюването на пиленцето - копирането на .data в паметта, евентуално функции от .text в TCM и подобни алабализми, ама за кортекс М0... балигу.
|
Чет Дек 27, 2018 9:29 am |
|
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 10:41 am Мнения: 1657
|
Re: Област с 0x00 в края на генерирания от GCC bin
А имаш ли тогава логично обяснение що го ползваш...?
|
Нед Дек 30, 2018 1:37 pm |
|
|