2012-03-27 2 views
0

J'ai une autre question concernant une instruction d'assemblage en ligne concernant un changement de contexte. Ce code peut fonctionner mais je ne suis pas sûr à 100% donc je soumets ce code aux avantages de stackoverflow ;-)Commutateur de contexte utilisant l'assemblage de bras en ligne

Je compile en utilisant gcc (aucune optimisation) pour un arm7TDMI. À un certain point, le code doit faire un changement de contexte.

/* Software Interrupt */ 
/* we must save lr in case it is called from SVC mode */ 
#define ngARMSwi(code) __asm__("SWI %0" : : "I"(code) : "lr") 
// Note : code = 0x23 

Quand je vérifie le code compilé, je reçois ce résultat:

svc 0x00000023 

La personne devant moi qui a codé ce écrit « nous devons sauver lr », mais dans le code compilé, je ne voir toutes les traces de l'être sauvé.

La raison pour laquelle je pense que le code pourrait se tromper est que l'exécution du programme pendant un certain temps avant d'entrer dans une exception de remise à zéro et un de la dernière chose que le code soit exécuté est un changement de contexte ...

Répondre

0

La déclaration __asm__ répertorie lr comme registre tabassé. Cela signifie que le compilateur va enregistrer le registre s'il a besoin de.

Comme vous ne voyez aucune sauvegarde, je pense que vous pouvez supposer que le compilateur n'utilisait pas ce registre (dans votre cas de test, au moins).

0

Je pense que l'instruction SWI doit être appelée en mode utilisateur. si c'est juste. Le mode de ARM est commuté en mode SVC après cette instruction. alors le noyau ARM fait l'opération de copie que le CPSR est copié dans SPSR_svc et LR est copié dans LR_svc. ceci devrait être utilisé pour sauvegarder le contexte du CPU en mode utilisateur pour revenir du mode svc. si votre gestionnaire d'exception svc utilise lr comme si vous appeliez une autre fonction, le registre lr devrait être préservé comme si vous utilisiez une pile entre les changements de mode. Je suppose que la personne avant vous a écrit comme ça pour parler de cette situation.

Questions connexes