I am seeing a bug using the osTimers when using tickless mode in RTX - essentially they are not ever firing the callback. Note I am compiling the OS v4.70 with __CMSIS_RTOS enabled.
It seems that rt_suspend() and rt_resume() are only partially implemented for the CMSIS_RTOS version. There is a check for delta time for the old rt_Timer.c timers but no check for the delta time for osTimerCreate (it needs to check os_timer_head list for the newest timer).
Has anyone seen a fix for this or had the same issue?
. . Some more detail.....
In the os_idle_demon() if I supress os_suspend() and os_resume() and just stay awake in the while(1), the osTimers work normally.
osDelay() works fine with both tickless and staying awake mode.
When I look into the code in RTX - I see there are two very different mechanisms: osDelay() is managed as part of the task scheduling delay mechanism (rt_dec_dly) and is accounted for correctly in rt_suspend() and rt_resume().
osTimers are simply running in a thread waiting on a message queue forever so they won't be accounted for in the task scheduling. Instead they are meant to be triggered from the sysTimerTick(). Unfortunately the CMSIS timers aren't being checked in rt_suspend(),rt_resume().
There also seems to hide a second case which admittedly should not happen under normal case: - if you somehow sleep longer than your timer then it is simply not triggered even though the os_time has moved past the time you set it to.
Thanks for your help Thomas