Embedded Systems und Firmware
Bei einem 8-Bit-Mikrocontroller erhöht ein Timer-Interrupt die 32-Bit-Variable ticks um 1, und das Hauptprogramm liest ticks, um die verstrichene Zeit zu bestimmen. Was ist die richtige Ursache dafür, dass mitunter stark abweichende Werte gelesen werden?
- AWeil 32-Bit-Variablen bei einem 8-Bit-Mikrocontroller nicht verwendbar sind
- BWeil sich die Periode des Timer-Interrupts jedes Mal zufällig ändert
- CWeil das Lesen der 32 Bit in vier Zugriffe zerfällt und ein Interrupt dazwischen auftreten kann, sodass nur ein Teil der Bytes neu ist
Antwort und Erläuterung anzeigen
Antwort: C. Weil das Lesen der 32 Bit in vier Zugriffe zerfällt und ein Interrupt dazwischen auftreten kann, sodass nur ein Teil der Bytes neu ist
Ein 8-Bit-Mikrocontroller kann pro Zugriff nur ein Byte lesen, ein 32-Bit-Wert wird daher in vier Zugriffen gelesen. Tritt z. B. im Moment des Wechsels von 0x000000FF auf 0x00000100 nach dem Lesen des niederwertigen Bytes ein Interrupt auf, entsteht aus altem unterem Byte (0xFF) und neuem oberem Byte (0x01) ein Wert wie 0x000001FF. Dies wird vermieden, indem man Interrupts während des Lesens sperrt oder so lange erneut liest, bis zwei Lesevorgänge denselben Wert ergeben.