Checking xTimerIsTimerActive after xTimerStart

ptaylor-us wrote on Thursday, November 05, 2015:

I think I already know the answer to this, but need to verify. I think since calling xTimerStart returns after adding a command to the timer command queue, I can’t immediately call xTimerIsTimerActive and expect a pdTRUE return. I am trying to use a Timer for a timeout while waiting for an ACK on a serial interface. I would like to not have to implement a callback function which simply sets a global “timeout” flag. Anyone come up with a smoother way of doing this?

rtel wrote on Friday, November 06, 2015:

Just looking at the implementation of xTimerIsTimerActive(), I think you are right. The function checks to see if the timer is in the active timer list, so if the start command is in the timer command queue, then it will not be in the active list (yet, unless it was already running), and xTimerIsTimerActive() will return false.

If the priority of the timer task is higher than the priority of the task starting the timer, then you will not get this problem as, as soon as the command goes into the command queue, the timer task will leave the Blocked state, pre-empt the task that posted the command, and process the command, before the function that started the timer even returns.