]> git.sur5r.net Git - freertos/commitdiff
Correct the definition of StaticTask_t and add additional configASSERT() statements...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 14 Sep 2016 08:21:24 +0000 (08:21 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 14 Sep 2016 08:21:24 +0000 (08:21 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2470 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/event_groups.c
FreeRTOS/Source/include/FreeRTOS.h
FreeRTOS/Source/tasks.c
FreeRTOS/Source/timers.c

index 3780fe865088156714c448cfae2234fcc528f8d6..5a21e2d05c284bc7f849a16326d3236ba9d1fd90 100644 (file)
@@ -139,6 +139,16 @@ static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, co
                /* A StaticEventGroup_t object must be provided. */\r
                configASSERT( pxEventGroupBuffer );\r
 \r
+               #if( configASSERT_DEFINED == 1 )\r
+               {\r
+                       /* Sanity check that the size of the structure used to declare a\r
+                       variable of type StaticEventGroup_t equals the size of the real\r
+                       event group structure. */\r
+                       volatile size_t xSize = sizeof( StaticEventGroup_t );\r
+                       configASSERT( xSize == sizeof( EventGroup_t ) );\r
+               }\r
+               #endif /* configASSERT_DEFINED */\r
+\r
                /* The user has provided a statically allocated event group - use it. */\r
                pxEventBits = ( EventGroup_t * ) pxEventGroupBuffer; /*lint !e740 EventGroup_t and StaticEventGroup_t are guaranteed to have the same size and alignment requirement - checked by configASSERT(). */\r
 \r
index 89e638a080b0cb55ef356fa45474f02084e24020..aeb4b876ddf209945a371e55d58f5430f7d89b02 100644 (file)
@@ -953,10 +953,14 @@ typedef struct xSTATIC_TCB
                uint32_t                ulDummy18;\r
                uint8_t                 ucDummy19;\r
        #endif\r
-       #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\r
+       #if( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) || ( portUSING_MPU_WRAPPERS == 1 ) )\r
                uint8_t                 uxDummy20;\r
        #endif\r
 \r
+       #if( INCLUDE_xTaskAbortDelay == 1 )\r
+               uint8_t ucDummy21;\r
+       #endif\r
+\r
 } StaticTask_t;\r
 \r
 /*\r
index ec08e448dbd43e3d2d81d52d957bb6b21763b714..8a296ba53d519f81b8d9024ba1dce1c5dcef54f8 100644 (file)
@@ -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\r
 task to be created using either statically or dynamically allocated RAM.  Note\r
 that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with\r
-a statically allocated stack and a dynamically allocated TCB. */\r
+a statically allocated stack and a dynamically allocated TCB.\r
+!!!NOTE!!! If the definition of tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is\r
+changed then the definition of StaticTask_t must also be updated. */\r
 #define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE ( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) || ( portUSING_MPU_WRAPPERS == 1 ) )\r
 #define tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB                 ( ( uint8_t ) 0 )\r
 #define tskSTATICALLY_ALLOCATED_STACK_ONLY                     ( ( uint8_t ) 1 )\r
@@ -436,15 +438,21 @@ PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended  = ( UBaseType_t
 \r
 /* Callback function prototypes. --------------------------*/\r
 #if(  configCHECK_FOR_STACK_OVERFLOW > 0 )\r
+\r
        extern void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName );\r
+\r
 #endif\r
 \r
 #if( configUSE_TICK_HOOK > 0 )\r
+\r
        extern void vApplicationTickHook( void );\r
+\r
 #endif\r
 \r
 #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
+\r
        extern void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );\r
+\r
 #endif\r
 \r
 /* File private functions. --------------------------------*/\r
@@ -455,7 +463,9 @@ PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended    = ( UBaseType_t
  * is in any other state.\r
  */\r
 #if ( INCLUDE_vTaskSuspend == 1 )\r
+\r
        static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\r
+\r
 #endif /* INCLUDE_vTaskSuspend */\r
 \r
 /*\r
@@ -588,6 +598,17 @@ static void prvInitialiseNewTask(  TaskFunction_t pxTaskCode,
  */\r
 static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION;\r
 \r
+/*\r
+ * freertos_tasks_c_additions_init() should only be called if the user definable\r
+ * macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is the only macro\r
+ * called by the function.\r
+ */\r
+#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT\r
+\r
+       static void freertos_tasks_c_additions_init( void ) PRIVILEGED_FUNCTION;\r
+\r
+#endif\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
@@ -606,6 +627,17 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION;
                configASSERT( puxStackBuffer != NULL );\r
                configASSERT( pxTaskBuffer != NULL );\r
 \r
+               #if( configASSERT_DEFINED == 1 )\r
+               {\r
+                       /* Sanity check that the size of the structure used to declare a\r
+                       variable of type StaticTask_t equals the size of the real task\r
+                       structure. */\r
+                       volatile size_t xSize = sizeof( StaticTask_t );\r
+                       configASSERT( xSize == sizeof( TCB_t ) );\r
+               }\r
+               #endif /* configASSERT_DEFINED */\r
+\r
+\r
                if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )\r
                {\r
                        /* The memory used for the task's TCB and stack are passed into this\r
@@ -1897,6 +1929,15 @@ BaseType_t xReturn;
 \r
        if( xReturn == pdPASS )\r
        {\r
+               /* freertos_tasks_c_additions_init() should only be called if the user\r
+               definable macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is\r
+               the only macro called by the function. */\r
+               #ifdef FREERTOS_TASKS_C_ADDITIONS_INIT\r
+               {\r
+                       freertos_tasks_c_additions_init();\r
+               }\r
+               #endif\r
+\r
                /* Interrupts are turned off here, to ensure a tick does not occur\r
                before or during the call to xPortStartScheduler().  The stacks of\r
                the created tasks contain a status word with interrupts switched on\r
index f5e1e59a181c154258a6397858c085c1ba7ff5a5..0009a27b59694b7c105922c35103b030da92fe9b 100644 (file)
@@ -356,7 +356,7 @@ BaseType_t xReturn = pdFAIL;
                {\r
                        /* Sanity check that the size of the structure used to declare a\r
                        variable of type StaticTimer_t equals the size of the real timer\r
-                       structures. */\r
+                       structure. */\r
                        volatile size_t xSize = sizeof( StaticTimer_t );\r
                        configASSERT( xSize == sizeof( Timer_t ) );\r
                }\r