Hallo,
neugierig gemacht durch häufige Beiträge, hier im Forum, über RTOS auf
Mikrocontrollern würde ich mich auch gern einmal mit dem Thema
beschäftigen. Bisher habe ich jedoch keinerlei Ahnung vom Thema RTOS.
Den Sinn des RTOS habe ich schon begriffen. Was mir fehlt ist die
Vorstellung, wie ich das Ganze realisiere. Wie muss ich zum Beispiel
programmieren wenn das Programm unter einem RTOS läuft - im Gegensatz
zum "nackten" C. Oder, wie binde ich das RTOS in die Programmierung ein,
sprich muss ich das schon in der IDE mit einbinden? Also wirkliche
Anfängerfragen.
Gibt es zu dem Thema vielleicht ein gute Tutorial? Super wäre es
natürlich auf Deutsch, wobei Englisch auch kein Problem ist.
Nachtrag:
Die von mir verwendeten µC, meist AVR oder STM32, kann ich leidlich
programmieren in C unter den IDEs der Hersteller und selten auch mal
Arduino.
Jürgen schrieb:> Oder, wie binde ich das RTOS in die Programmierung ein, sprich muss ich> das schon in der IDE mit einbinden?
Das hängt ganz stark davon ab, was für ein RTOS zum Einsatz kommt.
Es gibt RTOS-Ansätze, die aus etwas Library-Code bestehen, der zur
eigentlichen Anwendung dazugelinkt wird, es gibt RTOS-Varianten, die wie
z.B. Linux o.ä. Betriebssysteme arbeiten, d.h. die die einzelnen
Anwendungen erst nach ihrem eigenen Start aus einem Dateisystem laden
... letzteres findet man üblicherweise nur auf "größeren" Systemen.
Beim 8-Bit-AVR wird der librarybasierte Ansatz die einzige Möglichkeit
sein.
Guck mal hier:
https://www.micrium.com/
Obwohl kommerziell, sehr gute Dokumentation und für nicht-kommerziellen
Gebrauch frei. Es gibt auch Bücher von der Firma und Kurse. Wer
professionell damit zu tun hat, weiß die Unterstützung zu schätzen. Die
unterliegenden RTOS Prinzipien werden dort in sehr detaillierter Weise
behandelt. Auch komplette Beispielsprojekte für STM32 gibts dort.
Werbung hin oder her, man sollte sich es trotzdem anschauen. Zum lernen
der Grundlagen bist Du dort richtig. Wir verwenden es in der Firma schon
seit 10 Jahren mit besten Erfolg mit ARM7TDI/Cortex mit uC von NXP/ST.
Wenn Du es kommerziell gebrauchen willst, wirds natürlich sehr teuer.
Dann gibt es alle möglichen freien RTOSes. Mußt halt suchen und
ausprobieren. Aber zum Lernen schau Dir wegen der detaillierten
Grundlagen doch die Dokus von Micrium an. Du kannst Dir dort die ganzen
Unterlagen und Bibliotheken herunter laden. Die haben für jede
vernünftige uC eine Version.
Wahrscheinlich wird sich das in ein Monster Thread und voller
Widersprüche entwickeln. Billig und frei ist meistens geil. Ich habe
Dich gewarnt:-)
Ein gutes RTOS für µC ist z.B. mbed-os. Das ist für Cortex-M und mit
einem STM32 Nucleo oder Discovery Board kann man gut einsteigen,
Startpunkt wäre hier:
https://os.mbed.com/docs/mbed-os/v5.11/quick-start/offline-with-mbed-cli.html
CLI ist Command line interface, da reichen aber ein paar Kommandos um
ein Beispiel herunterzuladen, kompilieren und zu flashen. Es gibt auch
einen Export um eine Projektdatei für eine IDE zu erzeugen, SW4STM32
oder gnuarmeclipse funktionieren bei STM ganz gut. VSCode geht auch, da
ist anfangs nur etwas mehr manuelles setup nötig.
Bei einem RTOS wie mbed-os startet man 'ganz normal' im main() und kann
dann weitere Threads erzeugen und starten. Dazu kommen Funktionen für
die Kommunikation zwischen den Threads.
Wenn man in mehreren Threads auf die HW zugreift ist es wichtig das RTOS
und Treiber zusammenarbeiten, das ist beim mbed-os gegeben. Auch die
C/C++ Runtime muss threadsafe sein, Programme auf Cortex-M mit RTOS
werden da gleich ca. 20 kB grösser weil die kleinere Newlib da nicht
verwendet werden soll. Mit RTOS hat man mehr Overhead, auch weil jeder
Thread seinen eigenen Stack bekommt der RAM frisst. Macht also vor allem
Sinn auf grösseren µC, abe r die gibt es heute ja auch reichlich und
günstig.
Ein weiteres Beispiel zum Start:
https://github.com/ARMmbed/mbed-os-example-thread-statistics/blob/master/main.cpp
FreeRTOS ist auch gut, da gibt es ein Buch zu und die Grundlagen da
lassen sich auch auf andere RTOS übertragen.
In der OpenSource Community weitverbreitet findet sich das FreeRTOS:
https://www.freertos.org/.
Dieses ist für alle gängige Controller verfügbar, und im Internet lassen
sich haufenweise Tutorials dazu finden.
Dann gäbe es da noch, eher neu und in Rust implementiert, das TockOS:
https://www.tockos.org/
Zweiteres habe ich selbst noch nie ausprobiert, finde aber die Idee
interessant, und werde mich demnächst mal dahinter klemmen.
Rufus Τ. F. schrieb:> Das hängt ganz stark davon ab, was für ein RTOS zum Einsatz kommt.
Das ist der entscheidende Punkt!
Ersteres ist eine Library, zweiteres fast schon ein kompletter Kernel.
Wenn man beim STM in CubeMx die Konfiguration zusammenklickt, dann kann
man FreeRTOS "dazubuchen" und kriegt dann in dem Projekt die Dateien
reingepackt und die Calls für Initialisierung und Start in die main.
Wäre vlt. ein guter Anfang zum "Schnuppern".
Eine eigene Frage?
Dieser Thread ist über 7 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.