Forum: Mikrocontroller und Digitale Elektronik Benutzt ihr ein Betriebssystem auf dem uC?


von Johannes (Gast)


Lesenswert?

Nabend,
benutzt Ihr ein Betriebssystem auf euren uCs? Z.B. ESP? Ab wann benutzt 
ihr z.B. RTOS oder was anderes?
Oder ist ein Betriebssystem für ein Controller to much? Gerade im 
Mikrocontrollerbereich, ist mir eigentlich noch nie ein Beispiel 
untergekommen, wo man so etwas verwenden könnte. Habe bisher immer nur 
die standard main-funktion mit while(1) erstellt.

von Wolfgang (Gast)


Lesenswert?

Johannes schrieb:
> Habe bisher immer nur
> die standard main-funktion mit while(1) erstellt.

Hat dein µC keinen Timer, der regelmäßig auszuführende Tasks anstößt?

von อวัยวะเพศชายใหญ่ (Gast)


Lesenswert?

Nein.

von Stefan F. (Gast)


Lesenswert?

Johannes schrieb:
> Gerade im
> Mikrocontrollerbereich, ist mir eigentlich noch nie ein Beispiel
> untergekommen, wo man so etwas verwenden könnte

Multi-Tasking mit Ethernet und weiteren Kommunikationsschnittstellen 
wäre ein Fall, wo ein OS nützlich sein kann.

von Eduardo (Gast)


Lesenswert?

Johannes schrieb:
> Habe bisher immer nur
> die standard main-funktion mit while(1) erstellt.

Wenn du das auf einem ESP mit dem Arduino-Umgebung gemacht hast, dann 
hast du bereits sehr wahrscheinlich ein RTOS genutzt, ohne es zu wissen. 
Was sagt dir das?

von Johannes (Gast)


Lesenswert?

Wolfgang schrieb:
> Hat dein µC keinen Timer, der regelmäßig auszuführende Tasks anstößt?

Doch, der hat aber keine Tasks angestoßen, da ich bisher noch nie 
mehrere hatte.

Eduardo schrieb:
> Wenn du das auf einem ESP mit dem Arduino-Umgebung gemacht hast, dann
> hast du bereits sehr wahrscheinlich ein RTOS genutzt, ohne es zu wissen.
> Was sagt dir das?

Habe es noch nie in der Arduino umgebung gemacht.

Stefan ⛄ F. schrieb:
> Multi-Tasking mit Ethernet und weiteren Kommunikationsschnittstellen
> wäre ein Fall, wo ein OS nützlich sein kann.

Hast du auch ein genaues Beispiel? Mir fehlt noch so ein Beispiel um das 
besser nachvollziehen zu können. Warum muss so etwas multi-tasking fähig 
sein?
Daten die übers Ethernet reinkommen können ja in einem Struct 
gespeichert werden. Gleiches mit Daten über anderer 
Kommunikationsschnittstellen (z.B. CAN). In der main-loop kann dann 
alles abgearbeitet werden.

von Helmut -. (dc3yc)


Lesenswert?

Habe hier ein Statusdisplay mit mqtt-Schnittstelle und 16 LEDs und 
ESP8266. Die LEDs können verschiedene Farben haben und schnell oder 
langsam blinken. Fürs Blinken wird ein RTOS verwendet, während der WLAN- 
und mqtt-Part des Programms in der Loop läuft. Der Standardteil des 
WLANs wird sicher auch ein OS benutzen.

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Wenn man kein RTOS hat, dann macht man viele Dinge (z.B. Kommunikation, 
hochpriore Tasks) im Interrupt.

Typische Beispiele, wo ein RTOS mit Tasks sinnvoll sind:

 * Module in der Loop, die deutlich unterschiedlichen Takt haben
 * blockierende GUI (wo z.B. direkt auf einen Tastendruck gewartet wird)
 * sehr langsame Prozesse (Abarbeitung in einer Hintergrund-Task)
 * Nutzung fremder Module, die nicht als SPS-Loop arbeiten.

