begin process at 2012 02 10 11:24:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

test de condition if verifié uniquement dans la boucle principale?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

test de condition if verifié uniquement dans la boucle principale?

dimanche 9 mars 2008 à 19:59:00 | test de condition if verifié uniquement dans la boucle principale?

develdelphi

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

CODE:

*variables globales*/
...
 
#define SQV PINF.0;
 
...
 
unsignedchar SQUELCH;
 
...
 
main()
{
 
....
 
while(1)
{
..
 
if(test==0x01)
{
SQUELCH=SQV;
PORTG=PORTG & 0b11110111;
...
}
 
 
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
dimanche 9 mars 2008 à 20:11:42 | Re : test de condition if verifié uniquement dans la boucle principale?

BruNews

Administrateur CodeS-SourceS
Quand une condition n'est pas détectée, c'est simplement que cette condition n'est pas bonne, faut revoir l'algo.

ciao...
BruNews, MVP VC++
lundi 10 mars 2008 à 09:43:30 | Re : test de condition if verifié uniquement dans la boucle principale?

develdelphi

Bonjour,

Voila il paraîtrait que l'optimiseur neglige ce test. Mais pour contre-carré ça j'ai déclaré la variable SQUELCH cette fois en volatile :
 
volatile unsigned char SQUELCH;

et j'ai deplus ajouté 4 x d'affilés la condition de test là où il n'est pas détecté.

Mais toujours rien a faire la condition est bien existante mais elle n'est pas détécté.

Merci
lundi 10 mars 2008 à 09:53:10 | Re : test de condition if verifié uniquement dans la boucle principale?

BruNews

Administrateur CodeS-SourceS
Pourquoi tu n'affiches pas la valeur avant le IF ?
Il n'y aurait ainsi plus rien à discuter.

ciao...
BruNews, MVP VC++
lundi 10 mars 2008 à 10:02:11 | Re : test de condition if verifié uniquement dans la boucle principale?

develdelphi

En fait je n'ai pas de console debug, j'ai uniquement une affichage sur un LCD
20x4 formatté.

Merci

lundi 10 mars 2008 à 12:45:22 | Re : test de condition if verifié uniquement dans la boucle principale?

vicenzo

Membre Club
ton define est erroné !

#define SQV PINF.0;

Enlève ce point vurgule qui fausse le test !

lundi 10 mars 2008 à 13:47:57 | Re : test de condition if verifié uniquement dans la boucle principale?

develdelphi


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?

Merci
lundi 17 mars 2008 à 00:06:02 | Re : test de condition if verifié uniquement dans la boucle principale?

develdelphi



Re,

Désolé pour l eretard, voici la solution apporté etant donné que la variable peut ne pas être testé
compte tenu de l'optimiseur,

la solution est d'appeler une nouvelle fonction squelch dans la boucle imbriquée: 

Unsigned int squelch(int test)
{
    switch(test)
    {case 0x01 : return SQV ;
        case 0x00 : return SQU ;
        defaults : return SQV ;
    }
}


Merci



Cette discussion est classée dans : condition, 0x00, if, squelch, portg


Répondre à ce message

Sujets en rapport avec ce message

condition [ par damoun007 ] salut a tous,j aurais voulu savoir la difference entre cela:{ int a; if (a=5); ....} et si on met le 5 entre apostrophes ou guillemets. Merci c'est quoi ca #if 1 [ par ifren ] salut, oui je sais que je vous ennui avec mais c'est quoi ca ou encors, comment ca marche...ex mais parce que j'ai que 15 jours que j'ai embrasser la boucle avec for,petite question! [ par chris5874 ] bonjour à tous,j'aimerai savoir si dans une boucle for(initialisation;condition;expression),bref,une boucle normale,j'aimerai savoir si la condition e Blit de surface avec SDL [problème d'affichage] [ par cyberlewis ] Bonjour,Voilà j'ai fait un code (jeu vidéo SDL),j'arrive à afficher la partie que je veux (tiles, tiles.bmp) dans screen qui est affichée à l'écran, p Qu'est-ce que l'on doit faire pour faire une condition [ par DOHANESSIAN ] Salut, je suis un tout petit newbie et j'aimerais savoir comment faire une condition. En fait c'est pour faire genre:Si vous êtes un mec tapez 1 puis Programme en attente d'une condition... [ par kod32 ] Bonjour,je souhaiterais mettre mon programme (serveur TCP) en attente pour vérifier une condition.J'utilise la détection d'une connection internet (ma condition de finitude d une boucle infinie [ par sebby_06200 ] bonjourj ai un soucis et je pense que vous pouvez m aiderj ai besoin d'envoyer une infinité de signaux par l'intermédiaire d un port sérieet il faut q Probleme de char [ par ph0ton ] J'ai un probleme avec une condition.Je m'explique :J'ai une variable : char Fonction[30];Je rempli la variable grace a la lecture d'un fichier.Ensuite Lire,condition binaire [ par Suisse00 ] J'essai de faire en sorte de pouvoir récuprer une valeur binaire dans un fichier pour savoir quelle est sa valeur pour la comparer.Je ses seulement qu un tableau [ par oeckenshield ] j'ai une tableau avec condition de saisie,j'arrive à poser les condition mais, j'arrive pas à effacer la derniere saisie cad la saisie erroner.


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales