Forum: Mikrocontroller und Digitale Elektronik Task-(Timing)manager


von Steffen Graap (Gast)


Lesenswert?

Hallo

In einem normalen Programm für Mikrocontroller werden Funktionen wie 
Anzeige aktualisieren, Daten speichern, COM-Ports abfragen ja in der 
Hauptschleife nacheinander abgearbeitet. Man kann die Abarbeitung auch 
noch von z.B. zeitlichen Kreterien abhängig machen (Anzeige all 100ms 
aktualisieren). So kommt jede Funktion bei einem Hauptschleifendurchlauf 
zwar zur Ausführung, aber die HS wird entsprechnd lang, und eine Anzeig 
mit 10 Hz ist z.B. nicht möglich).

Ich möchte ein Manager erstellen der diese einzellnen Funktionen (Tasks) 
aufruft. Dabei sollen Tasks entsprechned ihres Zustandes, eines 
Mindestzeitintervall oder in Abhängigkeit vom Betriebszustand des 
Gerätes, entsprechned häufig ausgeführt werden. So muss z.B. eine 
COM-Abarbeitungsroutine nicht bei jedem HS-Durchlauf aufgerufen werden, 
wenn keine Daten im Empfangsbuffer sind. Auch brauch eine Anzeige nicht 
mit 10 Hz aktualisiert werden, wenn im aktuellen Betriebszustand gar 
keine neuen Messwerte ermittelt werden. Die so gesparrte Zeit soll 
anderen Tasks zu gute kommen.
Ich möchte kein RealTime OS, welches die Tasks mitten in der Abarbeitung 
anhält und die Prozessorkapazität an andere Tasks übergibt, und den 
angehaltenen Taks später weiterführt.
Eine einmal aufgerufener Taks läuft so lange, bis die 
Funktion/Teilfunktion abgearbeitet ist. Erst dann kommt der Taskmanager 
wieder zum Zuge und ruft die nächste oder auch die Gleiche Funktion auf.

Gibt es zu dieser Thematik Informationen im Netz? Hat sich damit schon 
mal jemand beschäftigt?
Ich würde ja die Suchfunktionen (Forum, Googel) benutzrn, weiß aber nich 
nach was ich suchen soll.

Dankende Grüße Steffen

von Alexander S. (esko) Benutzerseite


Lesenswert?

> Auch brauch eine Anzeige nicht mit 10 Hz aktualisiert werden, wenn im
> aktuellen Betriebszustand gar keine neuen Messwerte ermittelt werden.
Interrupt bzw. Bedingung für Aktualisieren?

Das ist ein recht schwieriges Thema und wohl nur mit viel Erfahrung und 
Zeit zu lösen, zumal bei µCs nur sehr wenig Speicher zur Verfügung 
steht.
z.B. http://www.femtoos.org/

Linksammlung Betriebssysteme & Co.

von Steffen Graap (Gast)


Lesenswert?

Die von dir empfohlenen Seite beschreibt ein RTOS (Real Time OS) dieses 
möchte ich aus den genannten Gründen (benötigt viel Speicher) nicht 
umsetzen.
Ich möchte ein System erstellen welches "nur" die anfallenden Lasten 
gleichmäßig über die Zeit sinnvoll verteilt. Im Gegensatz zum RTOS 
werden die aufgerufenen Funktion (Tasks) komplett abgearbeitet. So 
müssen die funktionsinternen Variablen, Rücksprungadressen und all das 
nicht im Speicher gehalten werden. Bevor ein neuer Task ausgeführt 
werden kann muss der letzte erst beendet werden.

von Steffen Graap (Gast)


Lesenswert?

Danke für den Tip mit der Linksammlung, die hab ich noch garnicht 
gesehen, hier werde ich vieleicht fündig

von Peter D. (peda)


Lesenswert?


von Falk B. (falk)


Lesenswert?


von Steffen Graap (Gast)


Lesenswert?

Ich habe mich für die Variante aus dem Beitrag "Wartezeiten effektiv 
(Scheduler)" entschlossen. Da hier aber nur zeitlich zuordbare Task 
erfasst werden, werde ich das System um eine Liste mit nach Prioritäten 
geordneten Task erweitern. Um die Hauptschleife nicht zu überlasten, 
wird aus beiden Listen jeweils nur ein Eintrag pro HS-Durchlauf 
abgearbeitet.
So kann dieser Manager für alle anfallenden Aufgaben in der HS genutz 
werden. Erzeugt werden die Einträge in den Listen aus Ereignissen. (z.B. 
wenn ein Zeichen im Empfangspuffer durch die Interruptroutine es 
Com-Ports eingetragen wird, wird gleichzeitig in Prioritätenliste die 
COM-Abarbeitungsroutine eingetragen. Wenn dann die HS Zeit hat, werden 
die Empfangenen Zeichen verarbeit.)
Auch können Einträge in beide Listen erfolgen. So wird erreicht, das ein 
Task so bald wie möglich, aber spätestens nach einer bestimmten Zeit 
abgearbeitet wird. Das durch die Taskroutine der Eintrag aus der jeweils 
anderen Liste gelöscht wird versteht sich von selbst.

Gruß Steffen

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.