Векторная таблица 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) и удалите его из своего проекта.

Другие вопросы по тегам