Difference between revisions of "RTOS Basics : Queue"
m |
m |
||
Line 24: | Line 24: | ||
====Creating a queue==== | ====Creating a queue==== | ||
− | |||
{|{{Widget:LibCol}} | {|{{Widget:LibCol}} | ||
{{#Widget:LibTable}} | {{#Widget:LibTable}} | ||
Line 45: | Line 44: | ||
MyQueueHandleId = xQueueCreate(3,20); | MyQueueHandleId = xQueueCreate(3,20); | ||
|} | |} | ||
− | |||
====Writting data to the queue==== | ====Writting data to the queue==== | ||
− | |||
{|{{Widget:LibCol}} | {|{{Widget:LibCol}} | ||
{{#Widget:LibTable}} | {{#Widget:LibTable}} | ||
Line 62: | Line 59: | ||
xQueueSend(MyQueueHandleId,TxBuffer,100) | xQueueSend(MyQueueHandleId,TxBuffer,100) | ||
|} | |} | ||
− | |||
====Writting data at the front of queue==== | ====Writting data at the front of queue==== | ||
− | |||
{|{{Widget:LibCol}} | {|{{Widget:LibCol}} | ||
{{#Widget:LibTable}} | {{#Widget:LibTable}} | ||
Line 86: | Line 81: | ||
xQueueSendToFront(MyQueueHandleId,TxBuffer,100) | xQueueSendToFront(MyQueueHandleId,TxBuffer,100) | ||
|} | |} | ||
− | |||
====Writting data at the back of queue==== | ====Writting data at the back of queue==== | ||
− | |||
{|{{Widget:LibCol}} | {|{{Widget:LibCol}} | ||
{{#Widget:LibTable}} | {{#Widget:LibTable}} | ||
Line 110: | Line 103: | ||
xQueueSendToBack(MyQueueHandleId,TxBuffer,100) | xQueueSendToBack(MyQueueHandleId,TxBuffer,100) | ||
|} | |} | ||
− | |||
====Receiving data from the queue==== | ====Receiving data from the queue==== | ||
− | |||
{|{{Widget:LibCol}} | {|{{Widget:LibCol}} | ||
{{#Widget:LibTable}} | {{#Widget:LibTable}} |
Latest revision as of 17:48, 27 April 2015
Amruta (talk) 15:58, 14 April 2015 (IST)
Contents
Intro
A queue is a FIFO (First In First Out) type buffer where data is written to the end (tail) of the queue and removed from the front (head) of the queue. It is also possible to write to the front of a queue.
A queue can either hold the data or pointer to the data. In FreeRTOS, the data items are directly copied to the queue. Each data item is of fixed size. The size of data item and maximum number of data items are fixed when queue is created.
Queue can also be used as semaphore, mutex, event flag, etc. FreeRTOS does the same. It reduces memory usage in case of using multiple RTOS services e.g. semaphore and queue in same application.
Operations on queue
- Create
- Read
- In read operation, the data item is returned. If queue is empty the requesting task will wait for specified time.If multiple tasks are waiting, then data item will be returned to the either highest priority task or the one which made the request first depending upon RTOS implementation.For the second case waiting list is maintained with each queue. In FreeRTOS, queue is implemented in FIRST way.
- Write(Pend)
- In write operation, the data item is directly copied to queue. If queue is full the requesting task will wait for specified time. For multiple tasks in waite state, process is same as read operation.
API Details
Creating a queue
Defination | xQueueHandle xQueueCreate (
|
Input Arguments |
|
Return Value | xQueueHandle : NULL when queue is not created
Non NULL when queue is created. |
Description | It creates queue. |
Usage | xQueueHandle MyQueueHandleId;
MyQueueHandleId = xQueueCreate(3,20); |
Writting data to the queue
Defination | portBASE_TYPE xQueueSend (
|
Description | It is equivalent to xQueueSendToBack(). |
Usage | char TxBuffer[MaxElementsPerQueue]={"Hello world"};
xQueueSend(MyQueueHandleId,TxBuffer,100) |
Writting data at the front of queue
Defination | portBASE_TYPE xQueueSendToFront (
|
Input Arguments |
|
Return Value | returns TRUE on successfully posting the item else FALSE |
Description | It posts item at the back of the queue. |
Usage | char TxBuffer[MaxElementsPerQueue]={"Hello world"};
xQueueSendToFront(MyQueueHandleId,TxBuffer,100) |
Writting data at the back of queue
Defination | portBASE_TYPE xQueueSendToBack (
|
Input Arguments |
|
Return Value | returns TRUE on successfully posting the item else FALSE |
Description | It posts item at the front of the queue. |
Usage | char TxBuffer[MaxElementsPerQueue]={"Hello world"};
xQueueSendToBack(MyQueueHandleId,TxBuffer,100) |
Receiving data from the queue
Defination | portBASE_TYPE xQueueReceive (
|
Input Arguments |
|
Return Value | returns TRUE on successfully posting the item else FALSE |
Description | It reads data from the front of the queue. |
Usage | char RxBuffer[MaxElementsPerQueue];
xQueueReceive(MyQueueHandleId,RxBuffer,100); |