Pb unsigned char

Livia -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. Livia
     
    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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    2. Livia
       
      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
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Plus rapide c'est sûr. Reste à voir si ce n'est pas impactant dans ton programme.
      0
    4. Livia
       
      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
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Peux-tu nous donner le prototype d'UARTRead() ?
      0