IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Variable, local ou global ?


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Variable, local ou global ?
    Bonjour,
    j'utilise un logiciel qui se nomme LabWindows/CVI, dont le code est en C. J'ai un problème avec une de mes variables qui ne se conservent pas et qui se met à jour alors que je ne le désire pas.

    Chaque seconde, je fais apel à la fonction suivante qui doit récupérer la valeur d'un compteur, la soutrait à la valeur précedente pour n'avoir que le nombre de tour fait un 1 seconde, et la multiplie par 60 pour avoir le nombre de tour par seconde.

    Voici ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    int CVICALLBACK Timer1s (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
    {
     switch (event)
     {
      case EVENT_TIMER_TICK: 
       {
       if ( debut==1 )
       {
        frequ=(uInt32*)(data - tempon);
       }
       if ( debut==0 )
       {
        frequ=data;
        debut=1;
       }  
       tempon=data;
       SetCtrlVal(panelHandle,PANEL_DATA2,(*(int*)frequ * 60) );   
       }
       break;
     }
     return 0;
    }
    - Lorsque je passe pour la première fois, il n'y a pas d'erreur et tout fonctionne normalement. Puis j'execute le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int CVICALLBACK TimerCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
    {
     if( event==EVENT_TIMER_TICK && gTaskHandle )
     {
       //Lecture des informations
       DAQmxReadCounterScalarU32(gTaskHandle,10.0,data,NULL);
       SetCtrlVal(panelHandle,PANEL_DATA,*(int*)data);
     }
     return 0;
    }
    - Qui sert à compter mes tours en permanence. Le probleme est que lorsqu'il passe à la fonction "DAQmxReadCounterScalarU32", il me la valeur dans data ainsi que dans tempon ce qui fait que lorsque je passe dans la fonction Timer1s le rapport des 2 est nul, alors que je voudrais concerver tempon à sa valeur d'avant.
    Et si je déclare tempon en variable local de fonction Timer1s, lorsque j'en sort il me supprimer la valeur aussi.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Quelles sont les déclarations de frequ, data, tempon... Parce que le code semble hésiter sur le fait que ce sont des pointeurs ou pas
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Les 3 variables sont du type uInt32 *. Car cela m'est demandé pour la variable data, et j'ai donc modifié les autres ainsi que le programme pour avoir les memes types de variables, et ainsi espérer ne pas avoir de problème.

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Dans ce cas, ceci n'a apparemment aucun sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        frequ=(uInt32*)(data - tempon);
      .... 
       SetCtrlVal(panelHandle,PANEL_DATA2,(*(int*)frequ * 60) );
    Car cela m'est demandé pour la variable data
    Probablement, data doit être un uInt32 (et les autres aussi) et l'appel doit alors être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       DAQmxReadCounterScalarU32(gTaskHandle,10.0,&data,NULL);
       SetCtrlVal(panelHandle,PANEL_DATA,data);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je vous remercie, à force de changer de type de variables X fois, j'ai du mettre des pointeurs un peu partout. Je viens de nettoyer tout cela, et par la meme occasion ca à reglé mon problème.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] transformer une variable local en global d'une fonction
    Par bibed dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/11/2009, 23h04
  2. Réponses: 7
    Dernier message: 15/11/2007, 15h41
  3. Réponses: 2
    Dernier message: 30/09/2007, 15h35
  4. variables locales ou globales?
    Par molesqualeux dans le forum C
    Réponses: 20
    Dernier message: 10/11/2005, 00h03
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo