Thumb Assembler прерывание в пользовательском разделе SRAM
Я хотел бы иметь процедуру прерывания в SRAM на LPC1768. Я использую набор инструментов 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' являетсянечетным . Однако, когда я включу'.раздел.fastcode ' бит, то указатель на прерывание становится четным вместо нечетным.
Мой вопрос: Как я правильно делаю рутину прерывания можно распознать как функцию большого пальца ?
1 ответ:
Понял!
Вставка '.тип 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 были добавлены к .директива раздела, потому что в противном случае раздел иногда будет игнорироваться.