(no subject)

rehnnmanc wrote on Friday, May 18, 2018:

I’ve got a problem with Free RTOS and the timer service queue gettign full.

I’m usign FreeRTOS on a Kinetis uC with Kinetis Design Studio (an ecllipse derivative). I have task aware debugging (see below for screenshots).
I’ve tried increasing the queue length but that doesn’t stop the problem.

As I undertsand it the Timer Service queue is for timers waiting to be set, i.e. once a timer has been set it’s removed from the queue (regardless of wether the timer has requried). So my thoughts are either:
a - The Timer Service Task is being blocked meanign it can’t service the queue
b - We’re over-loading the timer task by sendign too many timers at once.

So I have two questions:
1 - Are either of the above theories plausible?
2 - How can I debug the timer task/queue and work out what’s causing my issue?


richard_damon wrote on Friday, May 18, 2018:

The fact that the timer queue is full, and the TmrSvc task is the highest priority, and suspended says that some timer (or pending function which uses the same system) has blocked stopping the task from runing.

One key thing to remember is all the timer callback function run in the context of the TmrSvc task, and they are supposed to be fast actions that do not block. (this do not block requirement isn’t strictly enforced, but can cause an assert on tick wrap around, and can lead to issues like this).

You should inspect your timer functions and see if any of them do operations which can block, and change that so they can’t block.