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.