Anbieter zum Thema
Im Original-Applikationscode für die Uhr ist diese Funktion über verschiedene Module verteilt. Die Hauptlogik für das Dekodieren und Entprellen ist eine komplexe Switchanweisung mit mehr als 200 Codezeilen. Sie enthält auch High-Level-Applikationslogik, was den Aspekt der Komplexität nur unterstreicht.
Tastenbelegung und Interrupt-Routine
Die Entprell-Zustandsmaschine kann auf drei Ereignisse reagieren: eComplexButton, eSimpleButton und eNobutton. Die Interrupt-Routine, die auf einer Tasterbetätigung reagiert, entscheidet einfach, ob der Interrupt von einer Taste kommt, die nicht für ein längeres Betätigen vorgesehen ist. In diesem Fall wird ein eSimpleButton-Event generiert. Ein eComplexButton-Event liegt für die zwei Tasten vor, die eine unterschiedliche Belegung für lange und kurze Betätigung aufweisen.
Die Zustandsmaschine kann eine Hilfsfunktion aPollButton() nutzen, um sofort festzustellen, ob eine bestimmte Taste noch aktiv ist. Diese Funktion kann zusammen mit den anderen Tasterereignissen das eNoButton-Event generieren, um anzuzeigen, dass die vorher betätigte Taste nicht mehr aktiv ist. Die Zustandsmaschine nutzt wie der Original-Entprell-Code eine Reihe von Timern, um das Entprellen zu steuern und die Länge der Tasterbetätigungen zu bestimmen.
Erkennt die Zustandsmaschine eine der verschiedenen Tasterbetätigungen, wird dies über ein Signal an die restliche Zustandsmaschine berichtet (hier nicht gezeigt). Die Benennung kann aus dem Übergang vom Zustand MaybeLongPress auf NoButton erfolgen (^sM1long). Die Semantik der Signale ist so gestaltet, dass das Signal sofort weiterverarbeitet wird, nachdem das Event durch die Zustandsmaschine verarbeitet wurde.
*Anders Holmberg ist Produktmanager visualSTATE bei IAR Systems in Uppsala, Schweden.
(ID:356663)