Benutzt ihr ein Betriebssystem auf dem uC?

Gast #6363985
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.
Gast #6364046
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.
#6364055
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.
Gast #6364061
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.
Gast #6364175
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.
(Firma: Schweigstill IT) Persönliche Seite #6364280
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.
#6364327
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/
#6364345
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).
Gast #6364389
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.
Gast #6364546
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.
Gast #6364562
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
Gast #6364598
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.
(Firma: Schweigstill IT) Persönliche Seite #6364901
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.
Gast #6365077
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".
Gast #6365356
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren