1

我正在尝试用我的替换一些 CS3 中断处理程序。在“Stellaris_blizzard 的 ISR”文件部分下方

#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 中断运行良好。但是当端口 M 发生 GPIO 中断时,默认调用“__cs3_isr_interrupt”。如何替换 GPIO 中断处理程序?

4

1 回答 1

0

看起来 __cs3_isr_GPIOM 是 __cs3_isr_interrupt 的弱别名。如果您已将自己的版本定义为非弱版本,则应该没有问题。

您应该检查目标文件是否具有您期望的正确的弱/非弱类型(使用nm)。

如果这不能解决它,那么你就有一个链接器问题,而且这些问题更难弄清楚。这可能是订购问题,或者只是某个地方的错字。

于 2012-04-18T20:46:12.423 回答