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 ?

  1. 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
  2. BLe registre est détruit et devient inutilisable. On remplace le microcontrôleur
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Systèmes embarqués et firmware

  1. Un interrupteur seul est relié à une broche d'entrée d'un microcontrôleur, sans résistance de tirage vers le haut ou vers le bas. Que peut-il se passer lorsque l'interrupteur est ouvert ?
  2. Lors de l'utilisation d'une broche GPIO (entrée-sortie à usage général) d'un microcontrôleur, que faut-il régler en premier ?
  3. Comment appelle-t-on le phénomène par lequel, à l'appui sur un interrupteur mécanique, les contacts rebondissent et alternent rapidement plusieurs fois entre fermé et ouvert ?
  4. Quelle méthode est la plus appropriée pour éliminer par logiciel le rebond d'un interrupteur ?
  5. Un temporisateur compte une horloge de 16 MHz divisée par 16 par le prédiviseur et déclenche une interruption tous les 1000 comptes. Quel est l'intervalle entre interruptions ?

Comparatifs sur ce thème