FreeRTOS mechanism for a synchronous message

Definition:

Synchronous message” means taskA sends a message to taskB, and waits for a reply from taskB. taskA is blocked while waiting for a reply, and upon receiving a reply continues from the where is stopped. Reply message may have data in it.

Question:

  • Does FreeRTOS have any mechanism which implements the above definition for synchronous message?
  • Does anybody can help with it?
Thanks, A.F

FreeRTOS mechanism for a synchronous message

Many ways to go here, my favourite would be : TaskA passes it’s task handle (xTaskGetCurrentTaskHandle()) as part of the message to taskB. Messages can be passed in a queue. TaskB handles the message, and when done it will wake up taskA. When handled, it wakes up taskA by calling xTaskNotify(). TaskA will block in xTaskNotifyWait() until woken up.

FreeRTOS mechanism for a synchronous message

As Hein impilies, FreeRTOS doesn’t have a primative for that operation, but you can build up a way to do it. But, if you generalize the meaning of Task (and from the domain where that definition comes from, you can generally do so), you DO have a mechamism that matches this mode of operation, the function call. In my experience, often when I find the need for this sort of interaction between my tasks, I need to ask myself if TaskB has a REAL need to be a seperate task, or can it be just a function that I call, If part of the definition of TaskB is that it serializes its requests, that can be acheived with a mutex, which is a lot lighter weight than a full task. If you are generating fully isolated Restricted Tasks with the MPU, then it is more likely that a seperate Task may be appropriate, and the request and reply sent via Queues (each task having its own Queue to process).