Je souhaite avoir une routine d'interruption dans SRAM sur un LPC1768. J'utilise une chaîne d'outils GCC similaire à Yagarto. Actuellement je peux faire ce qui suit de C:Interruption de l'assembleur de pouce dans la section SRAM personnalisée
NVIC_SetVector(TIMER0_IRQn, interruptTest);
... Puis dans mon dossier de montage:
.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
Maintenant, cela fonctionne très bien, le pointeur sur la fonction « interruptTest » est bizarre . Toutefois, lorsque j'active le bit '.section .fastcode', le pointeur sur l'interruption devient même au lieu de impair.
Ma question est: Comment faire pour que la routine d'interruption soit reconnue comme une fonction du pouce?
Ajouter '.thumb' quelque part? '.section .fastcode' est une section de l'éditeur de liens. Je vois que c'est du code avec différents LMA/VMA de certains googling; mais je ne suis pas sûr que vous vous référez à la même chose. Avez-vous plus d'informations sur '.fastcode'? Est-ce comme [cette question] (http://stackoverflow.com/questions/13831462/understanding-the-location-counter-of-gnu-linker-scripts)? –
J'ai déjà essayé d'ajouter '.thumb' juste au-dessus de '.thumb_func', mais cela n'a fait aucune différence, donc je l'ai omis pour éviter toute confusion. La section .text fonctionne toujours, sans rien modifier d'autre. Le linker-script que j'ai utilisé est ici: [link] (http://openlcb.sourceforge.net/trunk/scratchpads/dgoodman/OpenLCB_Template/makesection/LPC17xx.ld) –
Note: J'ai dû corriger le lien - script, de sorte que la section BSS ne remplace pas les sections .fastcode et .data. J'ai envoyé des rapports de bug à l'auteur à ce sujet. –