mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Correct the definition of StaticTask_t and add additional configASSERT() statements to catch future errors.
This commit is contained in:
parent
40201bc253
commit
5c75e5a38a
|
@ -139,6 +139,16 @@ static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, co
|
||||||
/* A StaticEventGroup_t object must be provided. */
|
/* A StaticEventGroup_t object must be provided. */
|
||||||
configASSERT( pxEventGroupBuffer );
|
configASSERT( pxEventGroupBuffer );
|
||||||
|
|
||||||
|
#if( configASSERT_DEFINED == 1 )
|
||||||
|
{
|
||||||
|
/* Sanity check that the size of the structure used to declare a
|
||||||
|
variable of type StaticEventGroup_t equals the size of the real
|
||||||
|
event group structure. */
|
||||||
|
volatile size_t xSize = sizeof( StaticEventGroup_t );
|
||||||
|
configASSERT( xSize == sizeof( EventGroup_t ) );
|
||||||
|
}
|
||||||
|
#endif /* configASSERT_DEFINED */
|
||||||
|
|
||||||
/* The user has provided a statically allocated event group - use it. */
|
/* The user has provided a statically allocated event group - use it. */
|
||||||
pxEventBits = ( EventGroup_t * ) pxEventGroupBuffer; /*lint !e740 EventGroup_t and StaticEventGroup_t are guaranteed to have the same size and alignment requirement - checked by configASSERT(). */
|
pxEventBits = ( EventGroup_t * ) pxEventGroupBuffer; /*lint !e740 EventGroup_t and StaticEventGroup_t are guaranteed to have the same size and alignment requirement - checked by configASSERT(). */
|
||||||
|
|
||||||
|
|
|
@ -953,10 +953,14 @@ typedef struct xSTATIC_TCB
|
||||||
uint32_t ulDummy18;
|
uint32_t ulDummy18;
|
||||||
uint8_t ucDummy19;
|
uint8_t ucDummy19;
|
||||||
#endif
|
#endif
|
||||||
#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
|
#if( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) || ( portUSING_MPU_WRAPPERS == 1 ) )
|
||||||
uint8_t uxDummy20;
|
uint8_t uxDummy20;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if( INCLUDE_xTaskAbortDelay == 1 )
|
||||||
|
uint8_t ucDummy21;
|
||||||
|
#endif
|
||||||
|
|
||||||
} StaticTask_t;
|
} StaticTask_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -131,7 +131,9 @@ made to free the RAM that was allocated statically.
|
||||||
tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a
|
tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a
|
||||||
task to be created using either statically or dynamically allocated RAM. Note
|
task to be created using either statically or dynamically allocated RAM. Note
|
||||||
that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with
|
that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with
|
||||||
a statically allocated stack and a dynamically allocated TCB. */
|
a statically allocated stack and a dynamically allocated TCB.
|
||||||
|
!!!NOTE!!! If the definition of tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is
|
||||||
|
changed then the definition of StaticTask_t must also be updated. */
|
||||||
#define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE ( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) || ( portUSING_MPU_WRAPPERS == 1 ) )
|
#define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE ( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) || ( portUSING_MPU_WRAPPERS == 1 ) )
|
||||||
#define tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 0 )
|
#define tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 0 )
|
||||||
#define tskSTATICALLY_ALLOCATED_STACK_ONLY ( ( uint8_t ) 1 )
|
#define tskSTATICALLY_ALLOCATED_STACK_ONLY ( ( uint8_t ) 1 )
|
||||||
|
@ -436,15 +438,21 @@ PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t
|
||||||
|
|
||||||
/* Callback function prototypes. --------------------------*/
|
/* Callback function prototypes. --------------------------*/
|
||||||
#if( configCHECK_FOR_STACK_OVERFLOW > 0 )
|
#if( configCHECK_FOR_STACK_OVERFLOW > 0 )
|
||||||
|
|
||||||
extern void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName );
|
extern void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if( configUSE_TICK_HOOK > 0 )
|
#if( configUSE_TICK_HOOK > 0 )
|
||||||
|
|
||||||
extern void vApplicationTickHook( void );
|
extern void vApplicationTickHook( void );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
|
|
||||||
extern void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );
|
extern void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* File private functions. --------------------------------*/
|
/* File private functions. --------------------------------*/
|
||||||
|
@ -455,7 +463,9 @@ PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t
|
||||||
* is in any other state.
|
* is in any other state.
|
||||||
*/
|
*/
|
||||||
#if ( INCLUDE_vTaskSuspend == 1 )
|
#if ( INCLUDE_vTaskSuspend == 1 )
|
||||||
|
|
||||||
static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif /* INCLUDE_vTaskSuspend */
|
#endif /* INCLUDE_vTaskSuspend */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -588,6 +598,17 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
*/
|
*/
|
||||||
static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION;
|
static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* freertos_tasks_c_additions_init() should only be called if the user definable
|
||||||
|
* macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is the only macro
|
||||||
|
* called by the function.
|
||||||
|
*/
|
||||||
|
#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT
|
||||||
|
|
||||||
|
static void freertos_tasks_c_additions_init( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
|
@ -606,6 +627,17 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
configASSERT( puxStackBuffer != NULL );
|
configASSERT( puxStackBuffer != NULL );
|
||||||
configASSERT( pxTaskBuffer != NULL );
|
configASSERT( pxTaskBuffer != NULL );
|
||||||
|
|
||||||
|
#if( configASSERT_DEFINED == 1 )
|
||||||
|
{
|
||||||
|
/* Sanity check that the size of the structure used to declare a
|
||||||
|
variable of type StaticTask_t equals the size of the real task
|
||||||
|
structure. */
|
||||||
|
volatile size_t xSize = sizeof( StaticTask_t );
|
||||||
|
configASSERT( xSize == sizeof( TCB_t ) );
|
||||||
|
}
|
||||||
|
#endif /* configASSERT_DEFINED */
|
||||||
|
|
||||||
|
|
||||||
if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
|
if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
|
||||||
{
|
{
|
||||||
/* The memory used for the task's TCB and stack are passed into this
|
/* The memory used for the task's TCB and stack are passed into this
|
||||||
|
@ -1897,6 +1929,15 @@ BaseType_t xReturn;
|
||||||
|
|
||||||
if( xReturn == pdPASS )
|
if( xReturn == pdPASS )
|
||||||
{
|
{
|
||||||
|
/* freertos_tasks_c_additions_init() should only be called if the user
|
||||||
|
definable macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is
|
||||||
|
the only macro called by the function. */
|
||||||
|
#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT
|
||||||
|
{
|
||||||
|
freertos_tasks_c_additions_init();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Interrupts are turned off here, to ensure a tick does not occur
|
/* Interrupts are turned off here, to ensure a tick does not occur
|
||||||
before or during the call to xPortStartScheduler(). The stacks of
|
before or during the call to xPortStartScheduler(). The stacks of
|
||||||
the created tasks contain a status word with interrupts switched on
|
the created tasks contain a status word with interrupts switched on
|
||||||
|
|
|
@ -356,7 +356,7 @@ BaseType_t xReturn = pdFAIL;
|
||||||
{
|
{
|
||||||
/* Sanity check that the size of the structure used to declare a
|
/* Sanity check that the size of the structure used to declare a
|
||||||
variable of type StaticTimer_t equals the size of the real timer
|
variable of type StaticTimer_t equals the size of the real timer
|
||||||
structures. */
|
structure. */
|
||||||
volatile size_t xSize = sizeof( StaticTimer_t );
|
volatile size_t xSize = sizeof( StaticTimer_t );
|
||||||
configASSERT( xSize == sizeof( Timer_t ) );
|
configASSERT( xSize == sizeof( Timer_t ) );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue