Hello Patrice, Am Wed, Jan 08, 2025 at 04:09:39PM +0100 schrieb Patrice Chotard: > On 32 bits platforms, timer_get_us() returns an unsigned long which > is a 32 bits. timer_get_us() wraps around every 72 minutes > (2 ^ 32 / 1000000 =~ 4295 sec =~ 72 min). > > So the test "if time_after_eq64(now, cyclic->next_call)" is no more > true when cyclic->next_call becomes above 32 bits max value (4294967295). > > At this point after 72 min, no more cyclic function are > executed included watchdog one. > > Instead of using timer_get_us(), use get_timer_us() which returns a > uint64_t, this allows a rollover every 584942 years.
This should be long enough. ;-) > > Signed-off-by: Patrice Chotard <patrice.chot...@foss.st.com> > --- > > common/cyclic.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/common/cyclic.c b/common/cyclic.c > index 196797fd61e..e3f03a19d55 100644 > --- a/common/cyclic.c > +++ b/common/cyclic.c > @@ -61,7 +61,7 @@ static void cyclic_run(void) > * Check if this cyclic function needs to get called, e.g. > * do not call the cyclic func too often > */ > - now = timer_get_us(); > + now = get_timer_us(0); Acked-by: Alexander Dahl <a...@thorsis.com> Greets Alex > if (time_after_eq64(now, cyclic->next_call)) { > /* Call cyclic function and account it's cpu-time */ > cyclic->next_call = now + cyclic->delay_us; > -- > 2.25.1 >