Comptage de cycles PIC 12F508

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.

Reply to
CoolAuMiers
Loading thread data ...

On Apr 9, 5:54=A0pm, "CoolAuMiers"

Le plus simple est d'utiliser un compteur interne dont l'horloge est d=E9riv=E9e directement du quartz d'horloge du PIC (bonne pr=E9cision) Tu valides ce compteur en entr=E9e de ton code, et tu le d=E9valides en sortie. Si d=E9passement de capacit=E9, utiliser une IT pour incr=E9menter une variable.

Reply to
Jean-Christophe

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 :

Reply to
jj

"jj" a écrit dans le message de news:4bbf79d6$0$28931$ snipped-for-privacy@reader.news.orange.fr...

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.

Reply to
CoolAuMiers

"Jean-Christophe" a écrit dans le message de news: snipped-for-privacy@r36g2000yqm.googlegroups.com... On Apr 9, 5:54 pm, "CoolAuMiers"

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.

Reply to
CoolAuMiers

On Apr 9, 8:55=A0pm, "CoolAuMiers"

code

er'

de cycles

Bis repetita placent : Utiliser un compteur interne dont l'horloge est d=E9riv=E9e directement du quartz d'horloge du PIC (bonne pr=E9cision) Tu valides ce compteur en entr=E9e de ton code, et tu le d=E9valides en sortie. Si d=E9passement de capacit=E9 du compteur, utilise une IT pour incr=E9menter une variable.

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

Reply to
Jean-Christophe

On Apr 9, 8:58=A0pm, "CoolAuMiers"

Oui.

de.

Non, parce-que tu valides le comptage AVANT d'entrer dans ton code, et tu l'arretes APRES. C'est le uC qui incr=E9mente 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.

Reply to
Jean-Christophe

On Apr 9, 8:58 pm, "CoolAuMiers"

Oui.

de.

Non, parce-que tu valides le comptage AVANT d'entrer dans ton code, et tu l'arretes APRES. C'est le uC qui incr=E9mente 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.

Reply to
Jean-Christophe

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

Reply to
cLx
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 :

Reply to
jj

"Jean-Christophe" a écrit dans le message de news: snipped-for-privacy@8g2000yqz.googlegroups.com... On Apr 9, 8:58 pm, "CoolAuMiers"

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.

Reply to
Service API

"cLx" > de compteur de cycles utilisable en mode debug.

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.

Reply to
Service API

"cLx" breakpoint au niveau du code qui t'interesse, tu reset le compteur, tu

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

Reply to
Service API

"cLx" > de compteur de cycles utilisable en mode debug.

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

Reply to
Service API

Bah de rien :)

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

-- cLx

Reply to
cLx

"cLx" > Super.

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.

Reply to
Service API

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.