|
|
  |
Старт STM32, до main() |
|
|
|
May 5 2015, 08:25
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 17-06-14
Пользователь №: 81 969

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

Группа: Участник
Сообщений: 18
Регистрация: 17-06-14
Пользователь №: 81 969

|
в стартаповом ассемблерном файле у нас Код bl SystemInit bl __libc_init_array bl main Чему libc_init_array не нужен для сисинита, но нужен для мэйна?
|
|
|
|
|
May 6 2015, 05:53
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 17-06-14
Пользователь №: 81 969

|
Цитата(esaulenka @ May 6 2015, 08:23)  ek74 давал же ссылку, где расписывается, как работают конструкторы для статических объектов. И пока в SystemInit ничего подобного нет (а в примерах STM он написан на Си), всё работает.
И это правильный порядок - SystemInit выставляет корректную частоту ядра, включает внешнюю память (если есть), а только потом выполняются эти конструкторы. Чтобы вызывались конструкторы и деструкторы должны же быть указаны __attribute__((constructor)) __attribute__((destructor)) , я правильно понимаю? И, если мы эти аттрибуты не указываем, то и функция эта у нас ничего не делает?
|
|
|
|
|
May 6 2015, 07:13
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Опять же, отошлю к гуглу. Атрибут constructor сделан для того, чтобы функция (самая обычная, не член класса) "автоматически" вызывалась до старта main. Для чего это может понадобится, я, честно говоря, не знаю.
Если нет статических с++ классов и нет этих странных функций, то __libc_init_array(), действительно, ничего не делает.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
May 6 2015, 07:26
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 17-06-14
Пользователь №: 81 969

|
ага. Код #define __START _start bl __START А где можно посмотреть реализацию этой функции? Гугл мне не смог сказать, где это в GCC.
|
|
|
|
|
May 7 2015, 07:02
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 4-08-05
Из: г. Саратов
Пользователь №: 7 351

|
Цитата(Immortal_Buka @ May 6 2015, 10:26)  Код #define __START _start bl __START А где можно посмотреть реализацию этой функции? Ну например тут: GNU Tools for ARM Embedded Processors. Качаешь исходники компилятора. В дереве исходников находишь такой файл \src\newlib\newlib\libc\sys\arm\crt0.S, который и содержит реализацию _start.
|
|
|
|
|
May 7 2015, 10:03
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 17-06-14
Пользователь №: 81 969

|
Цитата(ek74 @ May 7 2015, 10:02)  Ну например тут: GNU Tools for ARM Embedded Processors. Качаешь исходники компилятора. В дереве исходников находишь такой файл \src\newlib\newlib\libc\sys\arm\crt0.S, который и содержит реализацию _start. Точно! Чего-то я протупил с сырцами. Спасибо!
|
|
|
|
|
Jun 10 2015, 12:36
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 17-06-14
Пользователь №: 81 969

|
gcc-шный crt0.S как-то мало понятен, может кто его прокомментировать, или поделиться альтернативным вариантом?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|