Embedded systemen en firmware
Bij een 8-bits microcontroller verhoogt een timerinterrupt een 32-bits variabele ticks met 1 en berekent het hoofdprogramma de verstreken tijd door ticks te lezen. Wat is de juiste oorzaak van het soms lezen van een sterk afwijkende waarde?
- AOp een 8-bits microcontroller kunnen 32-bits variabelen niet worden gebruikt
- BDe periode van de timerinterrupt verandert telkens willekeurig
- CHet lezen van 32 bit is in vier stappen verdeeld en er kan tussendoor een interrupt optreden, waardoor slechts een deel van de bytes de nieuwe waarde heeft
Antwoord en toelichting tonen
Antwoord: C. Het lezen van 32 bit is in vier stappen verdeeld en er kan tussendoor een interrupt optreden, waardoor slechts een deel van de bytes de nieuwe waarde heeft
Een 8-bits microcontroller kan slechts één byte tegelijk lezen, dus een waarde van 32 bit wordt in vier stappen gelezen. Als bijvoorbeeld bij de verandering van 0x000000FF naar 0x00000100 na het lezen van de laagste byte een interrupt optreedt, ontstaat een waarde als 0x000001FF, die de oude lage byte (0xFF) combineert met de nieuwe hoge byte (0x01). Dit wordt voorkomen door interrupts alleen tijdens het lezen uit te schakelen of door twee keer te lezen en te herhalen tot beide waarden gelijk zijn.