Bonjour a tous,
ça fraisai longtemps que j'avais pas eu un problème du genre.. dépassement de capacité de variable...
Sa peut paretre bête mais j'ai tout tenté !!! tout lol unsigned long, long long, long unsigned int, unsigned int tout xDD
Ma valeur varie entre 1 000 et 500 000 pourtant, rien d'affolant, mais des que je dépasse les 32 000, négatif, énorme somme etc.. enfin bref le bordel quoi.. donc je vient à vous en espèrent qu'un bug arduino existe la dessus ou alors je vais continué a gemberger..
Je précise, ma valeur jusqu’à 32 000 n'a aucun défaut, donc elle parvient jusqu’à la variable etc, le problème c'est les grosses valeurs, peut importe le format ça passe pas quoi :s
Merci d'avance !
Skizo !
Je précise, ma valeur jusqu’à 32 000 n'a aucun défaut, donc elle parvient jusqu’à la variable etc, le problème c'est les grosses valeurs, peut importe le format ça passe pas quoi
Un unsigned long va jusqu'à 4294967296 donc tu dois avoir un problème de codage.
Si tu as un problème au-dela de 32767 c'est qu'il y a un int qui traine quelque part.
Une constante sans le l derrière par exemple.
Une variable intermédiaire sur laquelle tu n'as pas fait un cast.
.....
Mets ton code on regardera.
envoie:
modif_para_ronde[12]=byte(stop_ronde)>>24;
modif_para_ronde[13]=byte(stop_ronde)>>16;
modif_para_ronde[14]=byte(stop_ronde)>>8;
modif_para_ronde[15]=byte(stop_ronde);
//modif para ronde est un tableau de byte, et stop ronde un int
réception:
stop_ronde=((reception[12]<<24)+((reception[13]& 0xFF)<<16)+((reception[14]& 0xFF)<<8)+(reception[15]& 0xFF))*1000;
//récepetion UDP reception => byte
Serial.print(stop_ronde); //stop ronde => long int
donc résumé: 2 problèmes !!
- reception:
normalement 0 => max int actuelle 0 => 255 max
-*1000 long int
normalement 0 => max long int actuelle 0 => 32 000
Je sèche la..
Skizo !
modif_para_ronde[12]=byte(stop_ronde)>>24;
le cast est fait avant le décalage
Je pense que ce que tu voulais faire c'était plutôt ça;
modif_para_ronde[12]=(byte)(stop_ronde>>24);
stop_ronde=((reception[12]<<24)+((reception[13]& 0xFF)<<16)+((reception[14]& 0xFF)<<8)+(reception[15]& 0xFF))*1000;
Je crois comprendre que reception est un tableau de byte donc convertir en unsigned long avant de décaler.
stop_ronde=(((unsigned long)reception[12]<<24)+(((unsigned long)reception[13]& 0xFF)<<16)+(((unsigned long)reception[14]& 0xFF)<<8)+((unsigned long)reception[15]& 0xFF))*1000L;
Edit : ajout du L à la constante
hum, pour le premier je suis d'accord je vais aller voir, pour le deuxième je suis plus retenu mais je vais aller voir ça dessuite !
Skizo !
fdufnews:
Je pense que ce que tu voulais faire c'était plutôt ça;
modif_para_ronde[12]=(byte)(stop_ronde>>24);
Je crois comprendre que reception est un tableau de byte donc convertir en unsigned long avant de décaler.
stop_ronde=(((unsigned long)reception[12]<<24)+(((unsigned long)reception[13]& 0xFF)<<16)+(((unsigned long)reception[14]& 0xFF)<<8)+((unsigned long)reception[15]& 0xFF))*1000L;
alors alors, problème résolue, les solutions sont les suivante:
modif_para_ronde[12]=byte(stop_ronde>>24);
et
stop_ronde=( long(reception[12]<<24)+long((reception[13]& 0xFF)<<16)+long((reception[14]& 0xFF)<<8)+long(reception[15]& 0xFF))*1000;
[/quote]
voilou merci beaucoup fdufnews
Vite fait bien fait =)
Skizo !
voilou smiley merci beaucoup fdufnews
De rien
Remarque: c'est à dessein que j'ai utilisé des unsigned long pour les opérations. C'est un bonne pratique si tu ne veux pas avoir de problème avec le décalage à droite qui suivant les machines décale soit des 0, soit le bit de signe.
Right shifting an unsigned quantity always fits the vacated bits with zero.
Right shifting a signed quantity will fill with bit signs (arithmetic shift'') on some machines and with 0-bits (
logical shift'') on others.
(extrait de The C Programming Language K&R)
Donc dans le doute des unsigned
ok ok, merci de ton aide.
Skizo !
skizoh:
alors alors, problème résolue, les solutions sont les suivante:
Suivantes ou précédentes ? :*
Complétement Skizo.
on ce moque pas !!!! xD le principale c'est qu'il y est plus de problème ^^
Skizoooohohohoho !