Hello,
According to API References of FreeRTOS there is no API available for Flushing a Queue.
Search through the post I found that someone has raised a feature Request on this as well.
I am too looking forward for that API and wants to know when it will be available.
I have just checked in xTaskGetIdleTaskHandle(), xTimerGetTimerTaskHandle(), pcTaskGetTaskName(), and vSemaphoreDelete() macros (previously vQueueDelete() was used, now there is a mapping from vSemaphoreDelete() to vQueueDelete() to make it more obvious). There will not however be a vQueueFlush() function added.
You can flush a queue by simply looping on an xQueueReceive() until the queue is empty. There is not, however, a generic way of doing this for the following reasons:
+ Sometimes a queue holds pointers to buffers. Simply resetting the queue read and write pointers back to their defaults (making the queue look empty) could cause a memory leak if the buffers being pointed to are then left dangling.
+ As queues can hold data of any size (it being set when the queue is created), you cannot define a generic function that loops calling xQueueReceive() because you don’t know what size buffer to receive the data into.