Thumb Assembler在自定义SRAM部分中断

时间:2013-05-03 07:00:28

标签: gcc arm gas cortex-m3 lpc

我想在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'位时,指向中断的指针变为偶数而不是奇数

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

1 个答案:

答案 0 :(得分: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指令中,否则该部分有时会被忽略。