Переопределение обработчика прерываний CodeSourcery CS3
Я пытаюсь заменить некоторые обработчики прерываний CS3 своими. Ниже часть файла "ISR для stellaris_blizzard"
#if defined (L_stellaris_blizzard_isr_interrupt)
.globl __cs3_isr_interrupt
.type __cs3_isr_interrupt, %function
__cs3_isr_interrupt:
b .
.size __cs3_isr_interrupt, . - __cs3_isr_interrupt
.weak __cs3_isr_reserved_7
.globl __cs3_isr_reserved_7
.set __cs3_isr_reserved_7, __cs3_isr_interrupt
...
.weak __cs3_isr_GPIOM
.globl __cs3_isr_GPIOM
.set __cs3_isr_GPIOM, __cs3_isr_interrupt
...
#endif /* interrupt */
...
#if defined (L_stellaris_blizzard_isr_systick)
.globl __cs3_isr_systick
.type __cs3_isr_systick, %function
__cs3_isr_systick:
b .
.size __cs3_isr_systick, . - __cs3_isr_systick
#endif /* systick */
И мои обработчики
extern "C" void __cs3_isr_systick() { ... }
extern "C" void __cs3_isr_GPIOM() { ... }
SysTick прерывание работает хорошо. Но когда происходит прерывание GPIO на порту M, вызывается значение по умолчанию "__cs3_isr_interrupt". Как я могу заменить обработчик прерываний GPIO?
1 ответ
Похоже, __cs3_isr_GPIOM является слабым псевдонимом для __cs3_isr_interrupt. Если вы определили свою версию как неслабую, проблем не должно быть.
Вы должны проверить, что объектные файлы имеют правильные слабые / неслабые типы, которые вы ожидаете (используйте nm
).
Если это не решит проблему, у вас есть проблема с компоновщиком, и это сложнее понять. Это может быть проблема заказа или просто опечатка где-то.