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' 位时,指向中断的指针变为even而不是odd

我的问题是:如何正确地将中断例程识别为拇指功能?

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 回答