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

Déclaration d'une variable Hi Tech C



  1. #1
    *Baby*

    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. Publicité
  3. #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+

  4. #3
    blinbling

    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)

  5. #4
    F1TVB

    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.

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    *Baby*

    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.

    @+

  9. #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+

  10. Publicité

Discussions similaires

  1. Déclaration d'une suite de fonctions en matlab
    Par mahdi mokrane dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 12/05/2010, 15h37
  2. Déclaration d'une variable un peu spéciale en C
    Par ThiuT dans le forum Électronique
    Réponses: 6
    Dernier message: 22/05/2008, 14h59
  3. Déclaration Variable C
    Par jorg1n dans le forum Électronique
    Réponses: 6
    Dernier message: 16/10/2007, 18h01
  4. Déclaration variable en C
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 20/09/2007, 07h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.