Bonjour à tous,
j'ai besoin de créer une fonction utime() qui retournerait le nombre de microsecondes écoulées depuis l'allumage de mon microcontroleur.
Je travaille en C sur le µC Renesas SH72516 (RISC 32 bits). Celui-ci inclut un périphérique nommé CMT (Compare Match Timer) qui me permet de lever une interruption tous les T tics de mon horloge à C Hz.
J'ai donc implémenté mon timer de manière naïve : j'ai un volatile unsigned long long counter déclaré quelque part ; le CMT lève une interruption qui l'incrémente de 1 ; et ma fonction utime()est déclarée comme suit
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 inline unsigned long long utime() { const float c= 50000000.0f/8.0f; const float t= (float)CMT0.CMCOR; const float usec = 1000000; // µs / s return usec * ( counter/ (c / t) ); }
Malheureusement, il semble que ma fonction dérive de manière significative en fonction de T. Pour indication, avec T=0x006 j'ai une dérive de 9 secondes toutes les 64 secodnes ; avec T=0xffff une dérive d'environ 1 seconde toutes les 64 secondes.
Pouvez-vous m'aider ? J'imagine que ma conception est bancale quelque part.
Cordialement,
Partager