tacadia wrote on Tuesday, May 03, 2011:

Hi all,

I’m currently working on an application that requires a WAIT-SUSPEND like state. By that I mean, if a Task waits on a queue and is subsequently suspended, it should enter the hypothetical WAIT-SUSPEND state. The following 2 outcomes would be possible from the WAIT-SUSPEND State:

1) From the WAIT-SUSPEND State, if the Task receives a Queue item, it will proceed to be in the SUSPEND State. This means that the Task will only proceed back into the READY State when a Resume is invoked on it.

2) From the WAIT’SUSPEND State, if the Task is resumed before it is able to receive a Queue item, it will return to the WAIT State.

I was wondering if such a mechanism can be achieved in FreeRTOS? Also, has anyone encountered such a need for the WAIT-SUSPEND State? Are there any elegant solutions around?

Currently, the issue is that whenever a Task waits on a Queue and a vTaskSuspend() is invoked, the Task will “forget” that it is waiting on the Queue as vTaskSuspend() sets xEventListItem to NULL. This issue also comes about when a Task is made to delay with a timeout, but a vTaskSuspend() is invoked on it before the timeout returns. This causes the Task to resume in its ready state rather than a timeout state.

Thanks to all in advance!