1

一部の CS3 割り込みハンドラを私のものに置き換えようとしています。"ISRs 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 割り込みハンドラを置き換えるにはどうすればよいですか?

4

1 に答える 1

0

__cs3_isr_GPIOM は __cs3_isr_interrupt の弱いエイリアスのようです。独自のバージョンを非脆弱として定義している場合、問題はないはずです。

オブジェクト ファイルが期待どおりの正しい弱い/非弱いタイプであることを確認する必要があります ( を使用nm)。

それでも解決しない場合は、リンカーに問題があり、それらを把握するのは困難です。順序の問題か、どこかのタイプミスである可能性があります。

于 2012-04-18T20:46:12.423 に答える