Labor04
queue.h
Go to the documentation of this file.
1 /*
2  * FreeRTOS Kernel V10.0.0
3  * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of
6  * this software and associated documentation files (the "Software"), to deal in
7  * the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9  * the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software. If you wish to use our Amazon
14  * FreeRTOS name, please do so in a fair use way that does not cause confusion.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  *
23  * http://www.FreeRTOS.org
24  * http://aws.amazon.com/freertos
25  *
26  * 1 tab == 4 spaces!
27  */
28 
29 
30 #ifndef QUEUE_H
31 #define QUEUE_H
32 
33 #ifndef INC_FREERTOS_H
34 #error "include FreeRTOS.h" must appear in source files before "include queue.h"
35 #endif
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 
47 typedef void * QueueHandle_t;
48 
54 typedef void * QueueSetHandle_t;
55 
61 typedef void * QueueSetMemberHandle_t;
62 
63 /* For internal use only. */
64 #define queueSEND_TO_BACK ( ( BaseType_t ) 0 )
65 #define queueSEND_TO_FRONT ( ( BaseType_t ) 1 )
66 #define queueOVERWRITE ( ( BaseType_t ) 2 )
67 
68 /* For internal use only. These definitions *must* match those in queue.c. */
69 #define queueQUEUE_TYPE_BASE ( ( uint8_t ) 0U )
70 #define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U )
71 #define queueQUEUE_TYPE_MUTEX ( ( uint8_t ) 1U )
72 #define queueQUEUE_TYPE_COUNTING_SEMAPHORE ( ( uint8_t ) 2U )
73 #define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U )
74 #define queueQUEUE_TYPE_RECURSIVE_MUTEX ( ( uint8_t ) 4U )
75 
144 #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
145 #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) )
146 #endif
147 
230 #if( configSUPPORT_STATIC_ALLOCATION == 1 )
231 #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) )
232 #endif /* configSUPPORT_STATIC_ALLOCATION */
233 
312 #define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT )
313 
394 #define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )
395 
478 #define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )
479 
561 #define xQueueOverwrite( xQueue, pvItemToQueue ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), 0, queueOVERWRITE )
562 
563 
649 BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
650 
743 BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
744 
776 BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION;
777 
867 BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
868 
883 
900 
914 
983 #define xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_FRONT )
984 
985 
1054 #define xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )
1055 
1141 #define xQueueOverwriteFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueOVERWRITE )
1142 
1215 #define xQueueSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )
1216 
1294 BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
1295 BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
1296 
1384 BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
1385 
1386 /*
1387  * Utilities to query queues that are safe to use from an ISR. These utilities
1388  * should be used only from witin an ISR, or within a critical section.
1389  */
1393 
1394 /*
1395  * The functions defined above are for passing data to and from tasks. The
1396  * functions below are the equivalents for passing data to and from
1397  * co-routines.
1398  *
1399  * These functions are called from the co-routine macro implementation and
1400  * should not be called directly from application code. Instead use the macro
1401  * wrappers defined within croutine.h.
1402  */
1403 BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken );
1404 BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken );
1405 BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait );
1406 BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait );
1407 
1408 /*
1409  * For internal use only. Use xSemaphoreCreateMutex(),
1410  * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling
1411  * these functions directly.
1412  */
1414 QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
1420 
1421 /*
1422  * For internal use only. Use xSemaphoreTakeMutexRecursive() or
1423  * xSemaphoreGiveMutexRecursive() instead of calling these functions directly.
1424  */
1427 
1428 /*
1429  * Reset a queue back to its original empty state. The return value is now
1430  * obsolete and is always set to pdPASS.
1431  */
1432 #define xQueueReset( xQueue ) xQueueGenericReset( xQueue, pdFALSE )
1433 
1434 /*
1435  * The registry is provided as a means for kernel aware debuggers to
1436  * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add
1437  * a queue, semaphore or mutex handle to the registry if you want the handle
1438  * to be available to a kernel aware debugger. If you are not using a kernel
1439  * aware debugger then this function can be ignored.
1440  *
1441  * configQUEUE_REGISTRY_SIZE defines the maximum number of handles the
1442  * registry can hold. configQUEUE_REGISTRY_SIZE must be greater than 0
1443  * within FreeRTOSConfig.h for the registry to be available. Its value
1444  * does not effect the number of queues, semaphores and mutexes that can be
1445  * created - just the number that the registry can hold.
1446  *
1447  * @param xQueue The handle of the queue being added to the registry. This
1448  * is the handle returned by a call to xQueueCreate(). Semaphore and mutex
1449  * handles can also be passed in here.
1450  *
1451  * @param pcName The name to be associated with the handle. This is the
1452  * name that the kernel aware debugger will display. The queue registry only
1453  * stores a pointer to the string - so the string must be persistent (global or
1454  * preferably in ROM/Flash), not on the stack.
1455  */
1456 #if( configQUEUE_REGISTRY_SIZE > 0 )
1457 void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
1458 #endif
1459 
1460 /*
1461  * The registry is provided as a means for kernel aware debuggers to
1462  * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add
1463  * a queue, semaphore or mutex handle to the registry if you want the handle
1464  * to be available to a kernel aware debugger, and vQueueUnregisterQueue() to
1465  * remove the queue, semaphore or mutex from the register. If you are not using
1466  * a kernel aware debugger then this function can be ignored.
1467  *
1468  * @param xQueue The handle of the queue being removed from the registry.
1469  */
1470 #if( configQUEUE_REGISTRY_SIZE > 0 )
1472 #endif
1473 
1474 /*
1475  * The queue registry is provided as a means for kernel aware debuggers to
1476  * locate queues, semaphores and mutexes. Call pcQueueGetName() to look
1477  * up and return the name of a queue in the queue registry from the queue's
1478  * handle.
1479  *
1480  * @param xQueue The handle of the queue the name of which will be returned.
1481  * @return If the queue is in the registry then a pointer to the name of the
1482  * queue is returned. If the queue is not in the registry then NULL is
1483  * returned.
1484  */
1485 #if( configQUEUE_REGISTRY_SIZE > 0 )
1486 const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
1487 #endif
1488 
1489 /*
1490  * Generic version of the function used to creaet a queue using dynamic memory
1491  * allocation. This is called by other functions and macros that create other
1492  * RTOS objects that use the queue structure as their base.
1493  */
1494 #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
1495 QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
1496 #endif
1497 
1498 /*
1499  * Generic version of the function used to creaet a queue using dynamic memory
1500  * allocation. This is called by other functions and macros that create other
1501  * RTOS objects that use the queue structure as their base.
1502  */
1503 #if( configSUPPORT_STATIC_ALLOCATION == 1 )
1504 QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
1505 #endif
1506 
1507 /*
1508  * Queue sets provide a mechanism to allow a task to block (pend) on a read
1509  * operation from multiple queues or semaphores simultaneously.
1510  *
1511  * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this
1512  * function.
1513  *
1514  * A queue set must be explicitly created using a call to xQueueCreateSet()
1515  * before it can be used. Once created, standard FreeRTOS queues and semaphores
1516  * can be added to the set using calls to xQueueAddToSet().
1517  * xQueueSelectFromSet() is then used to determine which, if any, of the queues
1518  * or semaphores contained in the set is in a state where a queue read or
1519  * semaphore take operation would be successful.
1520  *
1521  * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html
1522  * for reasons why queue sets are very rarely needed in practice as there are
1523  * simpler methods of blocking on multiple objects.
1524  *
1525  * Note 2: Blocking on a queue set that contains a mutex will not cause the
1526  * mutex holder to inherit the priority of the blocked task.
1527  *
1528  * Note 3: An additional 4 bytes of RAM is required for each space in a every
1529  * queue added to a queue set. Therefore counting semaphores that have a high
1530  * maximum count value should not be added to a queue set.
1531  *
1532  * Note 4: A receive (in the case of a queue) or take (in the case of a
1533  * semaphore) operation must not be performed on a member of a queue set unless
1534  * a call to xQueueSelectFromSet() has first returned a handle to that set member.
1535  *
1536  * @param uxEventQueueLength Queue sets store events that occur on
1537  * the queues and semaphores contained in the set. uxEventQueueLength specifies
1538  * the maximum number of events that can be queued at once. To be absolutely
1539  * certain that events are not lost uxEventQueueLength should be set to the
1540  * total sum of the length of the queues added to the set, where binary
1541  * semaphores and mutexes have a length of 1, and counting semaphores have a
1542  * length set by their maximum count value. Examples:
1543  * + If a queue set is to hold a queue of length 5, another queue of length 12,
1544  * and a binary semaphore, then uxEventQueueLength should be set to
1545  * (5 + 12 + 1), or 18.
1546  * + If a queue set is to hold three binary semaphores then uxEventQueueLength
1547  * should be set to (1 + 1 + 1 ), or 3.
1548  * + If a queue set is to hold a counting semaphore that has a maximum count of
1549  * 5, and a counting semaphore that has a maximum count of 3, then
1550  * uxEventQueueLength should be set to (5 + 3), or 8.
1551  *
1552  * @return If the queue set is created successfully then a handle to the created
1553  * queue set is returned. Otherwise NULL is returned.
1554  */
1556 
1557 /*
1558  * Adds a queue or semaphore to a queue set that was previously created by a
1559  * call to xQueueCreateSet().
1560  *
1561  * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this
1562  * function.
1563  *
1564  * Note 1: A receive (in the case of a queue) or take (in the case of a
1565  * semaphore) operation must not be performed on a member of a queue set unless
1566  * a call to xQueueSelectFromSet() has first returned a handle to that set member.
1567  *
1568  * @param xQueueOrSemaphore The handle of the queue or semaphore being added to
1569  * the queue set (cast to an QueueSetMemberHandle_t type).
1570  *
1571  * @param xQueueSet The handle of the queue set to which the queue or semaphore
1572  * is being added.
1573  *
1574  * @return If the queue or semaphore was successfully added to the queue set
1575  * then pdPASS is returned. If the queue could not be successfully added to the
1576  * queue set because it is already a member of a different queue set then pdFAIL
1577  * is returned.
1578  */
1580 
1581 /*
1582  * Removes a queue or semaphore from a queue set. A queue or semaphore can only
1583  * be removed from a set if the queue or semaphore is empty.
1584  *
1585  * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this
1586  * function.
1587  *
1588  * @param xQueueOrSemaphore The handle of the queue or semaphore being removed
1589  * from the queue set (cast to an QueueSetMemberHandle_t type).
1590  *
1591  * @param xQueueSet The handle of the queue set in which the queue or semaphore
1592  * is included.
1593  *
1594  * @return If the queue or semaphore was successfully removed from the queue set
1595  * then pdPASS is returned. If the queue was not in the queue set, or the
1596  * queue (or semaphore) was not empty, then pdFAIL is returned.
1597  */
1599 
1600 /*
1601  * xQueueSelectFromSet() selects from the members of a queue set a queue or
1602  * semaphore that either contains data (in the case of a queue) or is available
1603  * to take (in the case of a semaphore). xQueueSelectFromSet() effectively
1604  * allows a task to block (pend) on a read operation on all the queues and
1605  * semaphores in a queue set simultaneously.
1606  *
1607  * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this
1608  * function.
1609  *
1610  * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html
1611  * for reasons why queue sets are very rarely needed in practice as there are
1612  * simpler methods of blocking on multiple objects.
1613  *
1614  * Note 2: Blocking on a queue set that contains a mutex will not cause the
1615  * mutex holder to inherit the priority of the blocked task.
1616  *
1617  * Note 3: A receive (in the case of a queue) or take (in the case of a
1618  * semaphore) operation must not be performed on a member of a queue set unless
1619  * a call to xQueueSelectFromSet() has first returned a handle to that set member.
1620  *
1621  * @param xQueueSet The queue set on which the task will (potentially) block.
1622  *
1623  * @param xTicksToWait The maximum time, in ticks, that the calling task will
1624  * remain in the Blocked state (with other tasks executing) to wait for a member
1625  * of the queue set to be ready for a successful queue read or semaphore take
1626  * operation.
1627  *
1628  * @return xQueueSelectFromSet() will return the handle of a queue (cast to
1629  * a QueueSetMemberHandle_t type) contained in the queue set that contains data,
1630  * or the handle of a semaphore (cast to a QueueSetMemberHandle_t type) contained
1631  * in the queue set that is available, or NULL if no such queue or semaphore
1632  * exists before before the specified block time expires.
1633  */
1635 
1636 /*
1637  * A version of xQueueSelectFromSet() that can be used from an ISR.
1638  */
1640 
1641 /* Not public API functions. */
1642 void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION;
1647 
1648 
1649 #ifdef __cplusplus
1650 }
1651 #endif
1652 
1653 #endif /* QUEUE_H */
1654 
xQueueGiveMutexRecursive
BaseType_t xQueueGiveMutexRecursive(QueueHandle_t pxMutex) PRIVILEGED_FUNCTION
xQueueSelectFromSet
QueueSetMemberHandle_t xQueueSelectFromSet(QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait) PRIVILEGED_FUNCTION
vQueueUnregisterQueue
#define vQueueUnregisterQueue(xQueue)
Definition: FreeRTOS.h:284
traceQUEUE_RECEIVE_FROM_ISR_FAILED
#define traceQUEUE_RECEIVE_FROM_ISR_FAILED(pxQueue)
Definition: FreeRTOS.h:477
traceTAKE_MUTEX_RECURSIVE_FAILED
#define traceTAKE_MUTEX_RECURSIVE_FAILED(pxMutex)
Definition: FreeRTOS.h:425
errQUEUE_FULL
#define errQUEUE_FULL
Definition: projdefs.h:51
xQueueGenericSend
BaseType_t xQueueGenericSend(QueueHandle_t xQueue, const void *const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition)
Definition: queue.c:726
croutine.h
task.h
xLIST
Definition: list.h:165
uxQueueType
#define uxQueueType
Definition: queue.c:68
QueueDefinition::uxItemSize
UBaseType_t uxItemSize
Definition: queue.c:106
pxMutexHolder
#define pxMutexHolder
Definition: queue.c:67
xTaskRemoveFromEventList
BaseType_t xTaskRemoveFromEventList(const List_t *const pxEventList) PRIVILEGED_FUNCTION
Definition: tasks.c:2983
vTaskPlaceOnEventList
void vTaskPlaceOnEventList(List_t *const pxEventList, const TickType_t xTicksToWait) PRIVILEGED_FUNCTION
Definition: tasks.c:2909
xQueueAddToSet
BaseType_t xQueueAddToSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet) PRIVILEGED_FUNCTION
xQueueGetMutexHolder
void * xQueueGetMutexHolder(QueueHandle_t xSemaphore) PRIVILEGED_FUNCTION
QueueDefinition::uxMessagesWaiting
volatile UBaseType_t uxMessagesWaiting
Definition: queue.c:104
uxQueueSpacesAvailable
UBaseType_t uxQueueSpacesAvailable(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION
Definition: queue.c:1912
xQueueCRSendFromISR
BaseType_t xQueueCRSendFromISR(QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken)
vPortFree
void vPortFree(void *pv)
Definition: heap_1.c:123
xQueueReceive
BaseType_t xQueueReceive(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait)
Definition: queue.c:1240
xQueueGiveFromISR
BaseType_t xQueueGiveFromISR(QueueHandle_t xQueue, BaseType_t *const pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION
Definition: queue.c:1075
vListInitialise
void vListInitialise(List_t *const pxList)
Definition: list.c:38
uxQueueGetQueueNumber
UBaseType_t uxQueueGetQueueNumber(QueueHandle_t xQueue) PRIVILEGED_FUNCTION
xQueueRemoveFromSet
BaseType_t xQueueRemoveFromSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet) PRIVILEGED_FUNCTION
queueYIELD_IF_USING_PREEMPTION
#define queueYIELD_IF_USING_PREEMPTION()
Definition: queue.c:81
traceGIVE_MUTEX_RECURSIVE_FAILED
#define traceGIVE_MUTEX_RECURSIVE_FAILED(pxMutex)
Definition: FreeRTOS.h:417
QueueDefinition::cRxLock
volatile int8_t cRxLock
Definition: queue.c:108
PRIVILEGED_DATA
#define PRIVILEGED_DATA
Definition: mpu_wrappers.h:175
listCURRENT_LIST_LENGTH
#define listCURRENT_LIST_LENGTH(pxList)
Definition: list.h:255
traceQUEUE_REGISTRY_ADD
#define traceQUEUE_REGISTRY_ADD(xQueue, pcQueueName)
Definition: FreeRTOS.h:609
pdFAIL
#define pdFAIL
Definition: projdefs.h:49
vTaskInternalSetTimeOutState
void vTaskInternalSetTimeOutState(TimeOut_t *const pxTimeOut) PRIVILEGED_FUNCTION
Definition: tasks.c:3097
Queue_t
xQUEUE Queue_t
Definition: queue.c:128
vCoRoutineAddToDelayedList
void vCoRoutineAddToDelayedList(TickType_t xTicksToDelay, List_t *pxEventList)
errQUEUE_BLOCKED
#define errQUEUE_BLOCKED
Definition: projdefs.h:55
queueQUEUE_TYPE_COUNTING_SEMAPHORE
#define queueQUEUE_TYPE_COUNTING_SEMAPHORE
Definition: queue.h:72
queueQUEUE_TYPE_SET
#define queueQUEUE_TYPE_SET
Definition: queue.h:70
QueueDefinition::u
union QueueDefinition::@2 u
prvCopyDataFromQueue
static void prvCopyDataFromQueue(Queue_t *const pxQueue, void *const pvBuffer) PRIVILEGED_FUNCTION
Definition: queue.c:2120
xQueueCRReceive
BaseType_t xQueueCRReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait)
xTaskCheckForTimeOut
BaseType_t xTaskCheckForTimeOut(TimeOut_t *const pxTimeOut, TickType_t *const pxTicksToWait) PRIVILEGED_FUNCTION
Definition: tasks.c:3105
xQueueGenericSendFromISR
BaseType_t xQueueGenericSendFromISR(QueueHandle_t xQueue, const void *const pvItemToQueue, BaseType_t *const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition) PRIVILEGED_FUNCTION
Definition: queue.c:924
QueueDefinition::uxLength
UBaseType_t uxLength
Definition: queue.c:105
traceQUEUE_RECEIVE
#define traceQUEUE_RECEIVE(pxQueue)
Definition: FreeRTOS.h:445
pcQueueGetName
#define pcQueueGetName(xQueue)
Definition: FreeRTOS.h:285
queueLOCKED_UNMODIFIED
#define queueLOCKED_UNMODIFIED
Definition: queue.c:54
QueueDefinition::cTxLock
volatile int8_t cTxLock
Definition: queue.c:109
traceQUEUE_PEEK_FAILED
#define traceQUEUE_PEEK_FAILED(pxQueue)
Definition: FreeRTOS.h:453
vTaskSuspendAll
void vTaskSuspendAll(void) PRIVILEGED_FUNCTION
Definition: tasks.c:2031
xQueueCRSend
BaseType_t xQueueCRSend(QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait)
xQueueCRReceiveFromISR
BaseType_t xQueueCRReceiveFromISR(QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken)
xQueueSemaphoreTake
BaseType_t xQueueSemaphoreTake(QueueHandle_t xQueue, TickType_t xTicksToWait) PRIVILEGED_FUNCTION
Definition: queue.c:1382
QueueDefinition::xTasksWaitingToSend
List_t xTasksWaitingToSend
Definition: queue.c:101
xQueueIsQueueFullFromISR
BaseType_t xQueueIsQueueFullFromISR(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION
Definition: queue.c:2318
uxQueueMessagesWaitingFromISR
UBaseType_t uxQueueMessagesWaitingFromISR(const QueueHandle_t xQueue)
Definition: queue.c:1930
xQueueGenericReset
BaseType_t xQueueGenericReset(QueueHandle_t xQueue, BaseType_t xNewQueue)
Definition: queue.c:248
pdPASS
#define pdPASS
Definition: projdefs.h:48
traceTAKE_MUTEX_RECURSIVE
#define traceTAKE_MUTEX_RECURSIVE(pxMutex)
Definition: FreeRTOS.h:421
PRIVILEGED_FUNCTION
#define PRIVILEGED_FUNCTION
Definition: mpu_wrappers.h:174
prvInitialiseNewQueue
static void prvInitialiseNewQueue(const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue) PRIVILEGED_FUNCTION
Definition: queue.c:409
QueueDefinition::pcHead
int8_t * pcHead
Definition: queue.c:91
QueueDefinition::uxRecursiveCallCount
UBaseType_t uxRecursiveCallCount
Definition: queue.c:98
xSTATIC_QUEUE
Definition: FreeRTOS.h:1048
TickType_t
uint32_t TickType_t
Definition: portmacro.h:64
queueUNLOCKED
#define queueUNLOCKED
Definition: queue.c:53
pvTaskIncrementMutexHeldCount
void * pvTaskIncrementMutexHeldCount(void) PRIVILEGED_FUNCTION
xQueueGiveFromISR
BaseType_t xQueueGiveFromISR(QueueHandle_t xQueue, BaseType_t *const pxHigherPriorityTaskWoken)
Definition: queue.c:1075
xQueueCreateCountingSemaphoreStatic
QueueHandle_t xQueueCreateCountingSemaphoreStatic(const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue) PRIVILEGED_FUNCTION
traceQUEUE_SEND_FROM_ISR_FAILED
#define traceQUEUE_SEND_FROM_ISR_FAILED(pxQueue)
Definition: FreeRTOS.h:469
vQueueWaitForMessageRestricted
void vQueueWaitForMessageRestricted(QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely) PRIVILEGED_FUNCTION
traceQUEUE_PEEK_FROM_ISR
#define traceQUEUE_PEEK_FROM_ISR(pxQueue)
Definition: FreeRTOS.h:457
traceQUEUE_SEND_FAILED
#define traceQUEUE_SEND_FAILED(pxQueue)
Definition: FreeRTOS.h:441
QueueDefinition::pcReadFrom
int8_t * pcReadFrom
Definition: queue.c:97
xQueueReceiveFromISR
BaseType_t xQueueReceiveFromISR(QueueHandle_t xQueue, void *const pvBuffer, BaseType_t *const pxHigherPriorityTaskWoken)
Definition: queue.c:1751
listGET_ITEM_VALUE_OF_HEAD_ENTRY
#define listGET_ITEM_VALUE_OF_HEAD_ENTRY(pxList)
Definition: list.h:217
xQueueTakeMutexRecursive
BaseType_t xQueueTakeMutexRecursive(QueueHandle_t xMutex, TickType_t xTicksToWait) PRIVILEGED_FUNCTION
taskENTER_CRITICAL
#define taskENTER_CRITICAL()
Definition: task.h:179
queueOVERWRITE
#define queueOVERWRITE
Definition: queue.h:66
pdFALSE
#define pdFALSE
Definition: projdefs.h:45
xQueueGetMutexHolderFromISR
void * xQueueGetMutexHolderFromISR(QueueHandle_t xSemaphore) PRIVILEGED_FUNCTION
xQueuePeekFromISR
BaseType_t xQueuePeekFromISR(QueueHandle_t xQueue, void *const pvBuffer)
Definition: queue.c:1842
QueueSetHandle_t
void * QueueSetHandle_t
Definition: queue.h:54
configMAX_PRIORITIES
#define configMAX_PRIORITIES
Definition: FreeRTOSConfig.h:22
traceCREATE_MUTEX
#define traceCREATE_MUTEX(pxNewQueue)
Definition: FreeRTOS.h:405
StaticQueue_t
struct xSTATIC_QUEUE StaticQueue_t
queueSEND_TO_BACK
#define queueSEND_TO_BACK
Definition: queue.h:64
xQueueIsQueueEmptyFromISR
BaseType_t xQueueIsQueueEmptyFromISR(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION
Definition: queue.c:2279
UBaseType_t
unsigned long UBaseType_t
Definition: portmacro.h:58
prvLockQueue
#define prvLockQueue(pxQueue)
Definition: queue.c:233
xQueuePeekFromISR
BaseType_t xQueuePeekFromISR(QueueHandle_t xQueue, void *const pvBuffer) PRIVILEGED_FUNCTION
Definition: queue.c:1842
xTIME_OUT
Definition: task.h:95
traceQUEUE_PEEK
#define traceQUEUE_PEEK(pxQueue)
Definition: FreeRTOS.h:449
xQueueReceive
BaseType_t xQueueReceive(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait) PRIVILEGED_FUNCTION
Definition: queue.c:1240
portDISABLE_INTERRUPTS
#define portDISABLE_INTERRUPTS()
Definition: portmacro.h:105
traceQUEUE_PEEK_FROM_ISR_FAILED
#define traceQUEUE_PEEK_FROM_ISR_FAILED(pxQueue)
Definition: FreeRTOS.h:481
traceBLOCKING_ON_QUEUE_SEND
#define traceBLOCKING_ON_QUEUE_SEND(pxQueue)
Definition: FreeRTOS.h:371
queue.h
xQueuePeek
BaseType_t xQueuePeek(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait) PRIVILEGED_FUNCTION
Definition: queue.c:1601
traceCREATE_COUNTING_SEMAPHORE
#define traceCREATE_COUNTING_SEMAPHORE()
Definition: FreeRTOS.h:429
xQueueIsQueueFullFromISR
BaseType_t xQueueIsQueueFullFromISR(const QueueHandle_t xQueue)
Definition: queue.c:2318
listLIST_IS_EMPTY
#define listLIST_IS_EMPTY(pxList)
Definition: list.h:250
prvCopyDataToQueue
static BaseType_t prvCopyDataToQueue(Queue_t *const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition) PRIVILEGED_FUNCTION
Definition: queue.c:2041
xQueueReceiveFromISR
BaseType_t xQueueReceiveFromISR(QueueHandle_t xQueue, void *const pvBuffer, BaseType_t *const pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION
Definition: queue.c:1751
uxQueueMessagesWaiting
UBaseType_t uxQueueMessagesWaiting(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION
Definition: queue.c:1896
traceGIVE_MUTEX_RECURSIVE
#define traceGIVE_MUTEX_RECURSIVE(pxMutex)
Definition: FreeRTOS.h:413
traceQUEUE_RECEIVE_FROM_ISR
#define traceQUEUE_RECEIVE_FROM_ISR(pxQueue)
Definition: FreeRTOS.h:473
QueueDefinition
Definition: queue.c:90
configQUEUE_REGISTRY_SIZE
#define configQUEUE_REGISTRY_SIZE
Definition: FreeRTOSConfig.h:27
vTaskPriorityDisinheritAfterTimeout
void vTaskPriorityDisinheritAfterTimeout(TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask) PRIVILEGED_FUNCTION
QueueDefinition::xTasksWaitingToReceive
List_t xTasksWaitingToReceive
Definition: queue.c:102
taskSCHEDULER_SUSPENDED
#define taskSCHEDULER_SUSPENDED
Definition: task.h:219
prvIsQueueFull
static BaseType_t prvIsQueueFull(const Queue_t *pxQueue) PRIVILEGED_FUNCTION
Definition: queue.c:2297
xQueueCreateCountingSemaphore
QueueHandle_t xQueueCreateCountingSemaphore(const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount) PRIVILEGED_FUNCTION
uxQueueMessagesWaiting
UBaseType_t uxQueueMessagesWaiting(const QueueHandle_t xQueue)
Definition: queue.c:1896
FreeRTOS.h
errQUEUE_YIELD
#define errQUEUE_YIELD
Definition: projdefs.h:56
traceQUEUE_SEND_FROM_ISR
#define traceQUEUE_SEND_FROM_ISR(pxQueue)
Definition: FreeRTOS.h:465
errQUEUE_EMPTY
#define errQUEUE_EMPTY
Definition: projdefs.h:50
portASSERT_IF_INTERRUPT_PRIORITY_INVALID
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID()
Definition: FreeRTOS.h:779
xQueueCreateMutex
QueueHandle_t xQueueCreateMutex(const uint8_t ucQueueType) PRIVILEGED_FUNCTION
portENABLE_INTERRUPTS
#define portENABLE_INTERRUPTS()
Definition: portmacro.h:106
xQueueGenericCreate
QueueHandle_t xQueueGenericCreate(const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType)
Definition: queue.c:359
portCLEAR_INTERRUPT_MASK_FROM_ISR
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)
Definition: portmacro.h:110
traceCREATE_COUNTING_SEMAPHORE_FAILED
#define traceCREATE_COUNTING_SEMAPHORE_FAILED()
Definition: FreeRTOS.h:433
vQueueDelete
void vQueueDelete(QueueHandle_t xQueue)
Definition: queue.c:1942
traceBLOCKING_ON_QUEUE_RECEIVE
#define traceBLOCKING_ON_QUEUE_RECEIVE(pxQueue)
Definition: FreeRTOS.h:355
portYIELD_WITHIN_API
#define portYIELD_WITHIN_API
Definition: FreeRTOS.h:723
traceQUEUE_SEND
#define traceQUEUE_SEND(pxQueue)
Definition: FreeRTOS.h:437
BaseType_t
long BaseType_t
Definition: portmacro.h:57
pdTRUE
#define pdTRUE
Definition: projdefs.h:46
QueueHandle_t
void * QueueHandle_t
Definition: queue.h:47
queueMUTEX_GIVE_BLOCK_TIME
#define queueMUTEX_GIVE_BLOCK_TIME
Definition: queue.c:74
ucQueueGetQueueType
uint8_t ucQueueGetQueueType(QueueHandle_t xQueue) PRIVILEGED_FUNCTION
traceQUEUE_RECEIVE_FAILED
#define traceQUEUE_RECEIVE_FAILED(pxQueue)
Definition: FreeRTOS.h:461
xQueueGenericSend
BaseType_t xQueueGenericSend(QueueHandle_t xQueue, const void *const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition) PRIVILEGED_FUNCTION
Definition: queue.c:726
vTaskMissedYield
void vTaskMissedYield(void) PRIVILEGED_FUNCTION
Definition: tasks.c:3168
xQueueSelectFromSetFromISR
QueueSetMemberHandle_t xQueueSelectFromSetFromISR(QueueSetHandle_t xQueueSet) PRIVILEGED_FUNCTION
traceQUEUE_DELETE
#define traceQUEUE_DELETE(pxQueue)
Definition: FreeRTOS.h:485
prvIsQueueEmpty
static BaseType_t prvIsQueueEmpty(const Queue_t *pxQueue) PRIVILEGED_FUNCTION
Definition: queue.c:2258
xTaskGetCurrentTaskHandle
TaskHandle_t xTaskGetCurrentTaskHandle(void) PRIVILEGED_FUNCTION
Definition: tasks.c:3755
vQueueAddToRegistry
#define vQueueAddToRegistry(xQueue, pcName)
Definition: FreeRTOS.h:283
xQueueGenericSendFromISR
BaseType_t xQueueGenericSendFromISR(QueueHandle_t xQueue, const void *const pvItemToQueue, BaseType_t *const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition)
Definition: queue.c:924
xCoRoutineRemoveFromEventList
BaseType_t xCoRoutineRemoveFromEventList(const List_t *pxEventList)
traceCREATE_MUTEX_FAILED
#define traceCREATE_MUTEX_FAILED()
Definition: FreeRTOS.h:409
traceQUEUE_CREATE_FAILED
#define traceQUEUE_CREATE_FAILED(ucQueueType)
Definition: FreeRTOS.h:401
taskEXIT_CRITICAL
#define taskEXIT_CRITICAL()
Definition: task.h:194
xTaskPriorityInherit
BaseType_t xTaskPriorityInherit(TaskHandle_t const pxMutexHolder) PRIVILEGED_FUNCTION
queueSEMAPHORE_QUEUE_ITEM_LENGTH
#define queueSEMAPHORE_QUEUE_ITEM_LENGTH
Definition: queue.c:73
vQueueSetQueueNumber
void vQueueSetQueueNumber(QueueHandle_t xQueue, UBaseType_t uxQueueNumber) PRIVILEGED_FUNCTION
QueueDefinition::pcTail
int8_t * pcTail
Definition: queue.c:92
xTaskResumeAll
BaseType_t xTaskResumeAll(void) PRIVILEGED_FUNCTION
Definition: tasks.c:2104
xTaskGetSchedulerState
BaseType_t xTaskGetSchedulerState(void) PRIVILEGED_FUNCTION
configASSERT
#define configASSERT(x)
Definition: FreeRTOS.h:235
xQueueIsQueueEmptyFromISR
BaseType_t xQueueIsQueueEmptyFromISR(const QueueHandle_t xQueue)
Definition: queue.c:2279
vQueueDelete
void vQueueDelete(QueueHandle_t xQueue) PRIVILEGED_FUNCTION
Definition: queue.c:1942
traceQUEUE_CREATE
#define traceQUEUE_CREATE(pxNewQueue)
Definition: FreeRTOS.h:397
uxQueueSpacesAvailable
UBaseType_t uxQueueSpacesAvailable(const QueueHandle_t xQueue)
Definition: queue.c:1912
xQueuePeek
BaseType_t xQueuePeek(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait)
Definition: queue.c:1601
uxQueueMessagesWaitingFromISR
UBaseType_t uxQueueMessagesWaitingFromISR(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION
Definition: queue.c:1930
xQueueCreateSet
QueueSetHandle_t xQueueCreateSet(const UBaseType_t uxEventQueueLength) PRIVILEGED_FUNCTION
xTaskPriorityDisinherit
BaseType_t xTaskPriorityDisinherit(TaskHandle_t const pxMutexHolder) PRIVILEGED_FUNCTION
prvUnlockQueue
static void prvUnlockQueue(Queue_t *const pxQueue) PRIVILEGED_FUNCTION
Definition: queue.c:2138
xQueueSemaphoreTake
BaseType_t xQueueSemaphoreTake(QueueHandle_t xQueue, TickType_t xTicksToWait)
Definition: queue.c:1382
QueueDefinition::pcWriteTo
int8_t * pcWriteTo
Definition: queue.c:93
xQueueCreateMutexStatic
QueueHandle_t xQueueCreateMutexStatic(const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue) PRIVILEGED_FUNCTION
traceBLOCKING_ON_QUEUE_PEEK
#define traceBLOCKING_ON_QUEUE_PEEK(pxQueue)
Definition: FreeRTOS.h:363
QueueSetMemberHandle_t
void * QueueSetMemberHandle_t
Definition: queue.h:61
xQueueGenericReset
BaseType_t xQueueGenericReset(QueueHandle_t xQueue, BaseType_t xNewQueue) PRIVILEGED_FUNCTION
Definition: queue.c:248
vTaskPlaceOnEventListRestricted
void vTaskPlaceOnEventListRestricted(List_t *const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely) PRIVILEGED_FUNCTION
tskIDLE_PRIORITY
#define tskIDLE_PRIORITY
Definition: task.h:155
portSET_INTERRUPT_MASK_FROM_ISR
#define portSET_INTERRUPT_MASK_FROM_ISR()
Definition: portmacro.h:109
xQUEUE
struct QueueDefinition xQUEUE
queueQUEUE_IS_MUTEX
#define queueQUEUE_IS_MUTEX
Definition: queue.c:69
mtCOVERAGE_TEST_MARKER
#define mtCOVERAGE_TEST_MARKER()
Definition: FreeRTOS.h:787
pvPortMalloc
void * pvPortMalloc(size_t xWantedSize)
Definition: heap_1.c:71