Immortal_Buka 0 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Подскажите, пожалуйста, где можно прочитать пошагово, и с комментариями про процесс загрузки до начала выполнения осн. функции, т.б. в обработчике Reset_Handler, особенно вот эта libc_init_array() функция. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ek74 0 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Из вполне доступного, можно это почитать: GCC: статические конструкторы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Это надо читать в описании библиотек, прилагаемых к используемому компилятору. STM там, или EFM - разницы никакой. Где почитать это про GCC - самому интересно, собирал информацию по кусочкам, помогает гугл и stackoverflow. Можно задавать более конкретные вопросы, народ тут (или на соседнем подфоруме про opensource средства разработки) на них отвечает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Immortal_Buka 0 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба в стартаповом ассемблерном файле у нас bl SystemInit bl __libc_init_array bl main Чему libc_init_array не нужен для сисинита, но нужен для мэйна? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба ek74 давал же ссылку, где расписывается, как работают конструкторы для статических объектов. И пока в SystemInit ничего подобного нет (а в примерах STM он написан на Си), всё работает. И это правильный порядок - SystemInit выставляет корректную частоту ядра, включает внешнюю память (если есть), а только потом выполняются эти конструкторы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Immortal_Buka 0 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба ek74 давал же ссылку, где расписывается, как работают конструкторы для статических объектов. И пока в SystemInit ничего подобного нет (а в примерах STM он написан на Си), всё работает. И это правильный порядок - SystemInit выставляет корректную частоту ядра, включает внешнюю память (если есть), а только потом выполняются эти конструкторы. Чтобы вызывались конструкторы и деструкторы должны же быть указаны __attribute__((constructor)) __attribute__((destructor)) , я правильно понимаю? И, если мы эти аттрибуты не указываем, то и функция эта у нас ничего не делает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба Опять же, отошлю к гуглу. Атрибут constructor сделан для того, чтобы функция (самая обычная, не член класса) "автоматически" вызывалась до старта main. Для чего это может понадобится, я, честно говоря, не знаю. Если нет статических с++ классов и нет этих странных функций, то __libc_init_array(), действительно, ничего не делает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Immortal_Buka 0 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба ага. #define __START _start bl __START А где можно посмотреть реализацию этой функции? Гугл мне не смог сказать, где это в GCC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ek74 0 7 мая, 2015 Опубликовано 7 мая, 2015 · Жалоба #define __START _start bl __START А где можно посмотреть реализацию этой функции? Ну например тут: GNU Tools for ARM Embedded Processors. Качаешь исходники компилятора. В дереве исходников находишь такой файл \src\newlib\newlib\libc\sys\arm\crt0.S, который и содержит реализацию _start. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Immortal_Buka 0 7 мая, 2015 Опубликовано 7 мая, 2015 · Жалоба Ну например тут: GNU Tools for ARM Embedded Processors. Качаешь исходники компилятора. В дереве исходников находишь такой файл \src\newlib\newlib\libc\sys\arm\crt0.S, который и содержит реализацию _start. Точно! Чего-то я протупил с сырцами. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Immortal_Buka 0 10 июня, 2015 Опубликовано 10 июня, 2015 · Жалоба gcc-шный crt0.S как-то мало понятен, может кто его прокомментировать, или поделиться альтернативным вариантом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться