2016-07-04 28 views
0

Ich schreibe ein kleines os für ARM Cortex-M4-Kern und habe einige Zweifel. Ich habe mich dazu entschieden, os-Funktionalitäten über Supervisor Call (SVC) zu platzieren, wo ich alle Kernel-Objekte und Kernel-Funktionen behalte und pflege.Arm cortex-m4 benutzerdefinierte os desgin

Aber ist das eine gute Idee, weil der gesamte Kernel-Code den Task-Stack des Benutzers ausführt und einnimmt?

Nur was mir in den Sinn kommt ist, dass durch Supervisor-Aufruf zum Kernel-Stack springen und Scheduler während der Ausführung von Kernel-Code sperren. Ist dieser Ansatz gut?

+1

Was ist das Problem, das Sie versuchen zu lösen? –

Antwort

1

Auf einem Cortex-M haben Sie einen Process Stack Pointer (PSP) und einen Main Stack Pointer (MSP). Interrupts verwenden den Hauptstapelzeiger und die Tasks sollten den Prozessstapelzeiger verwenden. Daher verwendet jede Kernel-Arbeit, die in der SVC ausgeführt wird, den MSP, so dass sie die Tasks-Stapel, die das PSP verwenden, nicht stören sollte. Wenn Sie Aufgaben wechseln, setzen Sie die PSP auf den neuen Stapel. Ich würde den Exception-Handling-Abschnitt des Cortex-M4 Generic User Guide lesen. Ich würde auch empfehlen, die endgültige Anleitung zum ARM Cortex M3/M4 zu bekommen und zu lesen, da dies einen guten Abschnitt auf RTOS's hat. Die Cortex's wurden mit RTOS entworfen und bieten viele nützliche Funktionen.

Hinweis: Wenn Sie dies nicht als Lernübung machen oder einfach nur Ihr eigenes Betriebssystem schreiben möchten, sollten Sie etwas wie FreeRTOS verwenden, das sehr gut getestet ist und alle Funktionen bietet, die Sie wahrscheinlich haben benutzen.

+0

Danke für die Antwort, ich habe die Stapelung missverstanden, wenn eine Ausnahme auftritt. Ich lese diesen Teil noch einmal und jetzt ist alles klar. Wenn eine Ausnahmebedingung auftritt, befindet sich die Stapelung auf dem laufenden Stapel, aber die Ausnahmebehandlung erfolgt im MSP-Stapel. Übrigens, das ist nur für Lernzwecke ... :) – user2782192

+0

Ja, es braucht ein bisschen Verständnis. Die Dokumentation könnte besser sein. Ich würde immer noch empfehlen, einen Blick auf FreeRTOS zu werfen, es hat viele portable Layer für Cortex, die eine ausgezeichnete Möglichkeit sind, Dinge zu lernen. –