another_one 0 January 18 Posted January 18 (edited) · Report post Здравствуйте! Подскажите пожалуйста какие области, из ниже перечисленных,нужно инициализировать: - stack; - bss; - sbss; - какая либо другая секция еще(может быть data)? Cпасибо! Edited January 19 by haker_fox Похоже, что тема не имеет прямого отношения к микроконтроллерам. Перенёс пока в средства разработки. Quote Share this post Link to post Share on other sites More sharing options...
Immortal_Buka 0 January 18 Posted January 18 (edited) · Report post в зависимости от требований. Обычно надо занулить bss/sbss. Если data жила в ROM, то её скопировать. stack - если используется проверка от переполнения стэка. Также могут быть какие угодно ещё секции и в какой угодно памяти, надо смотреть скрипт линкера (на пример, код, исполняемый из ОЗУ) Edited January 18 by Immortal_Buka Quote Share this post Link to post Share on other sites More sharing options...
jcxz 33 January 18 Posted January 18 · Report post 4 часа назад, another_one сказал: Подскажите пожалуйста какие области, из ниже перечисленных,нужно инициализировать: Инициализировать кому? Про какой язык/компилятор речь? Попробуйте задать вопрос вменяемо. Если речь про си/си++-компиляторы, то они все сами генерят startup-код, инициализирующий как надо стандартные секции. И никаких дополнительных телодвижений от программиста не требуют. Кроме особых случаев. Quote Share this post Link to post Share on other sites More sharing options...
x893 3 January 18 Posted January 18 · Report post 32 minutes ago, jcxz said: Если речь про си/си++-компиляторы, то они все сами генерят startup-код, инициализирующий как надо стандартные секции. И никаких дополнительных телодвижений от программиста не требуют. Кроме особых случаев. Не совсем корректно, но не суть важно. Можно посмотреть исходный код инициализации или отладчиком. Quote Share this post Link to post Share on other sites More sharing options...
another_one 0 January 19 Posted January 19 (edited) · Report post У меня bare metal mips-mti-elf и мне нужно все самому - линкерскрипт и стартап делать для моего мипса без флеш. Я в принципе все сделал и оно как-то работало, но потом проблема с исходниками и я подзабыл как инициализировал секции, сейчас что-то пошло не так с адресацией и ухожу в рефил. Edited January 20 by haker_fox Правила 2.1.в. Quote Share this post Link to post Share on other sites More sharing options...
another_one 0 January 19 Posted January 19 · Report post И еще вопрос, - нужно ли указывать адрес Frame pointer? Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 15 January 20 Posted January 20 · Report post 16 hours ago, another_one said: линкерскрипт и стартап делать для моего мипса без флеш Скрипт линкера и я сам создаю для ARM. И startup-код тоже пишу сам. Но под ним я подразумеваю файл, где находятся вектора прерываний, инициализация стека и переход на функцию __iar_program_start() (компилятор IAR), которая сама инициализирует все глобальные переменные, вызывает конструкторы классов и т.п., а после вызывает функцию main(). Другими словами "bare metal" вовсе не подразумевает всю инициализацию вручную. Компилятор и сам это всё может сделать. Но с Вашим инструментарием я не знаком, может быть у него какие-то особенности. И уже как модератор: на форуме принято соблюдение норм и правил русского языка (п. 2.1.в). Я Ваши сообщения немного поправил, но смысла в них больше сильно не стало. Постарайтесь в следующий раз вопрос задавать более полно, не стесняясь использовать знаки препинания, не пропускать слова и т.п., что облегчит нам понимание Вашей проблемы. Quote Share this post Link to post Share on other sites More sharing options...
another_one 0 January 20 Posted January 20 · Report post а в какой последовательности должны идти секции в памяти? Например, у меня все в ОЗУ и структура следующая(относительно начала СОЗУ): 1) text_ini 2) text_main 3) text_vectors 4) data 5) sdata 6) edata 7) fbss 8 ) sbss 9) heap 10) stack И сейчас что-то пошло не так как я понимаю инициализировать нужно только bss и можно еще stack Quote Share this post Link to post Share on other sites More sharing options...
dimka76 12 January 20 Posted January 20 · Report post On 1/20/2023 at 2:55 PM, another_one said: а в какой последовательности должны идти секции в памяти? Попробуйте в IDE от микрочипа создать проект с ядром как у вас. Он вам и стартап и скрипт линкера сгенерирует. Там и посмотрите. У вас какое ядро ? On 1/20/2023 at 2:55 PM, another_one said: как я понимаю инициализировать нужно только bss и можно еще stack Стэк инициализировать обязательно, т.е. указатель стека. А как у вас программа в ОЗУ попадает ? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 33 January 20 Posted January 20 · Report post 5 часов назад, another_one сказал: а в какой последовательности должны идти секции в памяти? Это определяет программист. Как ему требуется. Определяет в скрипте компоновщика. 5 часов назад, another_one сказал: Например, у меня все в ОЗУ и структура следующая(относительно начала СОЗУ): Тут никто вам не ответит - что означают все эти "fbss", "sbss", "edata" и пр. в неизвестном здесь никому компиляторе/компоновщике. Телепатов, способных угадать ваш компилятор и какие именно данные он кладёт в эти секции, тут тоже нет. Также нет телепатов, которые могут угадать структуру вашей системы: есть там флешь или нет? откуда грузится прошивка (в ОЗУ при старте с какого-то источника; или сразу находится во флешь)? и т.п. Можно заглянуть в .map-файл и по нему определить - какие именно данные в какую секцию кладёт компоновщик: куда константные данные и код; куда - инициализированные (нулями или произвольными данными) и неинициализированные переменные. И таким образом определить куда компоновать эти секции - во флешь или в ОЗУ. Возможно многие из этих секций у вас вообще не используются и не нужны. Опять же это определяется по .map-файлу. Quote Share this post Link to post Share on other sites More sharing options...
dimka76 12 January 20 Posted January 20 · Report post On 1/20/2023 at 8:45 PM, jcxz said: в неизвестном здесь никому компиляторе/компоновщике. Он же написал, что GCC Quote Share this post Link to post Share on other sites More sharing options...
jcxz 33 January 20 Posted January 20 · Report post 1 час назад, dimka76 сказал: Он же написал, что GCC Где??? Вам в личку написал? Quote Share this post Link to post Share on other sites More sharing options...
dimka76 12 January 20 Posted January 20 · Report post On 1/20/2023 at 10:23 PM, jcxz said: Где??? Вам в личку написал? On 1/19/2023 at 11:36 AM, another_one said: mips-mti-elf Quote Share this post Link to post Share on other sites More sharing options...
jcxz 33 January 20 Posted January 20 · Report post А как из этого следует GCC? А если всё-же GCC, то почему не в соответствующей ветке форума? Quote Share this post Link to post Share on other sites More sharing options...
dimka76 12 January 20 Posted January 20 · Report post On 1/20/2023 at 10:44 PM, jcxz said: А как из этого следует GCC? Другого с таким началом нет. Я не знаю. Я сам как-то микрочиповским MIPSом побаловался. Чуть-чуть. Но все через микрочипоскую IDE. И да, у них в IDE компилятор GCC On 1/20/2023 at 10:44 PM, jcxz said: А если всё-же GCC, то почему не в соответствующей ветке форума? А почему не в MIPS ? Это не ко мне вопрос, а к ТС. Quote Share this post Link to post Share on other sites More sharing options...