Bonjour,
J'ai fais un programme en C que je dois compiler pour un PIC.
Le programme fonctionne mais n'a pas la réactivité souhaité. S'agissant d'un système temps réelle ça me pose problème...
Après recherche, il semble que le problème vient de cette instruction :
L'instruction est très simple, elle compare la valeur du registre TMR0 à une valeur contenue dans un tableau. Si plus grand ou égal, je change l'état d'un port.Code:if(TMR0>=ts[0]) RB0=0;
J'ai analysé le code ASM et voici ce que ça donne :
Il y a une trentaine d'instructions ce qui me fait perdre 30us. Étant donné que je fais 7 autres comparaisons (8 en tout), je perds pratiquement 240us.Code:bsf status, 5 ;RP0=1, select bank1 bcf status, 6 ;RP2=0, select bank1 bcf status, 5 ;RP0=0, select bank0 bcf status, 6 ;RP2=0, select bank0 movf (1),w ;volatile movwf (??_main+2+0) clrf (??_main+2+0+1) bsf status, 5 ;RP0=1, select bank1 bcf status, 6 ;RP2=0, select bank1 movf (208+1)^080h,w bcf status, 5 ;RP0=0, select bank0 bcf status, 6 ;RP2=0, select bank0 subwf 1+(??_main+2+0),w skipz goto u2335 bsf status, 5 ;RP0=1, select bank1 bcf status, 6 ;RP2=0, select bank1 movf (208)^080h,w bcf status, 5 ;RP0=0, select bank0 bcf status, 6 ;RP2=0, select bank0 subwf 0+(??_main+2+0),w u2335: skipc goto u2331 goto u2330 u2331: goto l22 u2330: bcf (48/8),(48)&7 l22: [suite du programme ...]
Or je ne dois pas dépasser 64us pour les 8 comparaisons, soit 8us par comparaisons.
Je ne connais pas l'assembleur, j'aurai besoin d'aide pour analyser ce code et l'optimiser.
Merci
-----