Tu veux stocker 8 capteurs de ligne dans un seul octet (chaque bit = un capteur). Écris :
- Une macro
CAPTEUR_ACTIF(n) qui teste si le capteur n est actif
- Une macro
ACTIVER_CAPTEUR(reg, n) qui active le capteur n
Solution :
#include <stdio.h>
#include <stdint.h>
/* Teste si le capteur n est actif (bit n a 1) */
#define CAPTEUR_ACTIF(reg, n) ((reg) & (1 << (n)))
/* Active le capteur n (met le bit n a 1) */
#define ACTIVER_CAPTEUR(reg, n) ((reg) |= (1 << (n)))
/* Desactive le capteur n (met le bit n a 0) */
#define DESACTIVER_CAPTEUR(reg, n) ((reg) &= ~(1 << (n)))
int main(void)
{
uint8_t capteurs = 0;
printf("Initial : capteurs = 0x%02X\n", capteurs);
ACTIVER_CAPTEUR(capteurs, 3);
printf("Apres activation capteur 3 : 0x%02X\n", capteurs);
ACTIVER_CAPTEUR(capteurs, 7);
printf("Apres activation capteur 7 : 0x%02X\n", capteurs);
if (CAPTEUR_ACTIF(capteurs, 3)) {
printf("Capteur 3 est actif\n");
}
if (!CAPTEUR_ACTIF(capteurs, 0)) {
printf("Capteur 0 est inactif\n");
}
DESACTIVER_CAPTEUR(capteurs, 3);
printf("Apres desactivation capteur 3 : 0x%02X\n", capteurs);
return 0;
}
Solution copiée dans l'éditeur.