Déclaration d'une variable Hi Tech C
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Déclaration d'une variable Hi Tech C



  1. #1
    invite7e727e46

    Déclaration d'une variable Hi Tech C


    ------

    Salut,

    Je viens de rencontrer un problème un peu bizarre.

    Dans mon code C, j'utilise une fonction :

    Code:
    unsigned char get_key()
    {
    
    unsigned char i,k,key=0;
    
    ...
    
    }

    La compilation fonction nickel.

    Au premier appel de cette fonction, pas de problème.
    Par contre au deuxième appel, la variable key (et les autres peut être aussi) n'est pas initialisée à la valeur 0 mais à la valeur qu'avait la variable key à la fin de cette même fonction lors de son premier appel.


    Bizzare non ?

    Pour y remédier, j'ai d^y faire ça :

    Code:
    unsigned char i,k,key=0;
    i=0;
    k=0;
    key=0;

    J'ai donc l'impression que le fonction de Hi Tech C ou du PIC fait que toutes les variables déclarées dans le code sont créées au démarrage du PIC et qu'après le code les utilises.

    Parce que normalement, arrivé en fin de fonction , la variable devrait être détruire et une nouvelle se crée lorsque la fonction est de nouveau rappelée.

    Si quelqu'un peut m'éclairer...


    Merci.

    -----

  2. #2
    RISC

    Re : Déclaration d'une variable Hi Tech C

    Salut,

    Quelle version du compilo HiTech utilises-tu ?
    J'ai également eu petits soucis qui ont été résolus avec la version v9.71a

    a+

  3. #3
    inviteac602306

    Re : Déclaration d'une variable Hi Tech C

    Salut. En C pour initialiser des variables a leur creation, il faut ecrire :
    Code:
    char i=0, j=0, k=0;
    Le fait que tes variables reprennent les memes valeur c`est parce que ton programme doit allouer les memes cases memoires (aux memes adresses a chaque fois). Et comme tu n'initialise pas correctement leur valeur, la variable vaut ce qu'il y avait avant a cette meme adresse .. Voila jespere ne pas dire de betises ^^ (pour un microcontrolleur en tout cas)

  4. #4
    invitea5e3e6e1

    Re : Déclaration d'une variable Hi Tech C

    Bonjour
    Avec certain compilateur il faut définir si la mémoire utilisée est en RAM ou en FLASH.
    Avec CC18
    Code:
    #pragma udata xval
    short Xseg[MAXSEG];
    réserve de la mémoire RAM.
    Elle est remise à 0 à l'init.

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

    Re : Déclaration d'une variable Hi Tech C

    La solution proposée par blinbling fonctionne. C'est vrai qu'il est logique d'indiquée la valeur d'initialisation à toutes les variables.

    Merci beaucoup.

    @+

  7. #6
    RISC

    Re : Déclaration d'une variable Hi Tech C

    Salut,

    En fait, cela dépend beaucoup du compilateur...
    En ANSI C "strict", le compilateur n'est pas censé pré-initialiser les variables globales uniquement déclarées.
    Cependant, beaucoup de compilateurs le font par défaut. Il existe souvent une option qui permet de dire au compilateur de pré-initialiser à 0 les variables déclarées ou non (cela évite les erreurs de pointeurs mal ou non initialisés .
    Pour ce qui est des variables locales, si elles sont déclarées en "static" elles existent en permanence dans la RAM. Au premier passage elles ont la valeur qui leur a été affectée et ensuite entre 2 appels de fonctions elles préservent leur valeur.
    Les variables locales classiques n'existent que pendant la durée de vie de la fonction. Elles sont généralement crées dynamiquement dans la pile des paramètres qui est accédée par le "frame pointer". Elles ne sont bien sûr pas visibles en dehors de la fonction.
    Dans MPLAB, ont voit alors la mention "out of scope" ce qui est correct en dehors des points d'arrêt dans la fonction.

    a+

Discussions similaires

  1. Déclaration d'une suite de fonctions en matlab
    Par invitecac02c44 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 12/05/2010, 16h37
  2. Déclaration d'une variable un peu spéciale en C
    Par inviteba7165a5 dans le forum Électronique
    Réponses: 6
    Dernier message: 22/05/2008, 15h59
  3. Déclaration Variable C
    Par invite3c35244f dans le forum Électronique
    Réponses: 6
    Dernier message: 16/10/2007, 19h01
  4. Déclaration variable en C
    Par invite3c35244f dans le forum Électronique
    Réponses: 7
    Dernier message: 20/09/2007, 08h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...