-2

Lorsque CPU reçoit exception, pré-traitement par le matériel Sauvegarde les valeurs PC et PSW courant dans la mémoire vive (ou dans le contrôle registres dans le cas de l'interruption rapide) et Lecture du vecteur Le branchement au début de la routine de gestion des exceptions est effectué. Toutefois, les registres généraux et les registres de contrôle autres que le PC et le PSW devant être utilisés dans la routine de traitement des exceptions doivent être conservés sur la pile par le code du programme utilisateur au début de la routine de gestion des exceptions. L'inversion est répétée par le code utilisateur et le matériel au retour d'une exception. (Référence: Renesas RX62N manuel du matériel, page 297, Chapitre: Exceptions)sur métal nu, non-OS, comment le changement de contexte se produit lors des exceptions/interruptions

Ma question est où est le code d'utilisateur pour le changement de contexte et comment il se fait appelé?

+0

Le runtime devrait être, ou votre propre code libre –

+0

si c'est du métal nu alors c'est tout votre code, vous l'avez écrit, vous savez où est ce code qui fait tout cela. Cela n'a vraiment rien à voir avec le métal nu, ni avec ce fournisseur de puces spécifique ni avec l'architecture. C'est ainsi que fonctionne la gestion des exceptions. Vous devez conserver l'état afin de pouvoir revenir au code interrompu comme si rien ne s'était passé mais le temps qui passait. –

+0

S'il ne s'agit pas d'un système d'exploitation, pourquoi changez-vous de contexte? –

Répondre

0

Selon le document du compilateur Renesas CC-RX, déclare toute fonction globale en tant que ISR, nous devons préciser que

#pragma interrupt func
void func (void) { ... }

et compilateur générer du code pour comme:
func:
PUSHM R1-R3; Saves the registers used in the function.
....
(R1, R2, and R3 are used in the function)
....
POPM R1-R3; Restores the registers saved at the entry.
RTE

En outre, nous pouvons également spécifier d'autres paramètres tels que:
interruption rapide (dans ce cas PC et PSW seront sauvegardés dans Backup BPC et BPSW par matériel, sinon sur pile)



Utilisez les registres limités dans les fonctions d'interruption et ne générez pas d'instructions pour sauvegarder/restaurer les registres R6-R13.

Cela résout mon doute.