bonjour,

j'ai une fonction getTimer() qui me renvoie la valeur d'une base de temps sur un unsigned char (en seconde).
=> je voudrais exécuter un évènement toutes les 5 secondes. Le problème est que se passe t-il lorsqu'il y a un rool over ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
unsigned char oldVal;
oldVal = getTimer(); // recuperation de la valeur
 
while(1){
   if (getTimer() - oldVal >= 5){
      printf("interrupt on\n");
      oldVal = getTimer();
   }
}
Donc si on a oldVal = 255 et getTimer() = 1 => on a 2 secondes de différence

si je vais le calcul (1 - 255), ça donne en binaire (00000001 - 11111111)

00000001
- 11111111
------------
00000010

Ce qui vaut bien 2 : pouvez-vous me confirmer que j'aurais bien toujours le bon résultat ?

y a t-i lune autre methode plus rapide pour faire cela (sans changer le type des variables car je suis un un CPU 8 bits) ?
car le code suivant ne fonctionne pas au niveau du roll-over (suppression de la soustraction) :
=> ce qui est normal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
unsigned char oldVal;
timeOut = getTimer() + 5;
 
while(1){
   if (getTimer() >= timeOut ){
      printf("interrupt on\n");
      timeOut = getTimer() + 5;
   }
}