Salut,

Envoyé par
Caxton
Pour des raisons de simplicité de protocole, je transmet la valeur en décimale
Très bonne idée 

Envoyé par
Caxton
oui, c'est mal mais j'ai pas le choix car le mode série hein....
Au contraire !
La très grandes majorités des protocoles éprouvés dialoguent via des valeurs numériques (qu'elles soient binaires, décimales ou hexa ça ne changent rien puisque dans le processeur tout est en binaire) car c'est bien plus efficace et très rares sont ceux qui le font en texte ou suite de caractères.
Si tu veux envoyer la valeur 1000, il te faut 2 octets. Si tu veux envoyer la chaîne de caractères "1000", donc la suite des caractères '1', '0', '0', '0', il te faut 4 octets, le double ! On voit vite l'intérêt d'envoyer des valeurs numériques.

Envoyé par
Caxton
Du coup, comment parcours-t-on un byte, bit à bit quand celui-ci est chargé avec du décimal ?
Ce n'est pas nécessaire contrairement à une chaîne de caractère représentant un nombre. C'est encore un avantage d'envoyer des valeurs numériques.
pour mémoire :
unsigned char nombre = 0x41; sera stocké sous la forme 0100 0001 en mémoire.
unsigned char nombre = 65; sera stocké sous la forme 0100 0001 en mémoire.
unsigned char nombre = 'A'; sera stocké sous la forme 0100 0001 en mémoire.
Donc peu importe la base utilisée, décimale ou hexadécimale, ou même octale et même si on parle de caractère ASCII de toute façon à la fin c'est en binaire dans la mémoire.
Exemple :
1 2 3 4 5 6 7 8
| unsigned char portWrite = 129; // 129 en décimal se code 1000 0001 en binaire, remarquons que j'aurai pu aussi écrire 0x81 ou encore 'ü'
// je veux mettre les bits 3 et 4 à 1 sans toucher aux autres
// je veux ceci 1001 1001
portWrite = portWrite | 0x18;
// j'ai fait un masque logique OU avec la valeur 0x18 qui se code 0001 1000 en binaire |
Exemple 100% équivalent mais écrit autrement :
1 2 3 4 5 6 7 8
| unsigned char portWrite = 129; // 129 en décimal se code 1000 0001 en binaire, remarquons que j'aurai pu aussi écrire 0x81 ou encore 'ü'
// je veux mettre les bits 3 et 4 à 1 sans toucher aux autres
// je veux ceci 1001 1001
portWrite = portWrite | (1 << 4) | (1 << 3);
// j'ai fait un masque logique OU avec la valeur 0x18 qui se code 0001 1000 en binaire |
Partager