]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/WIN32-MSVC/main_full.c
Update the demo directory to use the version 8 type naming conventions.
[freertos] / FreeRTOS / Demo / WIN32-MSVC / main_full.c
index 0164a52c6e5857725a2d435e564977fb16844457..1f2b2595090bdad19c577ed2de1ac88e8fedfe28 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.\r
+    FreeRTOS V8.0.0:rc1 - Copyright (C) 2014 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
 #include "EventGroupsDemo.h"\r
 \r
 /* Priorities at which the tasks are created. */\r
-#define mainCHECK_TASK_PRIORITY                        ( configMAX_PRIORITIES - 1 )\r
+#define mainCHECK_TASK_PRIORITY                        ( configMAX_PRIORITIES - 2 )\r
 #define mainQUEUE_POLL_PRIORITY                        ( tskIDLE_PRIORITY + 1 )\r
 #define mainSEM_TEST_PRIORITY                  ( tskIDLE_PRIORITY + 1 )\r
 #define mainBLOCK_Q_PRIORITY                   ( tskIDLE_PRIORITY + 2 )\r
 #define mainCREATOR_TASK_PRIORITY              ( tskIDLE_PRIORITY + 3 )\r
 #define mainFLASH_TASK_PRIORITY                        ( tskIDLE_PRIORITY + 1 )\r
-#define mainuIP_TASK_PRIORITY                  ( tskIDLE_PRIORITY + 2 )\r
 #define mainINTEGER_TASK_PRIORITY              ( tskIDLE_PRIORITY )\r
 #define mainGEN_QUEUE_TASK_PRIORITY            ( tskIDLE_PRIORITY )\r
 #define mainFLOP_TASK_PRIORITY                 ( tskIDLE_PRIORITY )\r
@@ -162,6 +161,18 @@ static void prvTestTask( void *pvParameters );
  */\r
 static void prvDemonstrateTaskStateAndHandleGetFunctions( void );\r
 \r
+/*\r
+ * Called from the idle task hook function to demonstrate the use of \r
+ * xTimerPendFunctionCall() as xTimerPendFunctionCall() is not demonstrated by\r
+ * any of the standard demo tasks.\r
+ */\r
+static void prvDemonstratePendingFunctionCall( void );\r
+\r
+/*\r
+ * The function that is pended by prvDemonstratePendingFunctionCall().\r
+ */\r
+static void prvPendedFunction( void *pvParameter1, uint32_t ulParameter2 );\r
+\r
 /*\r
  * A task to demonstrate the use of the xQueueSpacesAvailable() function.\r
  */\r
@@ -174,7 +185,7 @@ static char *pcStatusMessage = "OK";
 \r
 /* This semaphore is created purely to test using the vSemaphoreDelete() and\r
 semaphore tracing API functions.  It has no other purpose. */\r
