Voici une réponse tardive ( mieux vaut tard que jamais ) à la question posée par emge25 le 18/04/2012 dans son post " infos sur le timing ".
Malheureusementt elle ne s' adresse qu' aux possesseurs d' un analyseur logique ( ici un Scanalogic2 ) et d' un terminal avec clavier ( ici un Minitel 1B ).
Cette méthode peut-être utilisée quelle que soit la complexité du code et quel que soit le modèle de Picaxe ( ici un 20M2 ) sur lequel on aura réservé une entrée et une sortie à cet effet..
* Quelques résultats obtenus par cette méthode ( les résultats sont en millisecondes )
1/ Temps d'exécution d' une instruction.
1,a/ pause
pause 10 ---> 12,23
pause 50 ---> 52,28
pause 100 --->102,27
pause 200 --->202,25
1,b/ toggle
toggle C.0 ---> 2,34
toggle C.0 : toggle C.1 ---> 2,84
toggle C.0 : toggle C.1 : toggle C.2 ---> 3,34
1,c/ low / high
low C.0 ---> 2,31
low C.0 : low C.1 ---> 2,74
low C.0 : low C.1 : low C.2 ---> 3,17
high C.0 : low C.1 : low C.2 --->3,17
high C.0 : high C.1 : high C.2 --->3,17
2/ Temps d' exécution d' une boucle ( incrémenter b3 dix fois )
2,a/ do ... loop until
b3=0 : do : inc b3 : loop until b3=10 ---> 19,99
2,b/ for ... next
for n = 1 to 10 : inc b3 : next n ---> 12,56
3/ Temps d' exécution d' un branchement ( s'il y a match, exécution d' une sous routine contenant 'pause 100' )
3,a/ Select case
match au premier choix ---> 104,57
match au second choix ---> 106,13
match au 3ème ---> 107,88
match au 4ème ---> 109,53
match au 5ème ---> 111,28
3,b/ On n gosub sub0,sub1,sub2,sub3,sub4
n = 0 --->116,05
n = 1 ---> 117,94
n = 2 ---> 119,92
n = 3 ---> 121,70
n = 4 ---> 122,90
3,c/ branch n,(sub0,sub1,sub2,sub3,sub4)
n = 0 ---> 125,04
n = 1 ---> 126,80
n = 2 ---> 128,57
n = 3 ---> 130,34
n = 4 ---> 131,75
* Méthode de mesure.
L' analyseur logique va nous servir de chronomètre
Il est branché sur la broche d'entrée du Picaxe ( channel 1 par exemple ) et sur la broche de sortie ( channel 2 par exemple ). L'échantillonnage est choisi à 1 Mhz ( soit 1 us de résolution ).
Pour connaître la durée d' exécution d' une instruction, d' un bloc d' instructions ( nombre et imbrications non limité ) voire de tout un programme, il suffit de la ou les placer entre une instruction serin et une instruction serout.
Exemple :
On lance le programme. Il s' arrêterra en attente d' un caractère. Ce caractère, tapé au clavier, sera enregistré sur channel 1 ( serin ), puis la ou les instructions à mesurer seront exécutées et enfin l' analyseur enregistrera la réponse du Picaxe ( serout ) sur channel 2.
Le trigger de l' analyseur étant calé au zéro de l' échelle des temps, le temps d' exécution recherché est égal à la mesure du temps au premier flanc de la trame serout sur channel 2 diminué du temps d' exécution de serin.
Dans le cas de l' utilisation d' un Minitel, ce temps d' exécution de serin est égal à 1 / 1200 * 10 = 8,333 ms ( 10 bits à 1200 bps ). C' est ce temps qu' il faut retrancher.
On peut aussi ' saucissonner ' le code en y plaçant plusieurs serout. Dans ce cas retrancher, en plus, autant de fois 8,333 ms qu' il y a de trames serout précédant celui mesuré.
Les trames échangées comportant toujours un bit ' start ' il n'y a aucune ambiguité.
Commentaires et avis bienvenus ( pas de demandes de mesures svp ).
S'il nous suit toujours, il trouvera ci-dessous quelques infos mais, ne connaissant pas son code, la meilleure façon est qu' il fasse sa mesure lui-même. Pour cela, je propose une méthode pratique et fiable pour réaliser ces mesures.Où peut on trouver des informations sur la durée des diverses commandes pour d'une part optimiser le programme et
d'autre part, évaluer avant essai, l'ordre de grandeur de la durée des différentes boucles d'un programme.
Malheureusementt elle ne s' adresse qu' aux possesseurs d' un analyseur logique ( ici un Scanalogic2 ) et d' un terminal avec clavier ( ici un Minitel 1B ).
Cette méthode peut-être utilisée quelle que soit la complexité du code et quel que soit le modèle de Picaxe ( ici un 20M2 ) sur lequel on aura réservé une entrée et une sortie à cet effet..
* Quelques résultats obtenus par cette méthode ( les résultats sont en millisecondes )
1/ Temps d'exécution d' une instruction.
1,a/ pause
pause 10 ---> 12,23
pause 50 ---> 52,28
pause 100 --->102,27
pause 200 --->202,25
1,b/ toggle
toggle C.0 ---> 2,34
toggle C.0 : toggle C.1 ---> 2,84
toggle C.0 : toggle C.1 : toggle C.2 ---> 3,34
1,c/ low / high
low C.0 ---> 2,31
low C.0 : low C.1 ---> 2,74
low C.0 : low C.1 : low C.2 ---> 3,17
high C.0 : low C.1 : low C.2 --->3,17
high C.0 : high C.1 : high C.2 --->3,17
2/ Temps d' exécution d' une boucle ( incrémenter b3 dix fois )
2,a/ do ... loop until
b3=0 : do : inc b3 : loop until b3=10 ---> 19,99
2,b/ for ... next
for n = 1 to 10 : inc b3 : next n ---> 12,56
3/ Temps d' exécution d' un branchement ( s'il y a match, exécution d' une sous routine contenant 'pause 100' )
3,a/ Select case
match au premier choix ---> 104,57
match au second choix ---> 106,13
match au 3ème ---> 107,88
match au 4ème ---> 109,53
match au 5ème ---> 111,28
3,b/ On n gosub sub0,sub1,sub2,sub3,sub4
n = 0 --->116,05
n = 1 ---> 117,94
n = 2 ---> 119,92
n = 3 ---> 121,70
n = 4 ---> 122,90
3,c/ branch n,(sub0,sub1,sub2,sub3,sub4)
n = 0 ---> 125,04
n = 1 ---> 126,80
n = 2 ---> 128,57
n = 3 ---> 130,34
n = 4 ---> 131,75
* Méthode de mesure.
L' analyseur logique va nous servir de chronomètre
Il est branché sur la broche d'entrée du Picaxe ( channel 1 par exemple ) et sur la broche de sortie ( channel 2 par exemple ). L'échantillonnage est choisi à 1 Mhz ( soit 1 us de résolution ).
Pour connaître la durée d' exécution d' une instruction, d' un bloc d' instructions ( nombre et imbrications non limité ) voire de tout un programme, il suffit de la ou les placer entre une instruction serin et une instruction serout.
Exemple :
Code:
;Mesure de temps d' exécution ---> une à n instructions simples
;20M2 + Minitel 1B + Analyseur logique ( Scanalogic-2-pro )
;==============================================================================
Init:
high B.1 ;place la ligne d' émission en un ( état repos )
reception:
low C.0:high C.1:high C.2 ;état initial des sorties
serin C.7,T1200,b2 ;attente de reception d' un caractère
toggle C.0 ;inversion de la sortie
toggle C.1 ; "
toggle C.2 ; "
serout B.1,T1200,($0C) ;efface l' écran, curseur en L1xC1
goto reception
Le trigger de l' analyseur étant calé au zéro de l' échelle des temps, le temps d' exécution recherché est égal à la mesure du temps au premier flanc de la trame serout sur channel 2 diminué du temps d' exécution de serin.
Dans le cas de l' utilisation d' un Minitel, ce temps d' exécution de serin est égal à 1 / 1200 * 10 = 8,333 ms ( 10 bits à 1200 bps ). C' est ce temps qu' il faut retrancher.
On peut aussi ' saucissonner ' le code en y plaçant plusieurs serout. Dans ce cas retrancher, en plus, autant de fois 8,333 ms qu' il y a de trames serout précédant celui mesuré.
Les trames échangées comportant toujours un bit ' start ' il n'y a aucune ambiguité.
Commentaires et avis bienvenus ( pas de demandes de mesures svp ).