Я хотел бы иметь процедуру прерывания в SRAM на LPC1768. Я использую связку GCC, подобную Yagarto. В настоящее время я могу сделать следующее из C:Прерывание ассемблера Thumb в пользовательской секции SRAM
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», указатель на прерывание становится даже вместо нечетным.
Мой вопрос: Как правильно заставить процедуру прерывания распознаваться как функция большого пальца?
Добавить '.thumb' где-нибудь? '.section .fastcode' - это некоторый раздел компоновщика. Я вижу, что это код с разными LMA/VMA от некоторого googling; но я не уверен, что вы говорите об этом. У вас есть дополнительная информация о '.fastcode'? Это как [этот вопрос] (http://stackoverflow.com/questions/13831462/understanding-the-location-counter-of-gnu-linker-scripts)? –
Я уже пытался добавить «.thumb» прямо над «.thumb_func», но это не имело значения, поэтому я оставил его, чтобы избежать путаницы. Раздел .text все еще работает, не изменяя ничего другого. Сценарий компоновщика, который я использовал, приведен здесь: [link] (http://openlcb.sourceforge.net/trunk/scratchpads/dgoodman/OpenLCB_Template/makesection/LPC17xx.ld) – 2013-05-03 23:25:34
Примечание: мне пришлось исправить компоновщик- сценарий, поэтому раздел BSS не перезаписывает разделы .fastcode и .data. Об этом я отправил автору сообщения об ошибках. – 2013-05-04 00:21:31