Pb unsigned char

Fermé
Livia - 27 mars 2013 à 20:45
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 30 mars 2013 à 12:20
Bonjour,

je debute en c.

Je recois des donnees d'une liaison rs232 que je mets dans une variable unsigned pour le traitement.

quand je teste si la variable est vide, ca me repond tout le temps non pourquoi?

//declaration
unsigned char tampon[256];
unsigned char data[256];
int size;

UARTRead(portrs232, data, size); //lecture de la donnee rs232
memcpy(tampon, data, size); //copy dans le tampon

int tamponRempli = sizeof(tampon); // taille du tampon 

if(tamponRempli <=0)
{
    //traitement si vide;
    printf("tampon vide");
}
else {
    //traitement si plein;
    printf("tampon plein");

    //vider le tampon
    //comment vider ?
}


tampon est toujours plein, pourquoi ??
meme si je ne recois pas de donnees (au depart)
tampon n'est pas vide

comment verifier la taille du tampon ?
ou et le reinitailiser a vide


merci

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
27 mars 2013 à 21:32
sizeof(tampon) vaut la taille du tableau soit 256.
Il faut savoir qu'en C, dès lors que tu déclares une variable elle n'est pas vide. Elle est soit initialisée à 0 automatiquement, soit elle contient n'importe quelle valeur, soit elle contient la valeur que tu as mise.
En revanche, ce que tu peux faire, c'est créé un compteur qui sera incrémenté dès que tu rajouteras une valeur au tableau.

Attention, size n'est pas initialisé...
Cdlt,
0
Merci

je viens de comprendre

size est normalement rempli par la fonction UARTRead

j'initailise ma variable tampon maintenant
unsigned char tampon[256] = {0}


et je vais tester si la premiere valeur vaut 0
si !=0 je traite
et remise a 0
memset(tampon, 0, 256);



merci bcp
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
27 mars 2013 à 22:25
size est normalement rempli par la fonction UARTRead
Je ne connais pas cette fonction, mais avec l'appel UARTRead(portrs232, data, size); size ne pourra pas être modifié. Il faut passer par un pointeur.

et je vais tester si la premiere valeur vaut 0
C'est une possibilité.

As-tu vraiment besoin de tout remettre à 0 (memset(tampon, 0, 256);) le '\0' indique la fin d'une chaîne. Donc *tampon=0; suffirait (ou tampon[0]=0;)
0
merci
mais dans le code j'ai oublie de mettre

size = UARTBufferSize(portrs232);


je vais utiliser ta version pour remettre a zero
je pense que c'est plus rapide
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
28 mars 2013 à 21:00
Plus rapide c'est sûr. Reste à voir si ce n'est pas impactant dans ton programme.
0
J'ai un pb a la compilation :(
la fonction UARTRead renvoie une data signed
or je recois des donnees unsigned sur le rs232 pour traitement

comment je dois typer ?

merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
29 mars 2013 à 07:22
Peux-tu nous donner le prototype d'UARTRead() ?
0