Я играю с ARM, используя плату STM32F103C8T6 Blue Pill. Согласно его Руководство по программированию (раздел 2.3.4 Таблица векторов), всего должно быть 83 вектора исключений. набор. Однако это руководство заполняет только первые 6 и этот учебник первые 10. Любопытно, что я могу убедиться, что обе прошивки работают, как ожидалось, несмотря на отсутствие множества обработчиков исключений.
Чтобы уточнить, ниже я имею в виду именно ту часть, о которой я говорю (ссылка на исходный файл). Как видите, обработчик назначается только первым нескольким словам, а все последующее пространство используется для хранения раздела .text
.
.section .isr_vector
.align 2
.global _isr_vector
_isr_vector:
.long __StackTop /* we will need this later */
.long Reset_Handler
.long Default_Handler
.long Default_Handler
.long Default_Handler
.long Default_Handler
.long Default_Handler
.long 0
.long 0
.long 0
.long 0
.long Default_Handler
.long Default_Handler
.long 0
.long Default_Handler
.long Default_Handler
Это меня смущает: какое наименьшее количество обработчиков исключений мне нужно заполнить? В моем случае использования (который представляет собой не более чем игрушечный проект) исключений нет, поэтому могу ли я просто установить обработчик сброса?
В качестве бонуса в Руководстве по программированию указано, что «младший бит каждого вектора должен быть равен 1, что указывает на то, что обработчиком исключения является код Thumb». Однако приведенный выше код явно не соответствует этому соглашению, поэтому как он правильно вызывает обработчик сброса при загрузке?