]> git.sur5r.net Git - freertos/commitdiff
Add additional asserts() to ensure certain operations are not performed when the...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 24 Nov 2013 10:11:16 +0000 (10:11 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 24 Nov 2013 10:11:16 +0000 (10:11 +0000)
Change the xBlockTime variables in event_groups.c/h to xTicksToWait to match the naming in other core FreeRTOS files.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2116 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/event_groups.c
FreeRTOS/Source/include/event_groups.h
FreeRTOS/Source/include/task.h
FreeRTOS/Source/queue.c
FreeRTOS/Source/tasks.c

index a49d0a1f65e4ecc9bb4188d2ef6979105d163bae..09ddbee542be860d96c502e0cf0d6f253e71efa7 100644 (file)
@@ -134,12 +134,18 @@ xEVENT_BITS *pxEventBits;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-xEventBitsType xEventGroupSync( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToSet, xEventBitsType uxBitsToWaitFor, portTickType xBlockTime )\r
+xEventBitsType xEventGroupSync( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToSet, xEventBitsType uxBitsToWaitFor, portTickType xTicksToWait )\r
 {\r
 xEventBitsType uxOriginalBitValue, uxReturn;\r
 xEVENT_BITS *pxEventBits = ( xEVENT_BITS * ) xEventGroup;\r
 portBASE_TYPE xYieldedAlready;\r
 \r
+       #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\r
+       {\r
+               configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\r
+       }\r
+       #endif\r
+\r
        vTaskSuspendAll();\r
        {\r
                uxOriginalBitValue = pxEventBits->uxEventBits;\r
@@ -156,16 +162,16 @@ portBASE_TYPE xYieldedAlready;
                        already unless this is the only task in the rendezvous. */\r
                        pxEventBits->uxEventBits &= uxBitsToWaitFor;\r
 \r
-                       xBlockTime = 0;\r
+                       xTicksToWait = 0;\r
                }\r
                else\r
                {\r
-                       if( xBlockTime != ( portTickType ) 0 )\r
+                       if( xTicksToWait != ( portTickType ) 0 )\r
                        {\r
                                /* Store the bits that the calling task is waiting for in the\r
                                task's event list item so the kernel knows when a match is\r
                                found.  Then enter the blocked state. */\r
-                               vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | taskCLEAR_EVENTS_ON_EXIT_BIT | taskWAIT_FOR_ALL_BITS ), xBlockTime );\r
+                               vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | taskCLEAR_EVENTS_ON_EXIT_BIT | taskWAIT_FOR_ALL_BITS ), xTicksToWait );\r
                        }\r
                        else\r
                        {\r
@@ -177,7 +183,7 @@ portBASE_TYPE xYieldedAlready;
        }\r
        xYieldedAlready = xTaskResumeAll();\r
 \r
-       if( xBlockTime != ( portTickType ) 0 )\r
+       if( xTicksToWait != ( portTickType ) 0 )\r
        {\r
                if( xYieldedAlready == pdFALSE )\r
                {\r
@@ -207,7 +213,7 @@ portBASE_TYPE xYieldedAlready;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-xEventBitsType xEventGroupWaitBits( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToWaitFor, portBASE_TYPE xClearOnExit, portBASE_TYPE xWaitForAllBits, portTickType xBlockTime )\r
+xEventBitsType xEventGroupWaitBits( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToWaitFor, portBASE_TYPE xClearOnExit, portBASE_TYPE xWaitForAllBits, portTickType xTicksToWait )\r
 {\r
 xEVENT_BITS *pxEventBits = ( xEVENT_BITS * ) xEventGroup;\r
 const xEventBitsType uxCurrentEventBits = pxEventBits->uxEventBits;\r
@@ -217,6 +223,11 @@ xEventBitsType uxReturn, uxControlBits = 0;
        itself, and that at least one bit is being requested. */\r
        configASSERT( ( uxBitsToWaitFor & taskEVENT_BITS_CONTROL_BYTES ) == 0 );\r
        configASSERT( uxBitsToWaitFor != 0 );\r
+       #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\r
+       {\r
+               configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\r
+       }\r
+       #endif\r
 \r
        taskENTER_CRITICAL();\r
        {\r
@@ -227,7 +238,7 @@ xEventBitsType uxReturn, uxControlBits = 0;
                        if( ( uxCurrentEventBits & uxBitsToWaitFor ) != ( xEventBitsType ) 0 )\r
                        {\r
                                /* At least one of the bits was set.  No need to block. */\r
-                               xBlockTime = 0;\r
+                               xTicksToWait = 0;\r
                        }\r
                }\r
                else\r
@@ -237,13 +248,13 @@ xEventBitsType uxReturn, uxControlBits = 0;
                        if( ( uxCurrentEventBits & uxBitsToWaitFor ) == uxBitsToWaitFor )\r
                        {\r
                                /* All the bits were set, no need to block. */\r
-                               xBlockTime = 0;\r
+                               xTicksToWait = 0;\r
                        }\r
                }\r
 \r
                /* The task can return now if either its wait condition is already met\r
                or the requested block time is 0. */\r
-               if( xBlockTime == ( portTickType ) 0 )\r
+               if( xTicksToWait == ( portTickType ) 0 )\r
                {\r
                        /* No need to block, just set the return value. */\r
                        uxReturn = uxCurrentEventBits;\r
@@ -274,13 +285,13 @@ xEventBitsType uxReturn, uxControlBits = 0;
                        /* Store the bits that the calling task is waiting for in the\r
                        task's event list item so the kernel knows when a match is\r
                        found.  Then enter the blocked state. */\r
-                       vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | uxControlBits ), xBlockTime );\r
+                       vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | uxControlBits ), xTicksToWait );\r
                        portYIELD_WITHIN_API();\r
                }\r
        }\r
        taskEXIT_CRITICAL();\r
 \r
