В чем разница между кодом запуска и обработчиком сброса

#assembly #arm #microcontroller

Вопрос:

Привет сообществу stackoverflow,

Может кто-нибудь, пожалуйста, помочь мне понять разницу между кодом запуска и обработчиком сброса? Когда запускается наш микроконтроллер, какой из них называется? И когда мы сбрасываем наш микроконтроллер, какой из них называется?

Я знаю, что код запуска можно найти в файле startup.s. Где мы можем найти обработчик сброса?

Спасибо!

Комментарии:

1. Для голой металлической системы, startup_code == reset_code . Он также называется «загрузочным кодом» и часто использует загрузчик для более сложных систем. Однако код запуска-это термин для всех систем, включая системы, размещенные на ОС, такие как VxWorks, Linux и т. Д. Задача кода запуска состоит в том, чтобы очистить bss, настроить стек и вызвать статические конструкторы и деструкторы для C (до запуска приложения). Те же задачи должны выполняться для «кода сброса», но это сложнее и зависит от используемого оборудования. Даже в операционной системе существует код, который запускается раньше main() , и это также называется кодом запуска.

Ответ №1:

Код запуска и обработчик сброса — это всего лишь два названия одного и того же.

Функция сброса похожа на прерывание, она вызывается mcu при загрузке. MCU загружает адрес обработчика сброса из таблицы векторов прерываний. Обработчик сброса обычно просто вызывает запуск или состоит из него.

Запуск обычно пишется в assember, но иногда в C. Чтобы найти обработчик сброса — посмотрите на таблицу векторов прерываний, для ядра Cortex-M это второй элемент, первое-начальное значение в верхней части стека.

Комментарии:

1. Таким образом, обработчик сброса вызовет основную функцию? Что такое таблица векторов прерываний?

2. Обработчик сброса выполнит все, что в нем написано. Как правило, да, в конце концов он вызовет основную функцию. Но вы можете написать обработчик сброса, который ничего не вызывает. Таблица векторов прерываний-это таблица с адресами обработчиков прерываний, Погуглите ее, если вам нужны подробности.

Ответ №2:

Некоторые микроконтроллеры позволяют различать различные виды сброса (например, сброс питания, сброс программного обеспечения, сброс отключения и, возможно, другие). В такой ситуации ваш обработчик сброса может проверить причину сброса и выполнить код запуска только для инициализации оборудования и запуска основной задачи, когда это действительно необходимо.