How to wait on multiple queue?

How can I wait on multiple queue? or how to implement select() function?
Is it needed to use semaphore to protect xQueueReceive() and xQueueSend() function for multi-tasking?

How to wait on multiple queue?

FreeRTOS has no primitive to wait for multiple queue. If you really need to take data from multiple queue, the solution is to use a 0 or short timeout for the queues and cycle through them (somewhere in the loop you need some form of timeout). Better is have everything that is sending to that task post to the same queue, so the task can wait on just one queue, if needed you can add a “type” field to the record posted so the receiving task knows what sort of message this is. If you really need the queue separate for the sending tasks, another option is to make a stub task for each queue that just relays the message to the queue the main task that needs the multiple queues is waiting on. Queue are designed to be shared, so have internal critical sections for sharing the access, so they do not need a semaphore (and in fact a semaphore is built on a queue with no data buffer.)