Wie kommunizieren eine eingebettete Anwendung und RTOS miteinander?

Ich arbeite an einem Projekt, das einen ARM 7-Prozessor und ein Micrium - os II RTOS verwendet. Bitte helfen Sie mir dabei, die grundlegenden Fragen zu verstehen, die mir in Bezug auf dieses Projekt gestellt wurden.

Nachfolgend die Fragen:

  1. Wie interagiert die Anwendung mit dem RTOS?
  2. Wie interagiert wiederum das RTOS mit dem Controller? (wie Windows mit dem Intel-Prozessor interagiert?)
  3. Wir spezifizieren den Speicherort von RAM, ROM, Stack usw., aber wie werden die Ports über das C-Programm identifiziert, dh wir spezifizieren einen Hex-Wert in unserem Programm, aber wie werden diese mit dem Controller zurückverknüpft
  4. Woher weiß das RTOS, wo es mit der Ausführung des Programms beginnen soll?
  5. Sobald die Anwendung in das ROM geladen ist und das eingebettete Gerät eingeschaltet wird, woher weiß es, wo es mit der Ausführung der Anwendung beginnen soll?

Antworten (2)

Ich habe noch nie einen ARM7 verwendet, aber ich habe schon einmal µC/OS-II auf einem 8-Bit-Mikrocontroller verwendet. Ich bin kein Experte, werde aber versuchen, Ihre Fragen zu beantworten.

  1. Ein RTOS ermöglicht es Ihnen normalerweise, "Aufgaben" zu erstellen, die wie separate Ausführungsthreads sind. µC/OS-II kann kooperatives Multitasking verwenden, was bedeutet, dass es an Ihren Aufgaben liegt, die Kontrolle über den Prozessor an das Betriebssystem zurückzugeben. (Es unterstützt auch preemptives Multitasking.) Sie definieren auch Prioritätsstufen für jede Aufgabe.

  2. Über Aufgaben interagieren Sie mit dem Controller so, als würden Sie kein RTOS verwenden. Schreiben Sie Funktionen, die Dinge tun, und rufen Sie sie auf!

  3. Ich weiß nichts über ARM7, aber auf meinem Prozessor sind die E / A-Ports nur speicherzugeordnet, also ja, Sie setzen / lesen einfach den Wert an der Adresse, die dem interessierenden Port zugewiesen ist. Wahrscheinlich möchten Sie den Port so definieren volatile, dass der Compiler keine Dinge optimiert, die er nicht sollte.

4,5. das RTOS läuft einfach dort, wo jedes normale Programm laufen würde, also zeigt der Reset-Vektor auf seinen Ausführungsstart.

Wie interagiert die Anwendung mit dem RTOS?

Das RTOS hat eine API – eine Reihe von Funktionsaufrufen – die die Anwendung aufruft. Um beispielsweise eine RTOS-Aufgabe zu erstellen, rufen Sie die RTOS-API-Funktion auf, die eine Aufgabe für Sie erstellt. Es gibt andere API-Aufrufe zum Senden von Nachrichten usw.

Ich glaube, dass Sie in uCOS auch Wrapper für Interrupt-Funktionen benötigen, um dem RTOS mitzuteilen, wenn Sie sich in einem Interrupt befinden.

Wie interagiert das RTOS wiederum mit dem Controller (wie Windows mit dem Intel-Prozessor interagiert?)

Normalerweise muss diese Klasse von RTOS nur eines der Timer-Peripheriegeräte des Mikrocontrollers verwenden, um einen periodischen Tick-Interrupt zu erzeugen. Es kann auch erforderlich sein, den Software-Interrupt-Vektor zu verwenden.

Wir spezifizieren den Speicherort von RAM, ROM, Stack usw., aber wie werden die Ports über das C-Programm identifiziert, dh wir spezifizieren einen Hex-Wert in unserem Programm, aber wie werden diese mit dem Controller zurückverknüpft

Ich verstehe nicht, was Sie in dieser Frage fragen.

woher weiß das rtos, wo es mit der ausführung des programms beginnen soll.

Sofern Sie es nicht anders ändern, ruft der C-Startcode wie gewohnt main() auf. Ihr Anwendungscode in main() erstellt dann mithilfe der RTOS-API einige Aufgaben, bevor das RTOS gestartet wird. Sie können auch neue Aufgaben aus bestehenden Aufgaben erstellen, nachdem das RTOS gestartet wurde.

Sobald die Anwendung in das ROM geladen ist und das eingebettete Gerät eingeschaltet wird, woher weiß es, wo es mit der Ausführung der Anwendung beginnen soll.

uCOS ist statisch gelinkt. Es erstellt einfach eine ausführbare Binärdatei, als ob Sie kein RTOS verwenden würden. Wenn das Programm kompiliert und verknüpft und in den Mikrocontroller geladen wird, führt der Mikrocontroller beim Zurücksetzen den Code aus, den der Rücksetzvektor ihm mitteilt. Dies ist normalerweise C-Startcode, der dann main aufruft, der dann Ihren Anwendungscode ausführt, der dann RTOS-Tasks erstellt und dann das RTOS startet. Ab diesem Zeitpunkt entscheidet das RTOS, welcher Task wann ausgeführt wird.