Вопрос

Недавно я пытался отладить работу по низкоуровневой работе, и я не смог найти crt0.S для компилятора (AVR-GCC.) но я нашел crt1.S (и то же самое с соответствующим .o файлы).

В чем разница между этими двумя файлами? Является crt1 что-то совершенно другое или что? Они оба, кажется, должны делать с чем-то для «загрузки» (настройка stack frame И такой), но почему различие?

Это было полезно?

Решение

Оба CRT0 / CRT1 делают то же самое, в основном делайте то, что нужно перед вызовом main () (например, инициализирующая стек, устанавливать IRQ и т. Д.). Вы должны связать с одним или другим, но не обоим. Они на самом деле не являются библиотеками, но на самом деле встроены код монтажа.

Насколько я понимаю, ЭЛТ поставляется в двух «ароматах»

  • CRT1. Используется на системах, которые поддерживают конструкторы и деструкторы (функции, называемые до и после основного и выхода). В этом случае главное обрабатывается как нормальный вызов функции.
  • CRT0 Используется на системах, которые не поддерживают конструкторы / деструкторы.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top