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 :
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.
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; ... ...
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,
Partager