2

LPC1768 の SRAM に割り込みルーチンが必要です。Yagarto に似た GCC ツールチェーンを使用しています。現在、Cから次のことができます:

NVIC_SetVector(TIMER0_IRQn, interruptTest);

...それから私のアセンブリファイルで:

    .text
/* .section    .fastcode */
    .global     interruptTest
    .func       interruptTest
    .thumb_func
interruptTest:
    ldr         r0,=(LPC_TIM0 + IR)    /* point to Timer 0's Interrupt Register */
    mov         r1,#(1 << 0)           /* Interrupt Pending bit for MR0 int */
    str         r1,[r0]                /* Clear it */

    bx          lr

    .size       interruptTest, . - interruptTest
    .endfunc

これで問題なく動作します。「interruptTest」関数へのポインタは奇数です。ただし、「.section .fastcode」ビットを有効にすると、割り込みへのポインターが奇数ではなく偶数になります。

私の質問は、割り込みルーチンを親指関数として正しく認識させるにはどうすればよいですか?

4

1 に答える 1

3

とった!

「.type interruptTest、%function」を挿入すると機能します。

したがって、最終的なソースは次のようになります。

    .section    .fastcode,"ax",%progbits
    .global     interruptTest
    .func       interruptTest
    .type       interruptTest,%function
    .thumb_func
interruptTest:
    ldr         r0,=(LPC_TIM0 + IR)    /* point to Timer 0's Interrupt Register */
    mov         r1,#(1 << 0)           /* Interrupt Pending bit for MR0 int */
    str         r1,[r0]                /* Clear it */

    bx          lr

    .size       interruptTest, . - interruptTest
    .endfunc

重要: "ax",%progbits が .section ディレクティブに追加されました。そうしないと、セクションが無視されることがあるためです。

于 2013-05-04T04:05:28.913 に答える