Comptage de cycles PIC 12F508

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From French to

Threaded View
Bonjour,
Je cherche à vérifier mon calcul théorique du temps d'exécution d'une
portion de code assembleur PIC12F508.
J'utilise l'assembleur du MPLAB v8.46 (le dernier) et je n'ai pas trouvé de
compteur de cycles utilisable en mode debug.
Savez-vous s'il existe un tel compteur ou connaissez-vous une astuce pour
savoir combien de cycles se déroulent entre 2 points du code ?
Merci.
Pascal.


Re: Comptage de cycles PIC 12F508
On Apr 9, 5:54A0%pm, "CoolAuMiers"

Quoted text here. Click to load it

Le plus simple est d'utiliser un compteur interne dont l'horloge
est dE9%rivE9%e directement du quartz d'horloge du PIC (bonne prE9%cision)
Tu valides ce compteur en entrE9%e de ton code, et tu le dE9%valides en
sortie.
Si dE9%passement de capacitE9%, utiliser une IT pour incrE9%menter une
variable.

Re: Comptage de cycles PIC 12F508
On Apr 9, 5:54 pm, "CoolAuMiers"

Quoted text here. Click to load it

Le plus simple est d'utiliser un compteur interne dont l'horloge
est dérivée directement du quartz d'horloge du PIC (bonne précision)
Tu valides ce compteur en entrée de ton code, et tu le dévalides en
sortie.
Si dépassement de capacité, utiliser une IT pour incrémenter une
variable.

Hmmm, ça veut dire modifier mon code, non ?
Mon but est de compter le nombre de cycles exact entre 2 points de mon code.
Si je le modifie cela va fausser le compte ?
Mais je vais réfléchir à votre suggestion.
Merci.
Pascal.


Re: Comptage de cycles PIC 12F508
On Apr 9, 8:58A0%pm, "CoolAuMiers"

Quoted text here. Click to load it


Oui.


Non, parce-que tu valides le comptage AVANT
d'entrer dans ton code, et tu l'arretes APRES.
C'est le uC qui incrE9%mente le compteur directement dans le hardawre,
donc E0% l'interieur de ton code la modif est invisible.

Sinon, le plus rapide et le moins intrusif est de lever un bit de
sortie E0% UN
avant d'entrer dans ton code et de le baisser E0% ZERO en sortie du
code.
Sur la pinouille de sorite de ton PIC tu peux mesurer au scope le
delta T.

Re: Comptage de cycles PIC 12F508
On Apr 9, 8:58 pm, "CoolAuMiers"

Quoted text here. Click to load it

Oui.


Non, parce-que tu valides le comptage AVANT
d'entrer dans ton code, et tu l'arretes APRES.
C'est le uC qui incrE9%mente le compteur directement dans
le hardware, donc E0% l'interieur de ton code la modif est invisible.

Sinon, le plus rapide et le moins intrusif
est de lever un bit de sortie E0% UN avant d'entrer dans ton code
et de le baisser E0% ZERO en sortie du code.
Sur la pinouille de sorite de ton PIC
tu peux mesurer au scope le delta T.

Re: Comptage de cycles PIC 12F508
snipped-for-privacy@8g2000yqz.googlegroups.com...
On Apr 9, 8:58 pm, "CoolAuMiers"
Quoted text here. Click to load it

Hmmm merci mais comme il s'agit de boucles un peu complexes et qui doivent
durer longtemps ce n'est pas applicable il faudrait plutôt un
compteur/chrono sur plusieurs secondes.
Pascal.



Re: Comptage de cycles PIC 12F508
Il me semble que le nb de cycles est indiqué dans le tableau de synthèse
des codes opératoires de la spec.

c'est en gros un cycle par instruction ou adresse mémoire balayée, les
exceptions sont les intruction de test btfss, ... qui comptent 2
instructions si le test est faux, l'instruction sautée est simplement
lue mais non executée, ce qui explique le cycle supplementaire. les call
et return font aussi 2 cycles.

après, tu n'a plus qu'a compter à la main..

n'oublie pas que l'horlogue du PIC est celle du quartz divisée par 4.

