mikrocontroller.net

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


Autor: Steffen Graap (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander Schmidt (esko) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen Graap (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen Graap (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Steffen Graap (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.