2010-01-12 10 views
1

J'ai un chargeur de démarrage simple, qui initialise et prépare la SDRAM. Ensuite, il charge une application à partir du Flash et la démarre à une certaine adresse dans la RAM. Une fois l'exécution de l'application terminée, le système redémarre. Il n'y a pas de pile système.C/Assembleur - Code retour dans un système d'exploitation mono-utilisateur mono-tâche sans pile

Maintenant, je voudrais que ce chargeur de démarrage récupère le contrôle après qu'une application a terminé son exécution. Le bootloader (appelons-le OS) doit également lire le code retour d'une application.

Comment une application peut-elle renvoyer une valeur au système d'exploitation appelant et comment le système d'exploitation appelant récupère-t-il le contrôle? Je suppose que cela peut être fait en utilisant des interruptions - OS a une fonction résidente spéciale jointe à une interruption et chaque application appelle cette interruption à la fin de sa propre exécution. Mais comment un code de retour peut-il être lu par OS s'il n'y a pas de pile système?

+1

Je ne suis pas sûr que ce soit une bonne solution, mais peut-être vous pouvez simplement enregistrer la valeur de retour à un emplacement de mémoire spécial utilisé uniquement dans ce but précis? Cela devrait fonctionner si votre système d'exploitation ne permet qu'une seule application en même temps. –

Répondre

4

Normalement vous laissez un code de retour dans un ou plusieurs registres, mais puisque vous avez le contrôle, vous pouvez le laisser où vous voulez! Lorsqu'une application est interrompue, la routine de gestion des interruptions doit sauvegarder l'état de l'application quelque part, ce qui signifie probablement la copie des registres fantômes vers un emplacement prédéfini dans la mémoire. Si une application abandonne le contrôle au système d'exploitation (via un appel logiciel interruption/système), vous devez définir votre propre convention d'appel pour laquelle les arguments registres sont placés, et le gestionnaire d'événements doit suivre cela avant de passer le contrôle retour à l'OS. Vous souhaiterez probablement faire en sorte que la convention d'appel corresponde le plus possible à celle de votre compilateur c, pour vous faciliter la tâche.

2

Une solution consiste pour le programme à écrire son code de sortie à un emplacement fixe et connu en mémoire - le "système d'exploitation" peut alors le lire.

+1

Merde, j'avais 27 secondes trop lent :( –

Questions connexes