I've been playing with FreeRTOS on some STM32F10x's lately and have really enjoyed the experience. One aspect of my projects so far has been to implement a virtual com port (over USB) as well as some real UART drivers using DMA. I find that using Queues for the RX and TX fifo's to be a natural thing to do, but when queuing chunks of character data I find that calling xQueueSend (or Receive) for each byte has too much overhead, especially when you run at really high rates, like over USB.
So, I propose some extended xQueue functions:
Along with ISR versions, that instead of a pointer to the single element to queue/dequeue, points to a consecutive array of elements. These functions will also have some sort of count argument. I've actually implemented this, so if there's interest, I'd be happy to share/post the code I wrote. What I did is added 2 counts: the minimum count and maximum count. This allowed me to wait for 1 to X characters to be in a queue, or wait for all X as desired. The return type was also modified to return the # of elements sent or received--important for knowing how many you actually got if you asked for a range of elements. In general this is similar to the unix write/read functions, with the exception that those don't provide the 'minimum' counts.
In the process, I also added prvCopyDataArrayToQueue and prvCopyDataArrayFromQueue, which was used by the above methods. These handled the larger copy as either 1 or 2 memcpy's, depending on if the copy was contiguous.
I also added checks of the pointers for NULL which would then skip the actual copy, but otherwise work the same. I did this because my UART could DMA data straight into the queue's memory buffer and the DMA ISR (and a timer based check) would simply adjust the element counts using the same functions.
Note: these functions are a superset of the existing QueueSend/Recieve, which in theory could be consolidated to save on code space (which I didn't do for performance reasons.)