Embedded systemen en firmware
Terwijl het hoofdprogramma een registerbit bewerkt met "reg |= mask;" (lezen, wijzigen, schrijven), wijzigt een interrupthandler een ander bit van hetzelfde register. Welke combinatie van mogelijk probleem en tegenmaatregel is juist?
- ADe wijziging door de interrupt gaat verloren door het terugschrijven van het hoofdprogramma. Schakel interrupts uit tijdens de bewerking of gebruik registers die alleen per bit kunnen worden gezet of gewist
- BHet register raakt beschadigd en kan nooit meer worden gebruikt. Vervang de microcontroller
- CEr gebeurt niets. Een tegenmaatregel is niet nodig
Antwoord en toelichting tonen
Antwoord: A. De wijziging door de interrupt gaat verloren door het terugschrijven van het hoofdprogramma. Schakel interrupts uit tijdens de bewerking of gebruik registers die alleen per bit kunnen worden gezet of gewist
"reg |= mask" bestaat uit drie bewerkingen: het register lezen, OR uitvoeren en terugschrijven. Als direct na het lezen een interrupt optreedt en de handler een ander bit wijzigt, schrijft het hoofdprogramma terug op basis van de oude waarde van vóór de interrupt, zodat de wijziging van de handler verloren gaat. Door interrupts alleen tijdens de bewerking uit te schakelen, of door registers voor zetten en wissen te gebruiken waarbij alleen bits waarin een 1 is geschreven veranderen, volstaat één schrijfbewerking en treedt dit probleem niet op.