Systèmes embarqués et firmware
Pendant que le traitement principal manipule un bit de registre par « reg |= mask; » (lecture-modification-écriture), si un gestionnaire d'interruption modifie un autre bit du même registre, quelle combinaison de problème possible et de remède est correcte ?
- ALa modification faite par l'interruption est effacée par la réécriture du traitement principal. On interdit les interruptions pendant l'opération ou l'on utilise des registres dédiés de mise à 1 et de mise à 0 par bit
- BLe registre est détruit et devient inutilisable. On remplace le microcontrôleur
- CRien ne se produit. Aucun remède n'est nécessaire
Afficher la réponse et l'explication
Réponse : A. La modification faite par l'interruption est effacée par la réécriture du traitement principal. On interdit les interruptions pendant l'opération ou l'on utilise des registres dédiés de mise à 1 et de mise à 0 par bit
« reg |= mask » comporte trois opérations : lire le registre, appliquer le OR, réécrire. Si une interruption survient juste après la lecture et que le gestionnaire modifie un autre bit, le traitement principal réécrit à partir de l'ancienne valeur lue avant l'interruption, et la modification du gestionnaire est perdue. En interdisant les interruptions pendant l'opération, ou en utilisant des registres de mise à 1 et de mise à 0 où seuls les bits écrits à 1 changent, une seule écriture suffit et le problème disparaît.
Continuer : 9 autres questions sur Systèmes embarqués et firmware