-       if( xBlockTime != ( portTickType ) 0 )\r
+       if( xTicksToWait != ( portTickType ) 0 )\r
        {\r
                /* The task blocked to wait for its required bits to be set - at this\r
                point either the required bits were set or the block time expired.  If\r
@@ -345,9 +356,10 @@ portBASE_TYPE xMatchFound = pdFALSE;
 \r
        pxList = &( pxEventBits->xTasksWaitingForBits );\r
        pxListEnd = listGET_END_MARKER( pxList ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */\r
-       pxListItem = listGET_HEAD_ENTRY( pxList );\r
        vTaskSuspendAll();\r
        {\r
+               pxListItem = listGET_HEAD_ENTRY( pxList );\r
+\r
                /* Set the bits. */\r
                pxEventBits->uxEventBits |= uxBitsToSet;\r
 \r
index 36a4c85b319fdea42e00728186edbb81b771930b..3ca5ac3f5fb464a2076adb31750857b23686904f 100644 (file)
@@ -168,7 +168,7 @@ xEventGroupHandle xEventGroupCreate( void ) PRIVILEGED_FUNCTION;
                                                                                xEventBitsType uxBitsToWaitFor,\r
                                                                                portBASE_TYPE xClearOnExit,\r
                                                                                portBASE_TYPE xWaitForAllBits,\r
-                                                                               portTickType xBlockTime );\r
+                                                                               portTickType xTicksToWait );\r
  </pre>\r
  *\r
  * [Potentially] block to wait for one or more bits to be set within a\r
@@ -197,7 +197,7 @@ xEventGroupHandle xEventGroupCreate( void ) PRIVILEGED_FUNCTION;
  * pdFALSE then xEventGroupWaitBits() will return when any one of the bits set\r
  * in uxBitsToWaitFor is set or the specified block time expires.\r
  *\r
- * @param xBlockTime The maximum amount of time (specified in 'ticks') to wait\r
+ * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait\r
  * for one/all (depending on the xWaitForAllBits value) of the bits specified by\r
  * uxBitsToWaitFor to become set.\r
  *\r
@@ -217,7 +217,7 @@ xEventGroupHandle xEventGroupCreate( void ) PRIVILEGED_FUNCTION;
    void aFunction( xEventGroupHandle xEventGroup )\r
    {\r
    xEventBitsType uxBits;\r
-   const portTickType xBlockTime = 100 / portTICK_RATE_MS;\r
+   const portTickType xTicksToWait = 100 / portTICK_RATE_MS;\r
 \r
                // Wait a maximum of 100ms for either bit 0 or bit 4 to be set within\r
                // the event group.  Clear the bits before exiting.\r
@@ -226,7 +226,7 @@ xEventGroupHandle xEventGroupCreate( void ) PRIVILEGED_FUNCTION;
                                        BIT_0 | BIT_4,  // The bits within the event group to wait for.\r
                                        pdTRUE,                 // BIT_0 and BIT_4 should be cleared before returning.\r
                                        pdFALSE,                // Don't wait for both bits, either bit will do.\r
-                                       xBlockTime );   // Wait a maximum of 100ms for either bit to be set.\r
+                                       xTicksToWait ); // Wait a maximum of 100ms for either bit to be set.\r
 \r
                if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )\r
                {\r
@@ -242,7 +242,7 @@ xEventGroupHandle xEventGroupCreate( void ) PRIVILEGED_FUNCTION;
                }\r
                else\r
                {\r
-                       // xEventGroupWaitBits() returned because xBlockTime ticks passed\r
+                       // xEventGroupWaitBits() returned because xTicksToWait ticks passed\r
                        // without either BIT_0 or BIT_4 becoming set.\r
                }\r
    }\r
