Ca ne marche plus du tout ! Je reçois un caractère bizarre (genre "&" mais pas exactement), en nombre égal au nombre de caractère que je devrait recevoir (donc la boucle et la lecture série fonctionnent bien) mais toujours le même. Et ceci bien entendu avec un index bien en-dessous de 255 ...
Ca ne marche plus du tout ! Je reçois un caractère bizarre (genre "&" mais pas exactement), en nombre égal au nombre de caractère que je devrait recevoir (donc la boucle et la lecture série fonctionnent bien) mais toujours le même. Et ceci bien entendu avec un index bien en-dessous de 255 ...
Une explication ?
Merci !!
bonsoir
pas de difference chez moi avec (testé en 9600 et 115200)
if(Serial.available()) {
delay(20);
int i; // VARIABLE NON INITIALISE
char Buffer[10];
while(Serial.available()){
Buffer[i++]=Serial.read(); // BUFFER OVERFLOW si i > 10
Serial.print(Buffer[i-1]); // POST INCREMENTATION CONTRE PRODUCTIVE
}
}
Donc maintenant on se la refait propre :
byte i = 0;
char buffer[10];
while(Serial.available() > 0) {
buffer[i] = Serial.read();
Serial.print(buffer[i]);
if (++i == 10) i = 0;
}
Et maintenant avec 2sec de réflexion on se rend compte que buffer sert à rien ...
B@tto:
Buffer n'overflow pas car je n'envois jamais + de 10 caractères, et le bug n'arrive pas avec int !! D'où mon questionnement.
Jusqu'au jour où tu va changer d'avis et que ton truc va planter
Rajouter un if ça coute rien et ça évite bien des problèmes.
Pour ton problème initialise ta variable "i" à zéro ça devrait déjà aider.
Que tu utilises un int ou un byte, avec l'initialisation le résultat DOIT être le même.
B@tto:
Du coup tu vas m'ôter d'un doute : je croyais que i++ ==> incrémentation après l’exécution de la ligne de code, ++i avant. Jme gourre ?
Si c'est ça.
i++ post incrémentation
++i pré incrémentation
Dans ton code tu post-incrémentes inutilement vu que tu fait -1 derrière.
Autant utiliser i directement puis l'incrémenter plus tard, en testant la valeur au passage.
B@tto:
J'ai eu le même genre de bug sur Energia, j'ai dû modif des libs en changeant les char en int ...
Energia -> MSP430 -> CPU 16 bits.
Arduino -> AVR - > CPU 8 bits.
Les types ne sont donc pas forcément traités de la même façon entre les deux compilateurs.
Aprés un char devrait normalement toujours faire 1 octet qu'importe le compilateur/cpu, c'est bizarre ton truc.
B@tto:
Buffer n'overflow pas car je n'envois jamais + de 10 caractères, et le bug n'arrive pas avec int !! D'où mon questionnement.
Jusqu'au jour où tu va changer d'avis et que ton truc va planter
Rajouter un if ça coute rien et ça évite bien des problèmes.
Non mais la j'ai posté le code qui me pose un problème fondamental. Tu penses bien qu'une fois appliqué c'est un peu plus édulcoré
skywodd:
Dans ton code tu post-incrémentes inutilement vu que tu fait -1 derrière.
Autant utiliser i directement puis l'incrémenter plus tard, en testant la valeur au passage.
C'est pour le debug évidemment
Derrière Buffer est traité, mais comme ça me donnait toujours des trucs très bizarre je me suis demandé d'où ça venait ... Le code final ne comporte pas le Serial.print()
skywodd:
Energia -> MSP430 -> CPU 16 bits.
Arduino -> AVR - > CPU 8 bits.
Les types ne sont donc pas forcément traités de la même façon entre les deux compilateurs.
Aprés un char devrait normalement toujours faire 1 octet qu'importe le compilateur/cpu, c'est bizarre ton truc.
On est bien d'accord ... Si dans les lib j'initialisais mes loop avec des bytes ==> COMPILATION FAILED Avec des int ==> OK J'ai pas cherché à comprendre c'était plus de mon ressort :s D'autres bugs bizarres sur Energia m'ont fait décroché de cet IDE au demeurant sympa ...