system
(system)
February 15, 2007, 7:34am
1
nobody wrote on Thursday, February 15, 2007 :
Hi all,
I need to empty the queue at certain places in my code.
The only way I can find is reading from queue untill it is empty. But this is not an efficeint method as reading is implemented as a memory copy, and it is wasting time reading all queue data just to throw away.
Is there a function which will just adjust the pointers of queue as it is empty?
I need a very fast queue empty mechanism.
Thanks.
system
(system)
February 15, 2007, 11:27am
2
embeddedc wrote on Thursday, February 15, 2007 :
You can add the following function to queue.c
void vQueueEmpty( xQueueHandle pxQueue )
{
pxNewQueue->uxMessagesWaiting = 0;
pxNewQueue->pcWriteTo = pxNewQueue->pcHead;
pxNewQueue->pcReadFrom = pxNewQueue->pcHead + ( ( uxQueueLength - 1 ) * uxItemSize );
pxNewQueue->xRxLock = queueUNLOCKED;
pxNewQueue->xTxLock = queueUNLOCKED;
vListInitialise( &( pxNewQueue->xTasksWaitingToSend ) );
vListInitialise( &( pxNewQueue->xTasksWaitingToReceive ) );
}
Be vary careful not to call it when there are tasks blocked on the queue!
system
(system)
February 16, 2007, 1:40am
3
nobody wrote on Friday, February 16, 2007 :
Hi,
Thank you for your help.
My need involves the need to empty queue even when some tasks are waiting on the queue.
Is there any way to do that??
I will try to use the funtion you provided and modify it according to my need, But it will be good if I get a tested function.
Thanks