@@ -250,7 +250,7 @@ xEventGroupHandle xEventGroupCreate( void ) PRIVILEGED_FUNCTION;
  * \defgroup xEventGroupWaitBits xEventGroupWaitBits\r
  * \ingroup EventGroup\r
  */\r
-xEventBitsType xEventGroupWaitBits( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToWaitFor, portBASE_TYPE xClearOnExit, portBASE_TYPE xWaitForAllBits, portTickType xBlockTime ) PRIVILEGED_FUNCTION;\r
+xEventBitsType xEventGroupWaitBits( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToWaitFor, portBASE_TYPE xClearOnExit, portBASE_TYPE xWaitForAllBits, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * event_groups.h\r
@@ -459,7 +459,7 @@ xEventBitsType xEventGroupSetBits( xEventGroupHandle xEventGroup, xEventBitsType
        xEventBitsType xEventGroupSync( xEventGroupHandle xEventGroup,\r
                                                                        xEventBitsType uxBitsToSet,\r
                                                                        xEventBitsType uxBitsToWaitFor,\r
-                                                                       portTickType xBlockTime );\r
+                                                                       portTickType xTicksToWait );\r
  </pre>\r
  *\r
  * Atomically set bits within an event group, then wait for a combination of\r
@@ -487,7 +487,7 @@ xEventBitsType xEventGroupSetBits( xEventGroupHandle xEventGroup, xEventBitsType
  * uxBitsToWaitFor to 0x05.  To wait for bits 0 and bit 1 and bit 2 set\r
  * uxBitsToWaitFor to 0x07.  Etc.\r
  *\r
- * @param xBlockTime The maximum amount of time (specified in 'ticks') to wait\r
+ * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait\r
  * for all of the bits specified by uxBitsToWaitFor to become set.\r
  *\r
  * @return The value of the event group at the time either the bits being waited\r
@@ -514,7 +514,7 @@ xEventBitsType xEventGroupSetBits( xEventGroupHandle xEventGroup, xEventBitsType
  void vTask0( void *pvParameters )\r
  {\r
  xEventBitsType uxReturn;\r
- portTickType xBlockTime = 100 / portTICK_RATE_MS;\r
+ portTickType xTicksToWait = 100 / portTICK_RATE_MS;\r
 \r
         for( ;; )\r
         {\r
@@ -525,7 +525,7 @@ xEventBitsType xEventGroupSetBits( xEventGroupHandle xEventGroup, xEventBitsType
                // by ALL_SYNC_BITS.  All three tasks have reached the synchronisation\r
                // point when all the ALL_SYNC_BITS are set.  Wait a maximum of 100ms\r
                // for this to happen.\r
-               uxReturn = xEventGroupSync( xEventBits, TASK_0_BIT, ALL_SYNC_BITS, xBlockTime );\r
+               uxReturn = xEventGroupSync( xEventBits, TASK_0_BIT, ALL_SYNC_BITS, xTicksToWait );\r
 \r
                if( ( uxReturn & ALL_SYNC_BITS ) == ALL_SYNC_BITS )\r
                {\r
@@ -577,7 +577,7 @@ xEventBitsType xEventGroupSetBits( xEventGroupHandle xEventGroup, xEventBitsType
  * \defgroup xEventGroupSync xEventGroupSync\r
  * \ingroup EventGroup\r
  */\r
-xEventBitsType xEventGroupSync( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToSet, xEventBitsType uxBitsToWaitFor, portTickType xBlockTime ) PRIVILEGED_FUNCTION;\r
+xEventBitsType xEventGroupSync( xEventGroupHandle xEventGroup, xEventBitsType uxBitsToSet, xEventBitsType uxBitsToWaitFor, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;\r
 \r
 \r
 /**\r
index d7330a974e306cd3c91779e649b96b4879e8d3a3..d71d5145e00b67267a624235dcfaa4293956b7e8 100644 (file)
@@ -226,10 +226,13 @@ typedef enum
  */\r
 #define taskENABLE_INTERRUPTS()                portENABLE_INTERRUPTS()\r
 \r
-/* Definitions returned by xTaskGetSchedulerState(). */\r
-#define taskSCHEDULER_NOT_STARTED      ( ( portBASE_TYPE ) 0 )\r
-#define taskSCHEDULER_RUNNING          ( ( portBASE_TYPE ) 1 )\r
-#define taskSCHEDULER_SUSPENDED                ( ( portBASE_TYPE ) 2 )\r
+/* Definitions returned by xTaskGetSchedulerState().  taskSCHEDULER_SUSPENDED is\r
+0 to generate more optimal code when configASSERT() is defined as the constant\r
+is used in assert() statements. */\r
+#define taskSCHEDULER_SUSPENDED                ( ( portBASE_TYPE ) 0 )\r
+#define taskSCHEDULER_NOT_STARTED      ( ( portBASE_TYPE ) 1 )\r
+#define taskSCHEDULER_RUNNING          ( ( portBASE_TYPE ) 2 )\r
+\r
 \r
 /*-----------------------------------------------------------\r
  * TASK CREATION API\r
@@ -1378,7 +1381,7 @@ portBASE_TYPE xTaskIncrementTick( void ) PRIVILEGED_FUNCTION;
  * there be no higher priority tasks waiting on the same event) or\r
  * the delay period expires.\r
  *\r
- * The 'unordered' version replaces the event list item value with the \r
+ * The 'unordered' version replaces the event list item value with the\r
  * xItemValue value, and inserts the list item at the end of the list.\r
  *\r
  * The 'ordered' version uses the existing event list item value (which is the\r
@@ -1423,8 +1426,8 @@ void vTaskPlaceOnEventListRestricted( xList * const pxEventList, portTickType xT
  * Removes a task from both the specified event list and the list of blocked\r
  * tasks, and places it on a ready queue.\r
  *\r
- * xTaskRemoveFromEventList()/xTaskRemoveFromUnorderedEventList() will be called \r
- * if either an event occurs to unblock a task, or the block timeout period \r
+ * xTaskRemoveFromEventList()/xTaskRemoveFromUnorderedEventList() will be called\r
+ * if either an event occurs to unblock a task, or the block timeout period\r
  * expires.\r
  *\r
  * xTaskRemoveFromEventList() is used when the event list is in task priority\r
index a94b03ed8e64f00e8cb8a286c229c9686f28d93a..023aa41240e7009ed163e126e9d7770f12272c8e 100644 (file)
@@ -570,6 +570,12 @@ xQUEUE * const pxQueue = ( xQUEUE * ) xQueue;
        configASSERT( pxQueue );\r
        configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) );\r
        configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );\r
+       #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\r
+       {\r
+               configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\r
+       }\r
+       #endif\r
+\r
 \r
        /* This function relaxes the coding standard somewhat to allow return\r
        statements within the function itself.  This is done in the interest\r
@@ -1052,7 +1058,12 @@ xQUEUE * const pxQueue = ( xQUEUE * ) xQueue;
 \r
        configASSERT( pxQueue );\r
        configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) );\r
-\r
+       #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\r
+       {\r
+               configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\r
+       }\r
+       #endif\r
+       \r
        /* This function relaxes the coding standard somewhat to allow return\r
        statements within the function itself.  This is done in the interest\r
        of execution time efficiency. */\r
index f231432717d056e9ffc1811b1cab87754c818845..1c93cf3a840809f548909a078b19d7f01d9bf427 100644 (file)
@@ -683,6 +683,7 @@ tskTCB * pxNewTCB;
                {\r
                        if( pxTCB == pxCurrentTCB )\r
                        {\r
+                               configASSERT( uxSchedulerSuspended == 0 );\r
                                portYIELD_WITHIN_API();\r
                        }\r
                }\r
@@ -700,6 +701,7 @@ tskTCB * pxNewTCB;
 \r
                configASSERT( pxPreviousWakeTime );\r
                configASSERT( ( xTimeIncrement > 0U ) );\r
+               configASSERT( uxSchedulerSuspended == 0 );\r
 \r
                vTaskSuspendAll();\r
                {\r
@@ -774,9 +776,11 @@ tskTCB * pxNewTCB;
        portTickType xTimeToWake;\r
        signed portBASE_TYPE xAlreadyYielded = pdFALSE;\r
 \r
+\r
                /* A delay time of zero just forces a reschedule. */\r
                if( xTicksToDelay > ( portTickType ) 0U )\r
                {\r
+                       configASSERT( uxSchedulerSuspended == 0 );\r
                        vTaskSuspendAll();\r
                        {\r
                                traceTASK_DELAY();\r
@@ -1075,6 +1079,7 @@ tskTCB * pxNewTCB;
                        if( xSchedulerRunning != pdFALSE )\r
                        {\r
                                /* The current task has just been suspended. */\r
+                               configASSERT( uxSchedulerSuspended == 0 );\r
                                portYIELD_WITHIN_API();\r
                        }\r
                        else\r