Pb unsigned char

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

  1. Contributeur
    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,
    1. 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
      1. Contributeur
        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;)
      2. 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
      3. Contributeur
        Plus rapide c'est sûr. Reste à voir si ce n'est pas impactant dans ton programme.
      4. 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
      5. Contributeur
        Peux-tu nous donner le prototype d'UARTRead() ?