J'utilise IAR Embedded Workbench pour ARM 6.50.4 Sécurité fonctionnelle version 6.50 et je n'arrive pas à faire fonctionner une instruction en ligne. Pour l'arrière-plan: J'essaie d'implémenter un commutateur de contexte sur un ARM7TDMI en utilisant l'interruption PIT. Lorsque vous enregistrez le contexte actuel, je dois obtenir l'adresse de la pile de la fonction interrompue, ce qui est enregistré dans une variable globale C, qui est déclaré dans le même fichier c:Assemblage en ligne IAR utilisant la variable C globale
unsigned int* ptTask_CurrentTask;
__irq void SysIrqHandler(void)
{
// ... saving registers
__asm volatile("LDR R0, %0\n\t" ::"r"(ptTask_CurrentTask) );
//... save the new top of stack
//select new task and restore associated registers
}
D'après ce que je pouvais rassembler à partir de EWARM_DevelopmentGuide.ENU.pdf, l'instruction ci-dessus doit utiliser la syntaxe correcte. J'ai aussi essayé différentes manières de former l'instruction mais tout ce que j'ai obtenu est:
Error[og006]: Syntax error in inline assembly: "Error[401]: Operand syntax error"
. Maintenant, lorsque j'exporte la routine complète d'assemblage de sauvegarde de contexte dans un fichier .s séparé et appelle la fonction de c, l'instruction suivante fonctionne très bien. Depuis les instructions d'assemblage sur leur propre travail, il doit y avoir un problème avec la façon dont je fais l'instruction d'assemblage en ligne, mais je ne peux pas voir ce qui ne va pas.
Juste une supposition: avez-vous essayé '=% 0' au lieu de'% 0'? – TonyK