Wenn man Anfängt, deutlich allgemeinen Code in Interrupts zu 
verschieben, ist es Zeit, über ein RTOS nachzudenken.

von Stefan F. (Gast)


Lesenswert?

Johannes schrieb:
> Hast du auch ein genaues Beispiel? Mir fehlt noch so ein Beispiel um das
> besser nachvollziehen zu können. Warum muss so etwas multi-tasking fähig
> sein?

Ein Webserver zum Beispiel kann Webseiten über mehrere Verbindungen 
gleichzeitig ausliefern. Browser laden z.B. mehrere Bilder parallel, 
während die Seite geladen wird.

Oder stelle dir eine smarte Lampe an, die von allen Familienmitglieder 
per Smartphone geschaltet wird. Da muss die Lampe mehrere Verbindungen 
gleichzeitig zulassen.

UDP giegne auch (ohne Verbindungen), aber das würde Web-Interface 
ausschlißeen.

von Kevin M. (arduinolover)


Lesenswert?

Helmut -. schrieb:
> Fürs Blinken wird ein RTOS verwendet,

Das ist dann wohl der Inbegriff von Overkill :O

Ein Timer hätte es vermutlich nicht getan....

von Mein Senf (Gast)


Lesenswert?

Mal bisschen Grundlagenwissen aneignen, das gibts heute wohl nicht mehr?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Ein Webserver zum Beispiel kann Webseiten über mehrere Verbindungen
> gleichzeitig ausliefern. Browser laden z.B. mehrere Bilder parallel,
> während die Seite geladen wird.

Es ist möglich und auch gängige Praxis, mit einem Prozess/Thread/Task 
mehrere Netzwerkverbindungen gleichzeitig zu bedienen. Das hängt eben 
einfach vom jeweiligen Konzept des Webservers ab. Selbst bei "großen" 
Webservern, z.B. Apache HTTP Server, lassen sich oft verschiedene 
Verfahren einstellen.

Generell ist es auch ziemlich wichtig, dass ein Webserver mehrere 
Verbindungen unterstützt, denn übliche Webbrowser öffnen selbst bei 
einfachen statischen Webseiten mit enthaltenen Bildern neue 
HTTP-Verbindungen, bevor die alte Verbindung geschlossen wird. 
Unterstützt der Webserver nur eine einzige Verbindung, kommt es hierbei 
zum Deadlock. BTDT.

von Mehmet K. (mkmk)


Lesenswert?

Wenn man sich einmal an das Programmieren mit RTOS gewöhnt hat, kommt 
man davon nicht mehr los; und benutzt es auch dort, wo es auch ohne 
ginge.
Macht auch irgendwie mehr Spass beim Programmieren.
(Zumindest bei mir ist es so.)
Die 2 Wehrmutstropfen:
- Debuggen ist etwas kniffliger.
- Das richtige Watchdog-Management zu finden ist nicht ganz einfach

Wenn Du noch nie mit RTOS gearbeitet hast, empfehle ich Dir als Einstieg 
Protothreads. Ist ein einfacher Scheduler, der einem RTOS recht nahe 
kommt und der auf 1 oder 2 einfachen header-files basiert.
http://dunkels.com/adam/pt/

von Fire H. (fireheart)


Lesenswert?

Ich trenne die Computeranwendungen in Low-Level und High-Level 
Anwendungen.
Wenn ich low-level Logik ausprogrammiere (Bits in Schieberegistern 
herumschieben, LEDs ansteuern,...), dann nehm ich einen Atmel 8-Bit µC 
und der wird dann ohne Betriebssystem in Assembler programmiert ... da 
weiß ich haargenau, was der Prozessor macht und das hat irgendwie seinen 
ganz eigenen Reiz.

