gcc Thumb Assembler自定义SRAM部分中断

7gcisfzg  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(72)

我想在LPC1768的SRAM中有一个中断例程。我使用的GCC工具链类似于Yagarto。目前我可以从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'函数的指针是odd。但是,当我启用'.section .fastcode'位时,指向中断的指针变成了even,而不是odd
我的问题是:如何正确地使中断例程被识别为thumb函数?

f8rj6qna

f8rj6qna1#

我知道了!
插入'.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

字符串

重要提示:.section指令中添加了“ax”,%progbits,因为否则该部分有时会被忽略。

相关问题