Перейти к содержанию
    

Старт STM32

Подскажите, пожалуйста, где можно прочитать пошагово, и с комментариями про процесс загрузки до начала выполнения осн. функции, т.б. в обработчике Reset_Handler, особенно вот эта libc_init_array() функция.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это надо читать в описании библиотек, прилагаемых к используемому компилятору.

STM там, или EFM - разницы никакой.

 

Где почитать это про GCC - самому интересно, собирал информацию по кусочкам, помогает гугл и stackoverflow.

 

Можно задавать более конкретные вопросы, народ тут (или на соседнем подфоруме про opensource средства разработки) на них отвечает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в стартаповом ассемблерном файле у нас

  bl  SystemInit   
  bl __libc_init_array
  bl  main

Чему libc_init_array не нужен для сисинита, но нужен для мэйна?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ek74 давал же ссылку, где расписывается, как работают конструкторы для статических объектов.

И пока в SystemInit ничего подобного нет (а в примерах STM он написан на Си), всё работает.

 

И это правильный порядок - SystemInit выставляет корректную частоту ядра, включает внешнюю память (если есть), а только потом выполняются эти конструкторы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ek74 давал же ссылку, где расписывается, как работают конструкторы для статических объектов.

И пока в SystemInit ничего подобного нет (а в примерах STM он написан на Си), всё работает.

 

И это правильный порядок - SystemInit выставляет корректную частоту ядра, включает внешнюю память (если есть), а только потом выполняются эти конструкторы.

Чтобы вызывались конструкторы и деструкторы должны же быть указаны __attribute__((constructor)) __attribute__((destructor)) , я правильно понимаю? И, если мы эти аттрибуты не указываем, то и функция эта у нас ничего не делает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опять же, отошлю к гуглу.

Атрибут constructor сделан для того, чтобы функция (самая обычная, не член класса) "автоматически" вызывалась до старта main.

Для чего это может понадобится, я, честно говоря, не знаю.

 

Если нет статических с++ классов и нет этих странных функций, то __libc_init_array(), действительно, ничего не делает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ага.

#define __START _start
bl    __START

А где можно посмотреть реализацию этой функции?

Гугл мне не смог сказать, где это в GCC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#define __START _start
bl    __START

А где можно посмотреть реализацию этой функции?

 

Ну например тут: GNU Tools for ARM Embedded Processors. Качаешь исходники компилятора. В дереве исходников находишь такой файл \src\newlib\newlib\libc\sys\arm\crt0.S, который и содержит реализацию _start.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну например тут: GNU Tools for ARM Embedded Processors. Качаешь исходники компилятора. В дереве исходников находишь такой файл \src\newlib\newlib\libc\sys\arm\crt0.S, который и содержит реализацию _start.

 

Точно! Чего-то я протупил с сырцами. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

gcc-шный crt0.S как-то мало понятен, может кто его прокомментировать, или поделиться альтернативным вариантом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...