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,