mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-08-19 17:48:33 -04:00
Add xQueueCreateSetStatic method for static allocation of Queue Sets (#1228)
Add xQueueCreateSetStatic method for static allocation of Queue Sets This commit introduces the xQueueCreateSetStatic function, which allows for the static allocation of Queue Sets in FreeRTOS when both configUSE_QUEUE_SETS and configSUPPORT_STATIC_ALLOCATION are enabled.
This commit is contained in:
parent
b5d1b972cc
commit
1b8f5965d3
7 changed files with 164 additions and 8 deletions
|
@ -1524,6 +1524,34 @@
|
|||
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
||||
QueueSetHandle_t MPU_xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
|
||||
uint8_t * pucQueueStorage,
|
||||
StaticQueue_t * pxStaticQueue ) /* FREERTOS_SYSTEM_CALL */
|
||||
{
|
||||
QueueSetHandle_t xReturn;
|
||||
|
||||
if( portIS_PRIVILEGED() == pdFALSE )
|
||||
{
|
||||
portRAISE_PRIVILEGE();
|
||||
portMEMORY_BARRIER();
|
||||
|
||||
xReturn = xQueueCreateSetStatic( uxEventQueueLength, pucQueueStorage, pxStaticQueue );
|
||||
portMEMORY_BARRIER();
|
||||
|
||||
portRESET_PRIVILEGE();
|
||||
portMEMORY_BARRIER();
|
||||
}
|
||||
else
|
||||
{
|
||||
xReturn = xQueueCreateSetStatic( uxEventQueueLength, pucQueueStorage, pxStaticQueue );
|
||||
}
|
||||
|
||||
return xReturn;
|
||||
}
|
||||
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#if ( configUSE_QUEUE_SETS == 1 )
|
||||
QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet,
|
||||
TickType_t xBlockTimeTicks ) /* FREERTOS_SYSTEM_CALL */
|
||||
|
|
|
@ -3016,6 +3016,39 @@
|
|||
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
||||
|
||||
QueueSetHandle_t MPU_xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
|
||||
uint8_t * pucQueueStorage,
|
||||
StaticQueue_t * pxStaticQueue ) /* PRIVILEGED_FUNCTION */
|
||||
{
|
||||
QueueSetHandle_t xInternalQueueSetHandle = NULL;
|
||||
QueueSetHandle_t xExternalQueueSetHandle = NULL;
|
||||
int32_t lIndex;
|
||||
|
||||
lIndex = MPU_GetFreeIndexInKernelObjectPool();
|
||||
|
||||
if( lIndex != -1 )
|
||||
{
|
||||
xInternalQueueSetHandle = xQueueCreateSetStatic( uxEventQueueLength, pucQueueStorage, pxStaticQueue );
|
||||
|
||||
if( xInternalQueueSetHandle != NULL )
|
||||
{
|
||||
MPU_StoreQueueSetHandleAtIndex( lIndex, xInternalQueueSetHandle );
|
||||
xExternalQueueSetHandle = ( QueueSetHandle_t ) CONVERT_TO_EXTERNAL_INDEX( lIndex );
|
||||
}
|
||||
else
|
||||
{
|
||||
MPU_SetIndexFreeInKernelObjectPool( lIndex );
|
||||
}
|
||||
}
|
||||
|
||||
return xExternalQueueSetHandle;
|
||||
}
|
||||
|
||||
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#if ( configUSE_QUEUE_SETS == 1 )
|
||||
|
||||
BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue