test de condition if verifié uniquement dans la boucle principale?
develdelphi
Messages postés97Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2009
-
9 mars 2008 à 19:59
develdelphi
Messages postés97Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2009
-
17 mars 2008 à 00:06
Bonsoir,
Je poste ce topic ici car programmé en C , il s'agit je pense de probleme de compilateur ou d'algorithme (definition de variables,..).
Il s'agit de la programmation d'un système à microcontrolleur.
Mon probleme est que la condition : if(SQUELCH==0x00) detectée dans la boucle principale ne se detecte pas si elle est utilisé dans des boucles imbriquées.
comme vous pouvez le voir ici dans le code resumé:
if(SQUELCH==0x00) //ICI condition se detecte bien
{
PORTG=PORTG & 0b11110111;
lcd_gotoxy(17,0);lcd_putsf(" S");
...
}
...
if(condition1)
{
..
if(condition2)
{
switch(KEY)
{
case1:
case5:
case3:
....
while(1)
{
.....
switch(KEY)
{
case4: //button up
case8: //button down
case12: //button validation for outgoing
}
if(SQUELCH==0x00) //ICI pas detecté alors que signal
// existant
{
PORTG=PORTG & 0b11110111;
lcd_gotoxy(17,0);lcd_putsf(" S");
}
if(KEY==12)break;
} KEY=0;
case7:
} KEY=0;
}//condtion2
}//condtion1
}//while(1)
}//main
FIN CODE
Est ce normal? Pourtant il s'agit de variables globales définies avant le main()
J'ai essayé les conditions suivantes en remplacant le "if(SQUELCH==0x00)"
par "if(SQV==0x00)"
ou par "if(PINF.0==0x00)"
Mais toujours pas de condition if detectée (car les instructions de ce bloc if ne s'executent pas)? Comment pourrais je verifier cette condition dans les boucles imbriquées, n'importe où dans le programme ?
Merci
DevelSoft
A voir également:
test de condition if verifié uniquement dans la boucle principale?
develdelphi
Messages postés97Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2009 10 mars 2008 à 13:47
Désolé erreur d'écriture de ma part le SQV est bien defini sans le point virgule
dans le programme :
#define SQV PINF.0
Donc l'erreur ne vient pas de là, je crois que c'est l'optimiseur qui doit pouvoir laisser faire le test du if(SQUELCH==0) dans la boucle imbriquée mais ne l'autorise pas. Peut être qu'il y a une autre algo ou astuce à utiliser?