Wenn ich natürlich mit Ethernet-Kommunikation arbeiten will, 
Grafikanwendungen mache, viel Rechenarbeit leisten muss, dann geh ich 
auf ein ausgewachsenes Computersystem mit mehreren Cores ... und da ist 
dann auch klar, dass sowas ohne Betriebssystem nicht mehr funktionieren 
kann. Und dann wird in C++ programmiert. (noch höher will ich mit den 
Programmiersprachen nicht mehr hinaus, weil ich damit auch den Bezug zum 
Computer verliere ... in der Cloud fühle ich mich nicht mehr wohl).

von Wolfgang (Gast)


Lesenswert?

Fire H. schrieb:
> Ich trenne die Computeranwendungen in Low-Level und High-Level
> Anwendungen.

Die Welt ist nicht schwarz-weiß.
Es gibt Zwischendinge zwischen Multicore Programmierung in C++ und 
Bitzchieberei in Assembler.

von Stefan F. (Gast)


Lesenswert?

> Stefan ⛄ F. schrieb:
>> Ein Webserver zum Beispiel kann Webseiten über mehrere Verbindungen
>> gleichzeitig ausliefern. Browser laden z.B. mehrere Bilder parallel,
>> während die Seite geladen wird.

Andreas S. schrieb:
> Es ist möglich und auch gängige Praxis, mit einem Prozess/Thread/Task
> mehrere Netzwerkverbindungen gleichzeitig zu bedienen.

Ja Andreas. Man kann alles widerlegen. Der TO hatte nach einem Beispiel 
für den Einsatz eines OS gefragt, und dafür war es ein sehr gutes 
Beispiel. Man kann ALLES ohne OS programmieren, genau so wie man jeden 
Ort der Welt ohne Auto erreichen kann. Dennoch ist die Fahrt in den 
Urlaub ein gutes Beispiel, wozu Autos gut sind.

