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

Déclaration Variable C



  1. #1
    jorg1n

    Déclaration Variable C


    ------

    Bonjour,
    j'ai un petit problème, après avoir réalisé un programme en C sur PIC 18F4682
    sous MPLAB et le compilateur C18, je me suis aperçu que ce fichier était vraiment volumineu, j'ai donc décidé de regrouper certains sous programmes et de les inclures dans de nouveaux fichiers sources.
    J'ai donc créé de nouveaux fichiers en C que j'ai inclut dans mon projet et je les appelle par le biais d'un fichier .h que j'ai créé et définit dans mon main.c, voici un exemple de déclaration de ss prog dans mon .h:
    extern void init_uc(void); // Référence Initialisation.C
    mais voila je rencontre un problème avec une variable, je ne sais pas comment la déclarer et ou la déclarer, elle est utilisé au début dans un sous programme, mais elle est utilisé par la suite dans mon main, je ne sais pas du tout comment faire...Je m'emmèlle les pinceaux
    J'hésite mème à remettre mon programme comme il était avant
    Je vous remercie de votre aide
    Nico

    -----

  2. Publicité
  3. #2
    Seb.26

    Re : Déclaration Variable C

    Bonjour,

    vaste question de l'organisation des fichiers en C ...

    D'un manière generale : interdit toi de mettre du code ou des declaration de variables dans un .h, c'est pas fait pour ça.

    Un .h ( header ) et fait pour "rendre visible" de l'exterieur les fonctions et les variables qui doivent être vus par les autres fonctions de ton appli.

    Par exemple, dans RS232.c, tu declare des FIFO ( Fifo_Tx, Fifo_Rx ), des fonctions ( GetChar(), PutChar(), set_bit_it, get_bit_it, enable_tx_it ), des variables ( timeout, toto, tutu ) ... ect ...
    ( PS:j'ai tout mis au pif ! )

    Mais dans ton .h, tu ne donne acces qu'aux fonctions qui sont utiles ( via les prototypes de fontions et les "extern" pour les variables )
    put_c et get_c par exemple, eventuelement un acces aux Fifo, mais en aucun cas, les autres modules ne doivent savoir par exemple qu'il existe une fonction set_bit_it, et ils ne doivent pas pouvoir appeler cette fonction ! donc son prototype ne va pas dans le .h ...

    De cette façon, une autre tache qui devrait envoyer un byte sur la rS232 incluera RS232.h, et aurra donc acces à put_char() ...



    C'est plus clair ?!

  4. #3
    jorg1n

    Re : Déclaration Variable C

    Oui un oeu plus, mais le seul problème, c'est que je suis un débutany dans la prog..ma variable par ex:
    toto que j'utilse au départ dans un prototype je la déclare comment dans mon fichier.c et comment je fais appel a elle dans mon main?ai-je besoin?
    je te remercie de ton aide

  5. #4
    Seb.26

    Re : Déclaration Variable C

    Ok, alors un exemple simple ...

    Voici le fichier main.c de ton prog :
    Code:
    #include "RS232.h"
    #include "keyboard.h"
    
    void main()
    {
      while(1)
      {
        char key = Keyboard_GetKey();
        if( key!=0 && RS232_state=RS232_FREE )
        {
            RS232_PutChar( key );
        }
      }
    }
    Ci dessous le fichier RS232.c
    Code:
    #include "stdio.h"
    
    char toto;
    char RS232_state = 0;
    
    void RS232_GetC()
    {
      // ... ici plein de code ...
    }
    
    void RS232_PutC(char data)
    {
      // ... ici plein de code aussi ...
    }
    
    void Set_bit_IT()
    {
      // ... ici plein de code ...
    }
    
    // encore d'autre fonctions et variables ...
    Et voici le fichier RS232.h qui correspond ...

    Code:
    extern char RS232_state;
    
    #define RS232_FREE 0
    #define RS232_USED 1
    
    void RS232_GetC(void);
    void RS232_PutC(char data);
    Tu n'expose à l'exterieur que les fonctions utiles, le reste est privé ... personne ne peut appeler directement la fonction Set_bit_IT(), ou encore modifier la valeur de RS232_state ...

    Tu comprends ?

  6. A voir en vidéo sur Futura
  7. #5
    jorg1n

    Re : Déclaration Variable C

    C'est bon j'ai compris , avec un exemple , ça va tout de suite mieux.
    je te remercie
    A bientot et bonne continuation
    Nicolas

  8. #6
    jorg1n

    Re : Déclaration Variable C

    Une autre question:
    si on définit un autre .h => lcd.h
    et que l'on souhaite réutiliser notre variable RS232_state dedans, devons nous mettre dans le lcd.h : extern char RS232_state;
    et dans notre lcd.c : char RS232_state
    je pense que c'est faux, mais comment faisons nous le transfert de la variable?
    Je mis perd meme si jai compris ton exemple...
    Merci encore

  9. Publicité
  10. #7
    Seb.26

    Re : Déclaration Variable C

    Alors ...

    petit rappel : on utilise pas une variable dans un .h ... une variable est utilisée dans un .c ... un .h ne contient pas de code ...

    Donc si tu veux utiliser RS232_state dans lcd.c, tu ajoute #include "RS232.h" en tête de lcd.c ...

    c'est tout bête ...

    L'avantage d'être "propre", c'est que tu pourra re-utiliser tes modules simplement dans un autre programme ...

    Par exemple, fais toi un module "Fifo.h/.c" ... et tu pourras l'utiliser partout ...

Discussions similaires

  1. Statistiques : lien entre variable binaire et variable continue
    Par pounette1 dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 10/02/2010, 20h34
  2. Déclaration variable en C
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 20/09/2007, 07h45
  3. [Législation] Déclaration de site archéologique
    Par frederic38 dans le forum Archéologie
    Réponses: 3
    Dernier message: 13/02/2007, 13h19
  4. La déclaration célèbre de Feynman et vous
    Par merou dans le forum Physique
    Réponses: 16
    Dernier message: 02/08/2005, 23h15
  5. pb de declaration
    Par edje dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 13/08/2004, 22h20
Découvrez nos comparatifs produits sur l'informatique et les technologies.