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:
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:
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.