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);
- AIl met à 1 uniquement le bit 5
- BIl met à 0 le champ de 3 bits des bits 4 à 6, puis y place 5 (101 en binaire)
- 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.
Continuer : 9 autres questions sur Systèmes embarqués et firmware