]> git.sur5r.net Git - freertos/commitdiff
Minor updates to the queue.c and tasks.c core files required to support the new timer...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 9 Feb 2011 19:21:58 +0000 (19:21 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 9 Feb 2011 19:21:58 +0000 (19:21 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1284 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Source/queue.c
Source/tasks.c

index 2107b363762fb5ed8167991a30e668bcb3a76625..96552f783dc8380a516bc831e0244b6980317dec 100644 (file)
@@ -1440,7 +1440,7 @@ signed portBASE_TYPE xReturn;
        }\r
 \r
 #endif\r
-       /*-----------------------------------------------------------*/\r
+/*-----------------------------------------------------------*/\r
 \r
 #if configQUEUE_REGISTRY_SIZE > 0\r
 \r
@@ -1463,4 +1463,27 @@ signed portBASE_TYPE xReturn;
        }\r
 \r
 #endif\r
+/*-----------------------------------------------------------*/\r
+\r
+#if configUSE_TIMERS == 1\r
+\r
+       void vQueueWaitForMessageRestricted( xQueueHandle pxQueue, portTickType xTicksToWait )\r
+       {\r
+               /* This function should not be called by application code hence the \r
+               'Restricted' in its name.  It is not part of the public API.  It is designed\r
+               for use by kernel code, and has special calling requirements - it should be\r
+               called from a critical section, and then a yield performed after it is\r
+               called.  Also, the call tree makes use of vListInsert() which should normally\r
+               not be called from a critical section - so an assumption is made that the list\r
+               being inserted into is empty and therefore the insertion will be fast. */\r
+\r
+               /* Only do anything if there are no message in the queue. */\r
+               if( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0U )\r
+               {\r
+                       /* There is nothing in the queue, block for the specified period. */\r
+                       vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );\r
+               }\r
+       }\r
+\r
+#endif\r
 \r
index 201b0629cd1e2cfd188756f64d17030c4e0539d9..6f305f725fc7a183eec5dd723d6543cd624d12fe 100644 (file)
@@ -63,6 +63,7 @@ task.h is included from an application file. */
 \r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
+#include "timers.h"\r
 #include "StackMacros.h"\r
 \r
 #undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r
@@ -747,6 +748,19 @@ tskTCB * pxNewTCB;
 #endif\r
 /*-----------------------------------------------------------*/\r
 \r
+void vTaskUnblockTask( xTaskHandle pxTask )\r
+{\r
+tskTCB *pxTCB = ( tskTCB * ) pxTask;\r
+\r
+       /* This function is not intended to be a public API function and definitely\r
+       is not for generic use as it assumes pxTask is not the running task and not\r
+       suspended, does not remove the task from any event lists it might be \r
+       blocked on, and does not take care of mutual exclusion. */\r
+       vListRemove( &( pxTCB->xGenericListItem ) );\r
+       prvAddTaskToReadyQueue( pxTCB );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 #if ( INCLUDE_uxTaskPriorityGet == 1 )\r
 \r
        unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask )\r
@@ -1060,6 +1074,15 @@ portBASE_TYPE xReturn;
        /* Add the idle task at the lowest priority. */\r
        xReturn = xTaskCreate( prvIdleTask, ( signed char * ) "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), ( xTaskHandle * ) NULL );\r
 \r
+       #if ( configUSE_TIMERS == 1 )\r
+       {\r
+               if( xReturn == pdPASS )\r
+               {\r
+                       xReturn = xTimerCreateTimerTask();\r
+               }\r
+       }\r
+       #endif\r
+\r
        if( xReturn == pdPASS )\r
        {\r
                /* Interrupts are turned off here, to ensure a tick does not occur\r