Systèmes embarqués et firmware

En langage C, quelle écriture met à 1 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 » vaut 00001000 en binaire : c'est une valeur (masque) dont seul le bit 3 vaut 1. En la combinant par OR (|) avec la valeur du registre, le bit 3 devient toujours 1 et les autres bits conservent leur valeur. Une affectation (=) écraserait aussi les autres bits avec des 0 et détruirait d'autres réglages du périphérique. Les bits sont numérotés à partir de 0 pour le bit de poids faible.

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

Autres questions sur Systèmes embarqués et firmware

  1. En langage C, quelle écriture met à 0 uniquement le bit 3 du registre reg sans modifier les autres bits ?
  2. 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 ?
  3. Quelle condition C teste correctement si le bit 5 du registre d'entrée in vaut 1 ?
  4. Le code ci-dessus réécrit un champ de plusieurs bits du registre reg. Que fait-il ?
  5. 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 ?

Comparatifs sur ce thème