same in 7.3.0. The problem is in prvProcessReceivedCommands().
Specifically this at the beginning of the function:
xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL )
{
The issue I’m seeing is that messages are being retrieved from xTimerQueuewith commandTimes > xTimeNow. This case is interpreted by code in
prvInsertTimerInActiveList() as indictating that the tick count has
overflowed. In which case the timer is considered expired, the callback is
called and the timer is restarted if it’s an autoReload timer. That’s all
well and good but, in my case, the tick count has not overflowed. What has
happened is that xTimerQueue was being filled by another task at the same
priority as prvTimerTask(). The other task was able to add a timer start
command with commandTime > xTimeNow. The timer was immediately considered
expired and, as this was an autoReload timer, re-queued, causing the while
loop to never exit since xTimeNow is never recalculated. This situation
does not occur if prvTimerTask is a higher priority than the task starting
the timers. Another solution would be to move the call to
prvSampleTimeNow() inside the while loop. The solution I went with was to
change the while into an if. So, have I interpreted all of this correctly? If so, aside from changing
priority levels, which is the preferred fix? Thanks.