Jump to content
    

инициализация в crt

Здравствуйте!

Подскажите пожалуйста какие области, из ниже перечисленных,нужно инициализировать:

- stack;

- bss;

- sbss;

- какая либо другая секция еще(может быть data)?

 

Cпасибо!

Edited by haker_fox
Похоже, что тема не имеет прямого отношения к микроконтроллерам. Перенёс пока в средства разработки.

Share this post


Link to post
Share on other sites

в зависимости от требований.

Обычно надо занулить bss/sbss.

Если data жила в ROM, то её скопировать.

stack - если используется проверка от переполнения стэка.

Также могут быть какие угодно ещё секции и в какой угодно памяти, надо смотреть скрипт линкера (на пример, код, исполняемый из ОЗУ)

Edited by Immortal_Buka

Share this post


Link to post
Share on other sites

4 часа назад, another_one сказал:

Подскажите пожалуйста какие области, из ниже перечисленных,нужно инициализировать:

Инициализировать кому? Про какой язык/компилятор речь? Попробуйте задать вопрос вменяемо.

Если речь про си/си++-компиляторы, то они все сами генерят startup-код, инициализирующий как надо стандартные секции. И никаких дополнительных телодвижений от программиста не требуют. Кроме особых случаев.

Share this post


Link to post
Share on other sites

32 minutes ago, jcxz said:

Если речь про си/си++-компиляторы, то они все сами генерят startup-код, инициализирующий как надо стандартные секции. И никаких дополнительных телодвижений от программиста не требуют. Кроме особых случаев.

Не совсем корректно, но не суть важно.

Можно посмотреть исходный код инициализации или отладчиком.

Share this post


Link to post
Share on other sites

У меня bare metal mips-mti-elf и мне нужно все самому - линкерскрипт и стартап делать для моего мипса без флеш.

 

Я в принципе все сделал и оно как-то работало, но потом проблема с исходниками и я подзабыл как инициализировал секции, сейчас что-то пошло не так с адресацией и ухожу в рефил.

 

Edited by haker_fox
Правила 2.1.в.

Share this post


Link to post
Share on other sites

16 hours ago, another_one said:

линкерскрипт и стартап делать для моего мипса без флеш

Скрипт линкера и я сам создаю для ARM.

И startup-код тоже пишу сам. Но под ним я подразумеваю файл, где находятся вектора прерываний, инициализация стека и переход на функцию __iar_program_start() (компилятор IAR), которая сама инициализирует все глобальные переменные, вызывает конструкторы классов и т.п., а после вызывает функцию main(). Другими словами "bare metal" вовсе не подразумевает всю инициализацию вручную. Компилятор и сам это всё может сделать.

Но с Вашим инструментарием я не знаком, может быть у него какие-то особенности.

 

И уже как модератор: на форуме принято соблюдение норм и правил русского языка (п. 2.1.в). Я Ваши сообщения немного поправил, но смысла в них больше сильно не стало. Постарайтесь в следующий раз вопрос задавать более полно, не стесняясь использовать знаки препинания, не пропускать слова и т.п., что облегчит нам понимание Вашей проблемы.

Share this post


Link to post
Share on other sites

а в какой последовательности должны идти секции в памяти?

Например, у меня все в  ОЗУ и структура следующая(относительно начала СОЗУ):

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

Share this post


Link to post
Share on other sites

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

Стэк инициализировать обязательно, т.е. указатель стека.

А как у вас программа в ОЗУ попадает ?

Share this post


Link to post
Share on other sites

5 часов назад, another_one сказал:

а в какой последовательности должны идти секции в памяти?

Это определяет программист. Как ему требуется. Определяет в скрипте компоновщика.

5 часов назад, another_one сказал:

Например, у меня все в  ОЗУ и структура следующая(относительно начала СОЗУ):

Тут никто вам не ответит - что означают все эти "fbss", "sbss", "edata" и пр. в неизвестном здесь никому компиляторе/компоновщике. Телепатов, способных угадать ваш компилятор и какие именно данные он кладёт в эти секции, тут тоже нет.

Также нет телепатов, которые могут угадать структуру вашей системы: есть там флешь или нет? откуда грузится прошивка (в ОЗУ при старте с какого-то источника; или сразу находится во флешь)? и т.п.

Можно заглянуть в .map-файл и по нему определить - какие именно данные в какую секцию кладёт компоновщик: куда константные данные и код; куда - инициализированные (нулями или произвольными данными) и неинициализированные переменные. И таким образом определить куда компоновать эти секции - во флешь или в ОЗУ. Возможно многие из этих секций у вас вообще не используются и не нужны. Опять же это определяется по .map-файлу.

Share this post


Link to post
Share on other sites

On 1/20/2023 at 8:45 PM, jcxz said:

в неизвестном здесь никому компиляторе/компоновщике.

Он же написал, что GCC

Share this post


Link to post
Share on other sites

1 час назад, dimka76 сказал:

Он же написал, что GCC

Где??? Вам в личку написал?

Share this post


Link to post
Share on other sites

 

On 1/20/2023 at 10:23 PM, jcxz said:

Где??? Вам в личку написал?

 

On 1/19/2023 at 11:36 AM, another_one said:

 mips-mti-elf

 

 

Share this post


Link to post
Share on other sites

А как из этого следует GCC? А если всё-же GCC, то почему не в соответствующей ветке форума?

Share this post


Link to post
Share on other sites

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 ?

Это не ко мне вопрос, а к ТС.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...