Systèmes embarqués et firmware

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 ?

  1. Aport |= (1 << 5);
  2. Bport ^= (1 << 5);
  3. Cport &= ~(1 << 5);
Afficher la réponse et l'explication

Réponse : B. port ^= (1 << 5);

Avec le OU exclusif (XOR, ^), un XOR avec 1 inverse le bit et un XOR avec 0 le laisse inchangé. Ainsi, chaque exécution de « port ^= (1 << 5) » fait basculer uniquement le bit 5 entre 0 et 1. On l'utilise souvent pour faire clignoter une LED. Certains microcontrôleurs disposent d'un registre dédié permettant d'inverser un bit par simple écriture.

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

Autres questions sur Systèmes embarqués et firmware

  1. Quelle condition C teste correctement si le bit 5 du registre d'entrée in vaut 1 ?
  2. Le code ci-dessus réécrit un champ de plusieurs bits du registre reg. Que fait-il ?
  3. 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 ?
  4. 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 ?
  5. 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 ?

Comparatifs sur ce thème