Timer sind vielleicht die essentiellsten Bausteine in eingebetteten Systemen. So ziemlich jede eingebettete Lösung bildet in der einen oder anderen Form ein möglichst determiniertes Zeitverhalten ab. Die beste Art Zeitereignisse zu erzeugen ist es eine Hardware damit zu beauftragen. Timer sind dem Wesen nach Zähle. Sie zählen einfachsten Fall Systemtakte. Wenn es langsamer gehen soll werden Vorteiler verwendet. Typische Zeitereignisse werden aus dem Erreichen der Null bzw. des Überlaufs des Zählerregisters oder dem Erreichen von Vergleichswerten erzeugt. Die Signatur des einfachsten PecTimer Templates sieht wie folgt aus:
Bevor wir beginnen benötigen wir ein neues Klassendiagramm. Dazu müssen Sie zurück in die oberste Ebene gehen (rechte Maustaste / nach oben oder einfach Taste ESC). Dort legen Sie ein neues Klassendiagramm an. Zur Erinnerung:
In unserem Beispiel soll ein Timer so konfiguriert werden, dass alle 50 Miillisekunden ein Interrupt ausgelöst wird. In der Interrupt-Handler soll ein Wert inkrementiert und zur Kontrolle per UART an den PC gesendet werden.
Gehen Sie wie folgt vor:
Die so vorbereitete Systemstruktur muss jetzt nur noch mit dem gewünschten Verhalten ergänzt werden. Ergänzen Sie die Klasse Controller mit den folgenden Code:
Controller::onStart
trigger.configMs(50);
Das Timer-Event können Sie wie folgt ergänzen. Achten Sie darauf, dass in Interupt-Handlern nur kurze Codesequenzen stehen sollten.
Trigger::onTimer
counter++; app.konsole.writeByte(counter);
Wenn wir die Zeile richtig eingegeben und das Modell korrekt erstellt haben können wir aus dem Klassendiagramm wie gehabt den Quellcode generieren, diesen übersetzen und auf den Controller übertragen. Das erfolgt über das Aktionsmenü in der Objektbibliothek. Wählen sie dort den Menüpunkt Erstellen, Brennen & Ausführen. Testen Sie die Anwendung!
Und hier diesen Abschnitt als kurze Videozusammenfassung.
<flashplayer width=„600“ height=„475“ position=„0“>file=http://youtu.be/Wdv74uUNAfo</flashplayer>