Et pas une erreur!

MGU

Senior Member
Bonjour,

Sur un forum d’électronique, un débutant en picaxe m'a proposé ce code:
Code:
init:
let dirsB=%11111111;
let dirsC=%00000000;
SYMBOL sortie1=pinc.5;
SYMBOL bp1=pinb.6;

main:
debut:
sortie1=0
sortie1=0
sortie1=0
sortie1=1
sortie1=1

if bp1=1 then
sortie1=1 else
sortie1=0
endif
goto debut:

end
Il est bien sûr plein d'erreurs et d'incohérences, mais bizarrement, aucune erreur de syntaxe.
Il m'a demandé pourquoi et j'avoue ne pas savoir quoi répondre.

MM
 

BESQUEUT

Senior Member
Code,

Sur un débutant d'incohérences , une syntaxe d’électronique en forum m'a proposé ce Picaxe :

Il est bien sûr plein de pourquoi, mais savoir quoi répondre , aucune erreur de bizarrerie.
Il m'a demandé syntaxiquement et j'avoue ne pas savoir quoi induire en erreur.


Comme quoi, on peut écrire n'importe quoi tout en respectant la syntaxe, la grammaire et même la ponctuation...
 

MGU

Senior Member
Oui, mais quand même, "sortie1" est à la fois utilisé pour nommé un port:
SYMBOL sortie1=pinc.5

et comme une variable sans être nommée:
sortie1=0

alors qu'il n'est normalement pas possible d'utiliser le même nom pour les deux.

Je pense qu'ici, il y a des erreurs non détectées.

MM
 

PieM

Senior Member
Oui, mais quand même, "sortie1" est à la fois utilisé pour nommé un port:
SYMBOL sortie1=pinc.5

et comme une variable sans être nommée:
sortie1=0

alors qu'il n'est normalement pas possible d'utiliser le même nom pour les deux.

Je pense qu'ici, il y a des erreurs non détectées.

MM
Bonjour,

en fait il s'agit d'erreurs de sémantique et non de syntaxe. donc elle ne sont pas détectées.

Quand on définit sortie1 comme étant pinc.5, ce n'est pas le port qui est défini mais son état.

écrire sortie1 = 1 est parfaitement justifié, est c'est l'équivalent de high c.5

Mais cela ne fonctionne que si on a pris soin de préciser la direction des ports avant.

Ici dirsC est défini en entrée, donc ça ne peut pas fonctionner.

remplacez let dirsC=%00000000; par let dirsC=%11111111 sans préciser le dirsB et tout fonctionne.

voir ci après:
Code:
init:
'let dirsB=%00000000; inutile dans ce cas
let dirsC=%11111111;

SYMBOL sortie1=pinc.5;
SYMBOL bp1=pinb.6;

main:
debut:
sortie1=0
sortie1=0
sortie1=0
sortie1=1
sortie1=1

if bp1=1 then
sortie1=1 else
sortie1=0
endif

goto debut:
end
 

MGU

Senior Member
Bonjour,

Ce qui m'a surpris, c'est l'absence d'erreurs signalées et que la simulation tourne.
Mais j'ignorais que sortie1=0 était accepté en équivalence de high sortie1 et je comprends mieux.
merci pour cette précision

MM
 

MGU

Senior Member
Oui, évidemment bien sûr,
Et la commande outpins suit la même logique, si je comprends bien;

MM
 

PieM

Senior Member
en fait si on fait abstraction des instructions inutiles, le programme se réduit au suivant qui économise un test IF Then Else:

Code:
init:
[INDENT]let dirsC=%00100000;  
SYMBOL sortie1= pinc.5;
SYMBOL bp1= pinb.6;
[/INDENT]
debut:
   [INDENT] sortie1 = bp1 ' l'état de la sortie C.5 est egal à l'état de l'entrée B.6[/INDENT]
goto debut:
 
Last edited:

MGU

Senior Member
Merci pour ces éclaircissements, cette notation permet effectivement quelques raccourcis.

Merci aussi à BESQUEUT qui a fait du Molière en #2. Son explication est aussi très claire,.. sauf peut-être la dernière phrase.

MM
 

BESQUEUT

Senior Member
Il s'agit d'une phrase auto-explicative...
Toutefois, si vous la lisez dans ce sens, il s'agit en fait d'une phrase paradoxale :
- ou bien cette phrase est sensée, et dans ce cas, la déclaration est fausse, donc insensée...
- ou bien c'est n'importe quoi, et donc cette phrase est parfaitement sensée...
 
Top