Векторная таблица LibOpenCM3 полностью блокирует обработчик
Ответ на этот вопрос здесь
Таблица прерываний Libopencm3 на STM32F4
хорошо объясняет весь механизм, но я получаю целую векторную таблицу, заполненную обработчиками блокировки.
Я знаю это, потому что я вижу это в отладчике (кроме всего, что не работает): скриншот разборки, показывающий векторную таблицу.
Как будто компоновщик просто игнорирует мои хорошо определенные функции обработчика прерываний, например:
void sys_tick_handler(void)
{
...
}
void tim1_up_isr(void)
{
...
}
Я использую EmBitz IDE и следую этому уроку здесь, чтобы заставить libopencm3 работать (и он работает, за исключением этой проблемы).
Я проверил имена функций n-fold и попробовал несколько онлайн-примеров, в том числе из проекта libopencm3-examples.
Все компилируется без сбоев и загружается в целевую плату (STM32F103C8) и работает нормально - за исключением того, что никакие ISR не вызываются (я получаю прерывание (я), но они застревают в блокирующих обработчиках).
У кого-нибудь есть идея, почему это происходит?
1 ответ
Это похоже на связывание со стандартной векторной таблицей (из SPL или HAL ST).
Чтобы проверить это, попробуйте переименовать ваш sys_tick_handler()
в SysTick_Handler()
а также tim1_up_isr()
в TIM1_UP_IRQHandler()
,
Если это работает, найдите файл с этим SysTick_Handler
а также TIM1_UP_IRQHandler
(Думаю, что будет startup*.s
) и удалите его из своего проекта.