vTaskDelayUntil - how to detect overload?

jstoezel wrote on Thursday, November 26, 2009:


Following an advice read on this forum, I am using vTaskDelayUntil to activate a task periodically, with more control over the activation frequency.

CPUs can get overloaded, and if the task does not have the highest priority then a task waiting on vTaskDelayUntil could potentially jump (or miss) a tick.

Is there a way to asses whether or no this is happening (vTaskDelayUntil returns void)?

To implement such a periodic activation pattern, I have been using a hook on the tick announcer. A counting semaphore is then given to the tasks that need to be periodically activated. If a task sees more than one semaphore then it realizes that the CPU ran late.

I wouldn’t mind using vTaskDelayUntil so that’s one less piece of code I have to worry. However, I feel the need to insure that tasks know whenever they ran.

Let me know if there’s a way to deduce this using the vTaskDelayUntil  function.

richard_damon wrote on Thursday, November 26, 2009:

One way to check this is to see if xTaskGetTickCount - lastTickCount (the first parm to vTaskDelayUntil) is >= tick count given to vTaskDelayUntil…

jstoezel wrote on Thursday, November 26, 2009:

Ah yes! Awesome, thanks for the heads up!