assembly CodeSourcery CS3中断处理程序覆盖

2ekbmq32  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(89)

我正在尝试用我的中断处理程序替换一些CS3中断处理程序。在“ISR for 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中断工作正常。但是,当在端口M上发生GPIO中断时,默认调用“__cs3_isr_interrupt”。我怎样才能更换GPIO中断处理程序?

j8ag8udp

j8ag8udp1#

看起来__cs3_isr_GPIOM是__cs3_isr_interrupt的弱别名。如果你已经把自己的版本定义为非弱版本,应该没有问题。
您应该检查对象文件是否具有您所期望的正确的弱/非弱类型(使用nm)。
如果这不能解决问题,那么你就有了一个链接器问题,而这些问题更难解决。这可能是一个排序问题,或者只是某个地方的错字。

相关问题