-static xSemaphoreHandle xMutexToDelete = NULL;\r
+static SemaphoreHandle_t xMutexToDelete = NULL;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -227,8 +238,8 @@ int main_full( void )
 \r
 static void prvCheckTask( void *pvParameters )\r
 {\r
-portTickType xNextWakeTime;\r
-const portTickType xCycleFrequency = 2500 / portTICK_RATE_MS;\r
+TickType_t xNextWakeTime;\r
+const TickType_t xCycleFrequency = 2500 / portTICK_PERIOD_MS;\r
 \r
        /* Just to remove compiler warning. */\r
        ( void ) pvParameters;\r
@@ -343,11 +354,11 @@ void *pvAllocated;
 \r
 /* These three functions are only meant for use by trace code, and not for\r
 direct use from application code, hence their prototypes are not in queue.h. */\r
-extern void vQueueSetQueueNumber( xQueueHandle pxQueue, unsigned portBASE_TYPE uxQueueNumber );\r
-extern unsigned portBASE_TYPE uxQueueGetQueueNumber( xQueueHandle pxQueue );\r
-extern uint8_t ucQueueGetQueueType( xQueueHandle pxQueue );\r
-extern void vTaskSetTaskNumber( xTaskHandle xTask, unsigned portBASE_TYPE uxHandle );\r
-extern unsigned portBASE_TYPE uxTaskGetTaskNumber( xTaskHandle xTask );\r
+extern void vQueueSetQueueNumber( QueueHandle_t pxQueue, unsigned portBASE_TYPE uxQueueNumber );\r
+extern unsigned portBASE_TYPE uxQueueGetQueueNumber( QueueHandle_t pxQueue );\r
+extern uint8_t ucQueueGetQueueType( QueueHandle_t pxQueue );\r
+extern void vTaskSetTaskNumber( TaskHandle_t xTask, unsigned portBASE_TYPE uxHandle );\r
+extern unsigned portBASE_TYPE uxTaskGetTaskNumber( TaskHandle_t xTask );\r
 \r
        /* Sleep to reduce CPU load, but don't sleep indefinitely in case there are\r
        tasks waiting to be terminated by the idle task. */\r
@@ -357,6 +368,10 @@ extern unsigned portBASE_TYPE uxTaskGetTaskNumber( xTaskHandle xTask );
        the standard demo tasks. */\r
        prvDemonstrateTaskStateAndHandleGetFunctions();\r
 \r
+       /* Demonstrate the use of xTimerPendFunctionCall(), which is not\r
+       demonstrated by any of the standard demo tasks. */\r
+       prvDemonstratePendingFunctionCall();\r
+\r
        /* If xMutexToDelete has not already been deleted, then delete it now.\r
        This is done purely to demonstrate the use of, and test, the\r
        vSemaphoreDelete() macro.  Care must be taken not to delete a semaphore\r
@@ -402,16 +417,51 @@ void vFullDemoTickHookFunction( void )
        /* Write to a queue that is in use as part of the queue set demo to\r
        demonstrate using queue sets from an ISR. */\r
        vQueueSetAccessQueueSetFromISR();\r
+\r
+       /* Exercise event groups from interrupts. */\r
+       vPeriodicEventGroupsProcessing();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvPendedFunction( void *pvParameter1, uint32_t ulParameter2 )\r
+{\r
+static uint32_t ulLastParameter1 = 1000UL, ulLastParameter2 = 0UL;\r
+uint32_t ulParameter1;\r
+\r
+       ulParameter1 = ( uint32_t ) pvParameter1;\r
+\r
+       /* Ensure the parameters are as expected. */\r
+       configASSERT( ulParameter1 == ( ulLastParameter1 + 1 ) );\r
+       configASSERT( ulParameter2 == ( ulLastParameter2 + 1 ) );\r
+\r
+       /* Remember the parameters for the next time the function is called. */\r
+       ulLastParameter1 = ulParameter1;\r
+       ulLastParameter2 = ulParameter2;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvDemonstratePendingFunctionCall( void )\r
+{\r
+static uint32_t ulParameter1 = 1000UL, ulParameter2 = 0UL;\r
+const TickType_t xDontBlock = 0; /* This is called from the idle task so must *not* attempt to block. */\r
+\r
+       /* prvPendedFunction() just expects the parameters to be incremented by one\r
+       each time it is called. */\r
+       ulParameter1++;\r
+       ulParameter2++;\r
+\r
+       /* Pend the function call, sending the parameters. */\r
+       xTimerPendFunctionCall( prvPendedFunction, ( void * ) ulParameter1, ulParameter2, xDontBlock );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
 static void prvDemonstrateTaskStateAndHandleGetFunctions( void )\r
 {\r
-xTaskHandle xIdleTaskHandle, xTimerTaskHandle;\r
+TaskHandle_t xIdleTaskHandle, xTimerTaskHandle;\r
 const unsigned char ucConstTaskNumber = 0x55U;\r
-signed char *pcTaskName;\r
+char *pcTaskName;\r
 static portBASE_TYPE xPerformedOneShotTests = pdFALSE;\r
-xTaskHandle xTestTask;\r
+TaskHandle_t xTestTask;\r
 \r
        /* Demonstrate the use of the xTimerGetTimerDaemonTaskHandle() and\r
        xTaskGetIdleTaskHandle() functions.  Also try using the function that sets\r
@@ -484,7 +534,7 @@ xTaskHandle xTestTask;
 \r
 static void prvDemoQueueSpaceFunctions( void *pvParameters )\r
 {\r
-xQueueHandle xQueue = NULL;\r
+QueueHandle_t xQueue = NULL;\r
 const unsigned portBASE_TYPE uxQueueLength = 10;\r
 unsigned portBASE_TYPE uxReturn, x;\r
 \r