Systèmes embarqués et firmware

En langage C, quelle écriture met à 0 uniquement le bit 3 du registre reg sans modifier les autres bits ?

  1. Areg &= ~(1 << 3);
  2. Breg |= ~(1 << 3);
  3. Creg &= (1 << 3);
Afficher la réponse et l'explication

Réponse : A. reg &= ~(1 << 3);

« ~(1 << 3) » est une valeur dont seul le bit 3 vaut 0 et tous les autres 1. Un AND (&) avec cette valeur met toujours le bit 3 à 0, et les autres bits, combinés par AND avec 1, restent inchangés. Les quatre opérations — mise à 1 par OR, mise à 0 par AND NOT, inversion par XOR (^) et test par AND — sont les formes de base de la manipulation des registres dans un micrologiciel.

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

Autres questions sur Systèmes embarqués et firmware

  1. On souhaite basculer, à chaque exécution, entre allumage et extinction le bit d'une broche de sortie reliée à une LED. Quelle écriture C est correcte ?
  2. Quelle condition C teste correctement si le bit 5 du registre d'entrée in vaut 1 ?
  3. Le code ci-dessus réécrit un champ de plusieurs bits du registre reg. Que fait-il ?
  4. 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 ?
  5. 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 ?

Comparatifs sur ce thème