Forum: Mikrocontroller und Digitale Elektronik Wie µC programmieren für/mit RTOS ?


von Jürgen (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch User
von Alter Hase (Gast)


Lesenswert?

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:-)

von Johannes S. (Gast)


Lesenswert?

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.

von Silc P. (silch12)


Lesenswert?

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.

: Bearbeitet durch User
von Max D. (max_d)


Lesenswert?

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".

von w3llschmidt (Gast)


Lesenswert?

Such dir erstmal eine Hardware aus:

https://www.freertos.org/RTOS_ports.html

Im schlimmsten Fall Windows :)

Und dann arbeitest Du das hier ab:

https://www.freertos.org/wp-content/uploads/2018/07/161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf

Es ist fast alles über API's (C Funktionen) geregelt.

Ich würde erstmal mit einem Task anfangen (der Sinn des ganzen) und dann 
schwieriger werden. 2 Tasks, Queues … etc.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.