Bitte beachten Sie: Diese Frage erwähnt speziell zwei RTOS, ist jedoch allgemeiner und kann wahrscheinlich von jedem beantwortet werden, der zuvor C-Code für eingebettete RTOS geschrieben hat und dessen Software direkt auf MCUs ausgeführt wurde.
Ich bin daran interessiert, mehr über eingebettete RTOSs zu erfahren und Anwendungen für sie zu schreiben. Ich sehe mir derzeit Embox und RIOT an, weil sie Open Source, modern, aktiv und mit hervorragender Dokumentation ausgestattet sind. Mein Ziel besteht aus zwei Phasen: Phase 1 besteht darin, herauszufinden, wie diese Betriebssysteme kompiliert und auf eine MCU (wahrscheinlich AVR oder ARM) geflasht werden. Phase 2 besteht darin, ein einfaches C-Programm (im Grunde ein kopfloser Daemon) zu schreiben, das sich im Laufe der Zeit als "Hobby-App" entwickeln würde. Ich würde dieses Programm dann auf derselben MCU flashen / bereitstellen und dabei erfolgreich einen Appstack bereitstellen, der aus Embox / RIOT und meiner darauf befindlichen App besteht.
Bevor ich alle Straßen nach unten gehen , die letztendlich in Sackgassen führen, ich über stolperte diesen Artikel , die einen ziemlich guten Job zu erklären , warum Echtzeit - Anwendungen, geschrieben in C / Assembler und geflasht MCUs, nicht wirklich brauchte RTOSes sie unter .
Jetzt bin ich wirklich verwirrt und stelle einige meiner grundlegenden Kenntnisse der Computertheorie in Frage. Ich denke, ich versuche zu entscheiden, ob ich Embox / RIOT überhaupt verwenden soll oder nicht:
- Bleiben Sie auf Kurs und nutzen Sie einen "App-Stack" auf der MCU beider OS + -Apps. oder
- Beachten Sie die Warnung des Artikels und gehen Sie einfach mit einer MCU, auf der meine App "Bare Metal" ausgeführt wird.
Ersteres ist natürlich mehr Arbeit, und daher sollte es einen guten Grund / eine gute Auszahlung für diesen Weg geben. Ich frage also: Was sind die wirklichen Vorteile, die diese (und ähnliche) eingebetteten RTOS für MCU / C-App-Entwickler bieten? Welche spezifischen Funktionen könnte meine C-App durch die Verwendung eines RTOS nutzen (möglicherweise, indem das Rad nicht neu erfunden wird?)? Was geht verloren, wenn man das RTOS fallen lässt und auf Bare Metal geht?
Ich bitte hier um konkrete Beispiele, nicht um den Medienrummel, den man bekommt, wenn man zum Wikipedia-Eintrag für RTOSes geht ;-)
quelle
Antworten:
Mikrocontroller-Programme bestehen aus einer Reihe von Aufgaben . Angenommen, Sie wollten eine computergesteuerte Teleskophalterung herstellen. Die Aufgaben wären:
Dies ist ein ziemlich typischer Satz von Aufgaben für etwas, für das Sie einen Mikrocontroller verwenden würden, und der mit einer Endlosschleife ziemlich einfach zu verwalten ist, wie:
Wenn Sie weiterhin Funktionen hinzufügen und hinzufügen, stoßen Sie schließlich auf häufig auftretende Probleme, für die Sie Abstraktionen erstellen möchten, z.
readSensors
zu lange dauert, möchten Sie es unterbrechen und später darauf zurückkommen können.Ein oder zwei dieser Elemente können relativ einfach manuell gehandhabt werden. Wenn Sie genug von diesen Problemen häufig genug haben, um sie in Bibliotheken zu verallgemeinern, haben Sie ein RTOS im Grunde neu erfunden. Wenn die Aufgabenverwaltung Ihres Programms komplex genug ist, selbst wenn Sie kein Standard-RTOS verwenden, werden Sie eines möglicherweise schlecht neu erfinden.
Nach meiner Erfahrung liegt die Leitung, in der Sie ein RTOS wünschen, jedoch sehr nahe an der Leitung, in der Sie einen Mikroprozessor anstelle eines Mikrocontrollers wünschen. Wenn Sie davon ausgehen, dass Ihre Firmware so komplex wird, ist es normalerweise besser, von Anfang an den Weg des Mikroprozessors zu gehen.
quelle
Ich habe meine eigene kooperative Multithreading-Bibliothek für ARM Cortex-M0 geschrieben.
Es waren kaum ein paar Seiten Code, und die erste Version brauchte nicht länger als einen Tag, um zu schreiben und zu debuggen.
Der große Vorteil von Roll-Your-Own ist, dass Sie den Code kennen und ihn auf Chips portieren können, die das RTOS möglicherweise nicht unterstützt. Außerdem verbringen Sie weniger Zeit damit, über Fragen wie "Wird es abstürzen, wenn ich versuche, die Funktionen A und B gleichzeitig zu verwenden?" Seit Sie den Code geschrieben haben, kennen Sie die Antwort.
Threading ist die Hauptsache, die Sie von einem RTOS erhalten, und es stellt sich heraus, dass es keine so große Sache ist, sich selbst zu implementieren. Es ist selten, dass Sie viele Funktionen eines RTOS benötigen. Wenn Sie jedoch Ihre Anforderungen erfüllen und sich herausstellt, dass dies der Fall ist, verwenden Sie ein RTOS.
quelle