Systèmes embarqués et firmware

Le code ci-dessus réécrit un champ de plusieurs bits du registre reg. Que fait-il ?

reg = (reg & ~(0x7 << 4)) | (5 << 4);
  1. AIl met à 1 uniquement le bit 5
  2. BIl met à 0 le champ de 3 bits des bits 4 à 6, puis y place 5 (101 en binaire)
  3. CIl multiplie reg par 5 puis le décale de 4 bits vers la gauche
Afficher la réponse et l'explication

Réponse : B. Il met à 0 le champ de 3 bits des bits 4 à 6, puis y place 5 (101 en binaire)

0x7 vaut 111 en binaire ; « 0x7 << 4 » est donc un masque dont les bits 4 à 6 valent 1. Un AND avec son complément met le champ à 0, puis un OR avec « 5 << 4 » (101 dans les bits 4 à 6) donne au seul champ la valeur 5, les autres bits restant inchangés. C'est la forme de base de la modification d'un registre où plusieurs bits représentent un même réglage, comme un mode de fonctionnement ou un rapport de division.

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

Autres questions sur Systèmes embarqués et firmware

  1. 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 ?
  2. 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 ?
  3. 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 ?
  4. 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 ?
  5. Quelle méthode est la plus appropriée pour éliminer par logiciel le rebond d'un interrupteur ?

Comparatifs sur ce thème