jj

CoolAuMiers a écrit :
Quoted text here. Click to load it

Re: Comptage de cycles PIC 12F508
Quoted text here. Click to load it

Oui je sais tout ça, c'est ce qui m'a servit pour mon calcul.
Mais mon problème c'est de valider mon calcul un peu compliqué car le code
est relativement complexe avec des boucles, des tests, etc.
L'idéal serait pour moi d'encadrer la partie du code que je veux 'mesurer'
par 2 breakpoints, de lancer l'exécution et de récupérer le nombre de cycles
effectués réellement une fois arrivé sur le 2 ème breakpoint.
Pascal.


Re: Comptage de cycles PIC 12F508
On Apr 9, 8:55A0%pm, "CoolAuMiers"

Quoted text here. Click to load it

Bis repetita placent :
Utiliser un compteur interne dont l'horloge est dE9%rivE9%e
directement du quartz d'horloge du PIC (bonne prE9%cision)
Tu valides ce compteur en entrE9%e de ton code,
et tu le dE9%valides en sortie.
Si dE9%passement de capacitE9% du compteur,
utilise une IT pour incrE9%menter une variable.

De plus, si ton code fait des tests, les valeurs ne
seront valables que sur un grand nombre de mesures.


Re: Comptage de cycles PIC 12F508
1ere technique rapide : tu utilises une sortie que tu mets à 1 en entrée
et à 0 en sortie, avec un scope tu mesures le temps.
précision=celle du scope (qq %) perturbation : 2 cycles

2eme methode plus complexe : tu utilises un timer sur 16 bits, tu lis et
stocke la valeur en entrée, idem en sortie, le plus compliqué, selon les
cas, c'est d'afficher la valeur, si ton montage comprte un afficheur,
c'est facile.
précision = au cycle près, avec un risque de dépassement du compteur,
perturbation: pas mal de cycles ajoutés

personellement, j'utilise la première méthode.

JJ

CoolAuMiers a écrit :
Quoted text here. Click to load it

Re: Comptage de cycles PIC 12F508
Quoted text here. Click to load it

J'utilise le compteur du simulateur de mplab. Très pratique, tu mets un
breakpoint au niveau du code qui t'interesse, tu reset le compteur, tu mets
un breakpoint après le code, puis tu lances. Quand ça s'arrête de nouveau, tu
auras le nombre de cycles et le temps en seconde et sous-multiples.

Il suffit de choisir "mplab sim" dans le menu "debugger".

-- cLx

Re: Comptage de cycles PIC 12F508
hpo44f$4ac$ snipped-for-privacy@news.trigofacile.com...
Quoted text here. Click to load it

Bonjour,
Bravo, c'est ça que je cherchais, j'ai en effet mis un BP avant et après mon
code à chronométrer mais je n'ai pas trouvé de compteur de cycles.
Vous pourriez être plus précis sur la méthode pour créer un 'compteur du
simulateur de mplab' ?
Pascal.



Re: Comptage de cycles PIC 12F508
hpo44f$4ac$ snipped-for-privacy@news.trigofacile.com...
Quoted text here. Click to load it

Oups, pardon j'avais pas vu le 'Il suffit...' je vais creuser.
Pascal.



Re: Comptage de cycles PIC 12F508
hpo44f$4ac$ snipped-for-privacy@news.trigofacile.com...
Quoted text here. Click to load it

Ca y est j'ai trouvé, en fait c'est facile, il suffit d'afficher le 'Stop
Watch' du menu 'Debugger'.
Super.
Merci.
Pascal.



Re: Comptage de cycles PIC 12F508
Quoted text here. Click to load it

Bah de rien :)

J'avoue que le truc est pas super flagrant au début, mais tellement pratique
pour ce genre d'utilisations...

-- cLx

Re: Comptage de cycles PIC 12F508
hq4qmn$bi6$ snipped-for-privacy@news.trigofacile.com...
Quoted text here. Click to load it

Absolument, et c'est quand même plus sympa que d'analyser les différents cas
possibles d'exécution et de compter les cycles...
Pascal.



Site Timeline