Systèmes embarqués et firmware

Quelle condition C teste correctement si le bit 5 du registre d'entrée in vaut 1 ?

  1. Aif (in | (1 << 5))
  2. Bif (in == 5)
  3. Cif (in & (1 << 5))
Afficher la réponse et l'explication

Réponse : C. if (in & (1 << 5))

« in & (1 << 5) » met à 0 tous les bits sauf le bit 5 : la valeur vaut 32 (non nul, donc vrai) si le bit 5 vaut 1, et 0 (faux) sinon. En C, toute valeur non nulle étant vraie, cette expression s'utilise directement comme condition d'un if. Pour obtenir 1 ou 0, on écrit « (in >> 5) & 1 ». Avec OR, le résultat est toujours non nul et ne teste rien.

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

Autres questions sur Systèmes embarqués et firmware

  1. Le code ci-dessus réécrit un champ de plusieurs bits du registre reg. Que fait-il ?
  2. 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 ?
  3. 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 ?
  4. 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 ?
  5. 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 ?

Comparatifs sur ce thème