Bonjour,

J'ai une variable de type non signé codée sur 32 bits (correspond à un unsigned int)

Cette variable sert de timer (elle représente une valeur en 1/1000000 seconde).
J'ai la fonction getTimer() qui me donne le temps écoulé depuis l'allumage du système.

donc si à un instant t, getTimer() me donne comme résultat 0xFFFFFFFF => 1/1000000 seconde plus tard, il me donnera comme résultat 0 (car overflow de la variable).


J'ai plein de timer à gérer : sur certains événement je crée des timeouts qui doivent déclencher des actions lorsqu'ils sont écoulés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
// x et y toujours inférieurs à 0xFFFFFFFF / 8
timeout1 = getTimer() + x;
...
...
...
timeout2 = getTimer() + y;
...
...
Ce que je veux, c'est effectuer une action dès que l'un des timeout est déclenché (c'est à dire que timeoutx < getTimer()) : le problème est que je ne vois comment traiter l'overflow.

Par exemple si getTimer() = 0xFFFFFFFA et que timeout = getTimer() + 0xFF, le test "timeoutx < getTimer()" n'est plus valide pour détecter le déclenchement du timeout car timeout vaudra 0xFFFFFFFA + 0xFF = 0x100000F9 ce qui correspond a 0x00000F9 sur une variable 32 bits.

Il faut que le traitement soit rapide car je programme sur un µControlleur 32 bits.

Est-ce que vous voyez une solution ?

Merci d'avance,