Hello,

Pour avoir fait beaucoup d'embarqué avec ce genre de problème, je peux peut-être apporter des réponses. Soit on veut un comptage, soit on veut une fréquence... Une fréquence n'étant qu'un nombre d'évènements par seconde. Il est très courant d'utiliser un unsigned64 pour stocker le résultat.

Le comptage peut se faire par interruption, généralement une simple incrémentation de variable pour avoir une interruption très courte. Il faut s'assurer préalablement qu'à la vitesse max les interruptions ne se superposent pas, ce qui provoquerait un magnifique stack overflow.

Il peut également se faire dans la plupart des cas par hardware, il n'est pas rare d'avoir (au moins) un compteur hardware incrémentable par un front sur une pin dans un microcontrôleur moderne. Il faut juste penser à gérer le débordement de -1 à 0, que le compteur soit 8, 16 ou 32 bits.

Une autre solution pour les fréquences les plus lentes est tout bêtement la scrutation. Si le programme n'a pas grand chose d'autre à faire et que la machine d'état est bien définie et maitrisée, c'est une technique couramment utilisée, on incrémente grace à etat(t-1) XOR etat(t), ce qui est le double de la fréquence car on incrémente à chaque front.

Pour la fréquence, il faut une référence temporelle de 1 seconde, généralement un périphérique RTC. Le nombre d'évènement comptés durant la dernière seconde est exactement la fréquence... On peut lisser en moyennant avec la fréquence de la dernière seconde, ou des deux dernières, etc... Souvent c'est simplement ce calcul toutes les secondes qui est fait par interruption.

Bonne continuation,

Pfeuh