Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Conditions des Tests par le compilateur
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir à tous,
Je me pose la question suivante:
Que font exactement nos compilateurs quand ils tombent sur un test à rallonge . J'entends par la , sortent-ils à la premiére condition fausse ou est ce qu'ils les passent toutes en revues obligatoirement ?
Par exemple voici un test que je fais dans un programme :
si le premier caractère lu, n'est pas un N , continu-t-il a tester ou sort-il tout de suite ?
Merci
Je me pose la question suivante:
Que font exactement nos compilateurs quand ils tombent sur un test à rallonge . J'entends par la , sortent-ils à la premiére condition fausse ou est ce qu'ils les passent toutes en revues obligatoirement ?
Par exemple voici un test que je fais dans un programme :
Code : Tout sélectionner
//-------------------- On recoit "NON" ---------------------------
if ( ((SMS_Recu[0]=='N')||(SMS_Recu[0]=='n')) && ((SMS_Recu[1]=='o')||(SMS_Recu[1]=='O')) && ((SMS_Recu[2]=='N')||(SMS_Recu[2]=='n')) )
{
blablabla....
}
si le premier caractère lu, n'est pas un N , continu-t-il a tester ou sort-il tout de suite ?
Merci
Conditions des Tests par le compilateur
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
si le premier caractère lu, n'est pas un N , continu-t-il a tester ou sort-il tout de suite ?
l'evaluation se faisant de gauche à doite pour la priorité des tests
je dirais qu'il doit evaluer les 2 conditions 'N' OU 'n' , si c'est vrai, on continue le test
si ce n'est ni un 'N' , ni un 'n' , Oui, il sort de suite
ces 2 conditions appartenant à un ET ( des 3 combinaison formant le NON ) qui ne sera donc valide.
C'est pas tres evident à expliquer !
ou alors via d'autres possibilites de test : (plus comprehensible)
avec toupper => test toutes les combinaisons des 3 lettres, apres avoir tout mis en majuscules
avec strstr si on considere qu'au depart, tout est en majusules ou tout est en minuscules
Code : Tout sélectionner
while(1)
{
UART1_Read_Text(buffer1,"\n",20);
UART1_Write_CText("\r\nRecu : ");
UART1_Write_Text(buffer1);CRLF1();
if ((toupper(buffer1[0])=='N') && (toupper(buffer1[1])=='O') && (toupper(buffer1[2])=='N'))
{
UART1_Write_CText("Je dis NON \r\n");
}
else
{
UART1_Write_CText("What ? \r\n");
}
if ((strstr(buffer1,"NON")) || (strstr(buffer1,"non")))
{
UART1_Write_CText("Je re-dis NON \r\n");
}
else
{
UART1_Write_CText("re-What ? \r\n");
}
*(buffer1)=0;
}
Code : Tout sélectionner
Recu : NON
Je dis NON
Je re-dis NON
non
Recu : non
Je dis NON
Je re-dis NON
NOn
Recu : NOn
Je dis NON
re-What ?
nON
Recu : nON
Je dis NON
re-What ?
Conditions des Tests par le compilateur
Bonjour
Toujours pour optimiser ton code(je sais encore et encore) je te propose cela:(plutôt que de passer encore et encore par une autre fonction )
Un regard sur la table ASCII. OUI regarde la table ascii.
Si c'est uniquement de l’alphabétique:si l'on veut que des majuscules il suffit de faire:
Pour des minuscules il suffit de faire:
s'il on veut avoir aussi le code ascii de 0 à "A" il suffit de faire un test: (cela va nettement raccourcir ton code sur ton projet envoi de SMS )
SI tu n'arrives pas a faire cela par #ASM .Tu peux déclarer SMS_Recu en structure 8 bits et faire la manip sur le bit 5 et le test sur bit 6
A+
PS: il suffit d’insérer le bout de code juste après la lecture UART . A toi de voir comment faire le lien. Perso écriture nouvelle fonction: lecture UART avec insertion du bout de code, faire test et manip bit SUR le registre RCREG, avant transfert dans SMS_Recu . Comme dit plus haut à toi de voir.
Toujours pour optimiser ton code(je sais encore et encore) je te propose cela:(plutôt que de passer encore et encore par une autre fonction )
Un regard sur la table ASCII. OUI regarde la table ascii.
Si c'est uniquement de l’alphabétique:si l'on veut que des majuscules il suffit de faire:
Code : Tout sélectionner
BCF _SMS_Recu, 5 ;mise a zero du bit 5
Pour des minuscules il suffit de faire:
Code : Tout sélectionner
BSF _SMS_Recu, 5 ;mise a 1 du bit 5
s'il on veut avoir aussi le code ascii de 0 à "A" il suffit de faire un test: (cela va nettement raccourcir ton code sur ton projet envoi de SMS )
Code : Tout sélectionner
#asm
BTFSS _SMS_Recu, 6
GOTO sortie ;ascii <0x40
BCF _SMS_Recu, 5
BCF _SMS_Recu+1,5
BCF _SMS_Recu+2,5
sortie:
#endasm
if ((SMS_Recu[0]=='N') && (SMS_Recu[1]=='O') && (SMS_Recu[2]=='N'))
{
NB=1;
}
SI tu n'arrives pas a faire cela par #ASM .Tu peux déclarer SMS_Recu en structure 8 bits et faire la manip sur le bit 5 et le test sur bit 6
A+
PS: il suffit d’insérer le bout de code juste après la lecture UART . A toi de voir comment faire le lien. Perso écriture nouvelle fonction: lecture UART avec insertion du bout de code, faire test et manip bit SUR le registre RCREG, avant transfert dans SMS_Recu . Comme dit plus haut à toi de voir.
Retourner vers « Généralités sur les PICs »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 57 invités