Переопределение обработчика прерываний 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).

Если это не решит проблему, у вас есть проблема с компоновщиком, и это сложнее понять. Это может быть проблема заказа или просто опечатка где-то.

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