Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Tableau en C



  1. #1
    Pilou81

    Tableau en C


    ------

    Bonjour, je débute en c? Je cherche à faire un tableau pour faire l'acquisition d'un CAN puis ensuite pouvoir manipuler son contenu comme si il s'agissait d'une variable de manière à faire la conversion du CAN.
    Voici en gros ce que je veux mais mon compilateur bloque au niveau de la multiplication du tableau, pouvez-vous m'aidez?:
    Code:
    long tableau[19], calcul;
    
    
    void main (void){
    tableau[19]=1;      //récup des données du CAN dans registre tableau
    tableau[18]=0;
    .
    .
    .
    calcul = tableau * 1953;  //conversion CAN (* par LSB)
    calcul = calcul /50000;
    }

    -----

  2. Publicité
  3. #2
    invite765732342432
    Invité

    Re : Tableau en C

    Deux erreurs:
    - si ton tableau est déclaré en temps que "long tableau[19]" ça veut dire qu'il y a 19 cases, et comme la première case a le numéro 0, il n'existe pas de case n°19 => tableau[19]=1; plantera à l'exécution
    - pour ça: calcul = tableau * 1953; Ca n'a simplement pas de sens: en C, on ne peut pas multiplier un tableau par un entier. Il faut multiplier chaque case séparément.
    Et de toute façon, même en multipliant chaque case séparément, je ne voit pas comment le résultat pourrait être un long ! (A moins que tu ne veuilles faire la somme de chaque case ?)

  4. #3
    Pilou81

    Re : Tableau en C

    Et bien en fait je souhaite faire l'acquisition d'un CAN qui m'envoit la valeur des bits binaires 1 par 1, donc ce que je fais, je les stocke dans un registre tableau 1 par 1 puis après je souhaite faire la conversion en multipliant par le LSB, je me trompe peu être sur la nature de la variable, avez-vous une idée??

  5. #4
    Pilou81

    Re : Tableau en C

    ou bien sinon il faudrait que je puisse faire ce genre de manip en travaillant en binaire et non sur des tableaux à l'image de ce que l'on fait en language BASIC mais mon compilateur ne me l'accepte pas:

    Code:
    long tableau, calcul;
    
    
    void main (void){
    tableau.19=1;      //récup des données du CAN dans registre tableau
    tableau.18=0;
    .
    .
    .
    calcul = tableau * 1953;  //conversion CAN (* par LSB)
    calcul = calcul /50000;
    }

  6. #5
    Jack

    Re : Tableau en C

    ou bien sinon il faudrait que je puisse faire ce genre de manip en travaillant en binaire
    Aucun problème, il n'y a mieux que le C pour çà. 2 solutions:
    1) utiliser un int et faire des décalages. par exemple, en supposant que la fonction bit() renvoie la valeur du bit envoyé par le CAN et que tu aies un CAN 12 bits:
    Code:
    unsigned char bit, i;
    int val = 0; // résultat du CAN sur 12 bits
    for (i=0; i<12; i++) {
       val <<= 1; // décalage d'un bit à gauche si le 1er bit est le msb
       if (bit()) val++; // si le bit est égal à 1, on ajoute 1
    }
    2) utiliser les "bit fields" qui sont un type de structure permettant de travailler au niveau du bit:
    Code:
    typedef union{
      struct{ // permet l'accès bit à bit
        b0:1;
        b1:1;
        b2:1:
        // etc.
        b14:1;
        b15:1;
      };
      int v;  // permet l'accès à tous les bits d'un coup
    } T16;
    T16 result;
    // ...
    // après tu peux faire par exemple:
    result.v = 0;  // On met tous les bits à 0
    result.b0 = 1; // mise à 1 du bit 0;
    result.b5 ~= 1; // inversion du bit 5
    result.b12 = 0; // mise à 0 du bit 12;
    Et voilà ...
    Dernière modification par Jack ; 12/04/2010 à 18h01.

  7. A voir en vidéo sur Futura
  8. #6
    Pilou81

    Re : Tableau en C

    Bonjour, Merci

    J'ai trouver tout aussi bien: (ça fonctionne bien pour la programmation sur PIC je ne sais pas si c'est valable sur d'autres application, à voir...en tout cas ça résoud mon problème)

    Code:
    pour mettre à 1:
    variable |=0x01   //met à 1 le bit 1 de "variable"
    variable |=0x02   //met à 1 le bit 2 de "variable"
    etc
    
    Pour mettre à 0:
    variabe &=0x01  //met à 0 le bit 1 de "variable"

  9. Publicité
  10. #7
    Jack

    Re : Tableau en C

    Oui, c'est la technique classique du masque. Il reste quand même les décalages pour la réception bit à bit.
    A+

  11. #8
    lil-vince

    Re : Tableau en C

    Citation Envoyé par Pilou81 Voir le message
    Code:
    pour mettre à 1:
    variable |=0x01   //met à 1 le bit 1 de "variable"
    variable |=0x02   //met à 1 le bit 2 de "variable"
    etc
    
    Pour mettre à 0:
    variabe &=0x01  //met à 0 le bit 1 de "variable"
    Ce que tu as écris, met tous les bits sauf le bit 1 à 0 (le bit 1 garde son état)
    Pour mettre à zéro le bit 1:
    variable &= 0xFFFE;
    ou plus clair:
    variable &= ~0x01;

    Perso, j´utilise la méthode 1) du post #5 de Jack, c´est plus court et plus clair...

    ça fonctionne bien pour la programmation sur PIC je ne sais pas si c'est valable sur d'autres application, à voir...
    Le langage C n´est pas spécifique à un µC, il est compilé et donc adapté à l´µC en question...
    Si on a 2 oreilles et 1 bouche, c'est pour écouter 2 fois plus qu'on ne parle. Confucius

Discussions similaires

  1. Tableau en C
    Par flolarajasse dans le forum Électronique
    Réponses: 5
    Dernier message: 12/04/2010, 10h21
  2. tableau
    Par electroflop dans le forum Logiciel - Software - Open Source
    Réponses: 16
    Dernier message: 19/08/2009, 10h37
  3. Tableau
    Par Rann dans le forum Internet - Réseau - Sécurité générale
    Réponses: 10
    Dernier message: 15/10/2007, 13h34
Découvrez nos comparatifs produits sur l'informatique et les technologies.