我想在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'位时,指向中断的指针变为偶数而不是奇数。
我的问题是:如何正确地将中断程序识别为拇指功能?
答案 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指令中,否则该部分有时会被忽略。