von Wolfgang (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Dennoch ist die Fahrt in den Urlaub ein gutes Beispiel, wozu Autos
> gut sind.

... jedenfalls, falls man gewillt ist, seinen möglichen Urlaubsort auf 
größenordnungsmäßig weniger als 1 Prozent der Erdoberfläche 
einzuschränken.

von Johannes S. (Gast)


Lesenswert?

Johannes schrieb:
> Oder ist ein Betriebssystem für ein Controller to much?

RTOS gab und gibt es zwar auch für AVR, aber wenn man jedes Byte zählen 
muss dann macht das keinen Spaß.
Mit den aktuellen Cortex-M oder den Tensilica sieht das schon anders 
aus. Auf den CM mache ich daher alles mit Mbed-OS, da ist RTX als RT 
Kern drin. Das kostet schon einigen Overhead weil auch gleich die Newlib 
statt Newlib Nano verwendet werden muss. Da fängt der Spaß z.B. bei den 
STM32F4 an, was aber auch kein Problem ist weil so ein fertiges Modul 
wie Blackpill mit F401/F411 auch nur ca. 5 € kostet, oder ein F407 Board 
mit Display ca. 20 €.
Mit RTOS kann man einiges aufgeräumter machen, z.B. langsamen GUI 
Thread, schnellem IOThread und weitere für Kommunikation. Ein 
Interruptsystem sehe ich da als RTOS für Arme, das braucht zwar weniger 
Resourcen, wird aber schnell chaotisch weil nix blockieren darf. Und ein 
RTOS ist nicht nur für Timingfunktionen da, es bringt auch Semaphore, 
Queues und Threads mit Prioritäten mit.
Threads brauchen vor allem mehr RAM weil jeder einen eigenen Stack 
bekommt und auch Kontextwechsel kosten Zeit. Alternativ kann man auch 
mit EventQueues arbeiten. Das geht bei Mbed sehr elegant weil man 
einfach Callbacks in die Queue werfen kann. Man kann dann auch den RTOS 
Teil weglassen, wieder die Newlib Nano benutzen und schon passt es 
wieder in kleinere Controller.
Das läuft leider nicht auf den ESP weil die keinen ARM Kern haben und in 
der Espressif Firmware auch schon das FreeRTOS werkelt.

von Stefan F. (Gast)


Lesenswert?

Weiter oben hat jemand Protothreads genannt. Die habe ich mal in 
Kombination mit einem Webserver verwendet. Ehrlich gesagt will ich damit 
nie wieder arbeiten müssen. Damit korrekte Programme zu schrieben, 
empfinde ich als sehr mühsam.

Aaaaaaber: Es war sehr lehrreich, damit zu arbeiten. Insofern ist es 
vielleicht doch nicht so verkehrt, es wenigstens einmal auszuprobieren 
(ist wie mit Assembler).

Zu dem Thema hatte ich mal einen Aufsatz geschrieben: 
http://stefanfrings.de/net_io/protosockets.html

von Johannes S. (Gast)


Lesenswert?

Die Protothreads sind ja eine leichtgewichtige Alternative zu einem 
'richtigen' RTOS und es gab nicht immer so fette Cortex-M. Dafür war das 
schon cool was der Adam da gezaubert hat, aber heute möchte ich sowas 
auch nicht mehr anpacken.

von Einer K. (Gast)


Lesenswert?

Johannes S. schrieb:
> Die Protothreads sind ja eine leichtgewichtige Alternative zu einem
> 'richtigen' RTOS

Und genau das sorgt dafür, dass das Konzept weiterhin (z.B. für die 
kleinen AVR) interessant bleibt.

Dem Dunkel sein Ding, etwas umgemodelt, passt fein in die Arduino Welt.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Mehmet K. schrieb:
> Wenn man sich einmal an das Programmieren mit RTOS gewöhnt hat, kommt
> man davon nicht mehr los; und benutzt es auch dort, wo es auch ohne
> ginge.

Das ist so nicht korrekt. Früher war ich auch ein großer Verfechter des 
Einsatzes von RTOS, aber mittlerweile setze ich sie eher selten ein. 
Stattdessen habe ich mir eine strikte Programmierdisziplin angewöhnt, 
mit der ich eine Form von "kooperativen Multitasking" auch ohne explizit 
eingesetztes RTOS realisiere.

Natürlich gibt es sehr viele Anwendungsbereiche, in denen der Einsatz 
eines RTOS sinnvoll ist, insbesondere natürlich dann, wenn der 
Rechenzeitbedarf einzelner Programmteile sehr stark schwankt. 
Entscheidend ist dabei vor allem, dass eine RTOS entgegen vielfältiger 
Annahmen eben nicht ein Echtzeitverhalten aus dem Nichts herbeizaubern 
kann, sondern ganz im Gegenteil muss jeder Programmteil so ausgelegt 
sein, dass er das Echtzeitverhalten des Gesamtsystems nicht stört.

von A. S. (Gast)


Lesenswert?

Andreas S. schrieb:
> Entscheidend ist dabei vor allem, dass eine RTOS entgegen vielfältiger
> Annahmen eben nicht ein Echtzeitverhalten aus dem Nichts herbeizaubern
> kann, sondern ganz im Gegenteil muss jeder Programmteil so ausgelegt
> sein, dass er das Echtzeitverhalten des Gesamtsystems nicht stört.

Vor allem im Embedded-Bereich geht es oft um: SPS-basiert oder 
Event-basiert. Mit dem Ergebnis, dass Event-basiert schön einfach und 
straight ist, in der Praxis aber dann ganz schnell zu komplex und 
fehleranfällig wird. Und  nur dort gut performt, wo es nicht drauf 
ankommt, nämlich im "Normal-Betrieb".

von PittyJ (Gast)


Lesenswert?

Ich nehme Free RTOS auf meinem ARM-M0.
Ich würde es jetzt nicht als Betriebssystem bezeichnen, dafür kann es zu 
wenig.
Aber es hilft mir wunderbar, wenn ich zwei oder drei Tasks mit 
unterschiedlicher Priorität habe.
Der Rest ist Bare Metal.

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.