Auf einem kleinen Embedded-System-Projekt haben wir Code, den wir in einem Thread ausführen möchten, also wählen wir oben in einem eingebetteten RTOS (eCos).Ist es sinnvoll, ein RTOS und zyklisches Executive zu mischen?
Zuvor haben wir eine zyklische executive in main() verwendet, die Aufgaben ausgeführt hat, die jeweils als Zustandsmaschine implementiert wurden. Bei einigen Aufgaben traten Probleme auf, bei denen die Aufgabe in viele feinkörnige Zustände aufgeteilt werden musste, wodurch der Code besonders komplex wurde.
Beim Wechsel zu einem RTOS haben wir festgestellt, dass die Speichernutzung für jeden Thread-Stack schnell summiert, wenn wir jeder einzelnen Task einen eigenen Thread zuweisen. (Wir haben nur 64k und benötigen den Speicher für unsere Kommunikationspuffer)
Wir erwägen die Verwendung eines Profils für unsere Kommunikationsaufgabe und eines anderen Threads für eine zyklische Exekutive. Die zyklische Exekutive steuert die anderen logischen Aufgaben.
Macht es Sinn, ein RTOS und eine zyklische Steuerung so zu mischen?
Die preemptive Threading-Funktion ermöglicht es uns, den Aufbau einer zu komplexen Zustandsmaschine in der Kommunikationsaufgabe zu vermeiden. Durch einen Thread für den Kommunikationsteil ist der Code ziemlich geradlinig. Wenn wir es an jedem Punkt in einen Zustand auflösen, der momentan einen Schlaf (1000) Typ von Block hat, wäre der Code im Grunde ein Spaghettikode-Chaos von sehr kleinen Zuständen. Es könnte gemacht werden, aber wir würden den Code lieber sauber und wartbar halten. Die anderen Zustandsmaschinen reichen von einfach bis etwas komplex (einer hat ~ 15 Zustände).Die Kommunikationszustandsmaschine wäre noch mehr Co – JeffV