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 ...