optimisation declaration variable etat des pins

Bonjour ,

afin d' economiser de la memoire et / ou de limiter des erreurs quand on declare un tableau d ' etat de pins , qui ne peuvent donc prendre que HIGH ou LOW , il vaut mieux faire :

bool tableau_Etat_Relais [8]; // etat des pins

ou bien :

uint8_t tableau_Etat_Relais [8]; // etat des pins

ou bien encore :

boolean tableau_Etat_Relais [8]; // etat des pins

j ' ai cherché sur internet , mais les reponses en anglais , ne sont pas toujours facile a comprendre :frowning:

Bonjour,

Le 1 et le 3 sont strictement identiques (bool et boolean c'est la même chose).
Sur les processeur avr les booleens prennent un octet donc les trois tableaux prennent la même place mémoire.

Pour le vérifier il suffit de faire Serial.println(sizeof tableau_Etat_Relais);

afin de limiter des erreurs

Que l'on déclare comme on veut, cela ne change pas grand chose car on peut affecter la valeur 55 à un booléen:

void setup()
{
  Serial.begin(115200);
  boolean b;
  b = 55;
  Serial.println(b);
}
void loop()
{
}

Cela se compile sans problème et cela n'affiche pas HIGH ou true, mais 1!

Et si on déclare correstement le tableau avec des boll, rien ne nous empêchera de mettre n'importe quoi dedans:

[b]boo[/b]l tableau_Etat_Relais [6] = {1, true, HIGH, 55, 1.1, 55L}; // etat des pins

void setup()
{
  Serial.begin(115200);
  for (byte i = 0; i < 6; i++) Serial.println(tableau_Etat_Relais [i]);
}
void loop()
{
}

affiche que des 1...

on peut donc dire que les 3 sont pareils ?

curieux qu on fasse la meme chose de 3 manieres differentes ...

bool et boolean je veux bien , car boolean ca vient de l ' IDE arduino basé sur bool en C .

avec un int , on peut mettre , mais surtout recuperer autre chose que 0 ou 1 , non ?
c ' est donc different , mais si on cherche un bool , le resultat sera le meme , si j' ai bien compris .
bien sur l ' inverse on veut un byte ( uint_8 ) n ' est pas vrai ?

ou j ' ai rien compris ? :o

iznobe:
on peut donc dire que les 3 sont pareils ?

Pas tout à fait. Les trois tableaux ont la même taille en mémoire mais dans un bool ne peut contenir que la valeur true ou false (0 ou 1) alors que l'uint8_t peut contenir une valeur entre 0 et 255.

Ok merci kamill .

donc si je fais une variable : bool boool = HIGH ;
bool boool = 1 ;
bool boool = true ;
bool boool = 123548 ;

on est d' accord que si je demande sa valeur , ca me renvoie un .

en fait tout est vrai , sauf 0 ? meme les negatifs et tout les autres trucs imaginable ( a part 0 et false )

Ou c'est ça.
0 ou false -> 0
autre valeur -> 1

Si tu as huit variables booléennes, et que tu veux minimiser la taille mémoire, tu mets tous tes booléens dans un byte et tu affectes les bits à ces booléens.

Arduino dispose de fonctions comme setbit et les opérations binaires pour jouer avec ça.