-
Mesure du temps avr-libc
Bonjour à tous, j'espère que je poste au bon endroit, vu qu'il n'y a pas de section micro-contrôleur (s'il y en a une désolé de ne pas l'avoir vue ^^).
Je programme actuellement sur un micro-contrôleur ATMEL 128, en utilisant la bibliothèque avr-libc et le compilateur avr-gcc (logique :D).
Mon problème est le suivant : je cherche à connaître précisément la temps d'exécution d'une boucle et dois pour cela mesurer le temps. Le souci est que les fonctions de la famille gettime() n'existent pas dans cette bibliothèque.
Comment puis-je faire ?
PS : je débute en programmation micro-contrôleur.
PS2 : le but final est de comparer les temps d'exécution en fonction des options d'optimisation du code par le compilateur, afin de choisir l'option la plus avantageuse pour le rapport taille / temps d'exécution.
-
Ton micro ne dispose pas d'un timer (interne ou externe) ?
-
Si il y a un timer mais je ne sais pas comment le manipuler :(
-
Il faut lire le datasheet du µc. Ca doit probablement être écrit dedans.
-
Salut,
Dans le principe, ce n'est pas dur, si tu lis les datasheets, tu t'en sortiras. Il faut accrocher une interruption à un des timers inutilisés dans ton appli et configuré pour un cycle d'une milliseconde. La tâche de l'interruption est très sommaire, elle incrémente une variable (une 32 bits me parait bien) et relance le timer s'il n'est pas autoreload.
Une fois ceci initialisé, il suffit à ton programme principal de lire la variable pour savoir à quelle milliseconde on est actuellement. Si on lit la variable à deux moments différents, une simple soustraction donne le temps ecoulé en millisecondes.
Dernier point, il faut interdire l'interruption pendant la lecture de la variable, car si on lit une variable constituée de plusieurs octets, l'interruption peut arriver à tout moment et causer une donnée erronée.
Bonne chance,
Pfeuh
-
A la limite ce n'est même pas obligé d'utiliser les interruptions.
Un timer a parfois trois registres :
- contrôle (activation des interruptions, source de l'horloge, etc...)
- période (valeur du compteur après laquelle le compteur reboucle)
- compteur
Suivant la fréquence à laquelle le compteur s'incrémente, celui-ci reboucle assez rarement (toutes les 4 ou 5 mins par exemple). Donc si ta fréquence de contrôle de l'heure est plus élevée, il suffit que tu viennes lire la valeur du compteur.
Il faut souvent appliquer un coeficient au compteur pour récupérer un nombre de *secondes.