Как компилятор/ассемблер работает с загрузчиком?
Я понял, что на платах atmega загрузчик запрограммирован в чип.
Интересно, при компиляции скетча чем отличается компилятор/ассемблер от компиляции стандартной программы на Си для чипа без загрузчика?
Есть ли еще основной? Помещает ли компоновщик код запуска в другую область? Очевидно, что с загрузчиком вы больше не компилируете программу, которая размещает код по адресу сброса.
@FourierFlux, 👍2
Обсуждение1 ответ
Лучший ответ:
На Uno и подобных платах на базе AVR компилятор и ассемблер
не знает загрузчика. Скомпилированная программа начинается по адресу
нуль. Там у вас есть таблица векторов прерываний, начиная со сброса
вектор. Этот вектор является переходом к коду запуска среды выполнения C, который делает
некоторая низкоуровневая инициализация, затем вызывается main()
из ядра Arduino
библиотека, которая вызывает setup()
и loop()
из вашего скетча.
Загрузчик находится в конце прошивки. Чип AVR имеет несколько байтов энергонезависимой памяти конфигурации, называемой «предохранителями». Эти байты настроены производителем платы Arduino, чтобы посвятить последнюю 512 байт флэш-памяти в загрузчик, и чтобы начать выполнение код при запуске загрузчика при включении питания и при сбросе событий. Это тогда загрузчик обязан перейти к нулевому адресу, чтобы для запуска программы пользователя.
То есть я могу писать стандартные программы с помощью avr studio и ничего не менять и загружать их?, @FourierFlux
@FourierFlux: я никогда не использовал AVR Studio, но иногда пишу обычные программы AVR с помощью avr-libc, компилирую их с помощью avr-gcc и загружаю в Uno с помощью avrdude., @Edgar Bonet
Хорошо, но дело в том, что вы просто компилируете стандартную программу на C., @FourierFlux
предупреждение для будущих читателей. ответ на самом деле относится только к архитектуре AVR. он не распространяется на другие архитектуры, @Juraj
- Переход к загрузчику из кода приложения в atmega328p
- Запись загрузчика завершается словами "avrdude done. Thank you.". но загрузчик на самом деле не прошивался
- Разница в загрузчике между Atmel328p (сквозное отверстие) и Atmel328p au (smd)
- Проблема с чтением данных из ELM327
- avrdude ser_open() can't set com-state
- Не удается снова загрузиться после смены платы
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- как быстро loop() работает в Arduino
https://stackoverflow.com/questions/919781/how-can-i-get-an-assembly-language-listing-of-my-arduino-sketches-on-windows#930855, @jsotola