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?

  1. AWeil 32-Bit-Variablen bei einem 8-Bit-Mikrocontroller nicht verwendbar sind
  2. BWeil sich die Periode des Timer-Interrupts jedes Mal zufällig ändert
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Embedded Systems und Firmware

  1. Welche Aussage zur seriellen Kommunikation per UART ist korrekt?
  2. Wie viele Bytes pro Sekunde lassen sich bei einem UART mit 115200 bps im Format 8 Datenbits, keine Parität, 1 Stoppbit (8N1) ungefähr senden?
  3. Weichen die Baudraten von Sender und Empfänger bei UART geringfügig ab, kann es zu verstümmelten Zeichen kommen. Warum ist die zulässige Abweichung auf etwa einige Prozent begrenzt?
  4. Welche Aussage zur SPI-Kommunikation ist korrekt?
  5. Welche Kombination der vier bei SPI üblicherweise verwendeten Signale ist korrekt?

Vergleiche zu diesem Thema