]> git.sur5r.net Git - freertos/commitdiff
Added in the 'death' tasks to the Win32 MSVN demo.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 22 Nov 2010 10:40:43 +0000 (10:40 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 22 Nov 2010 10:40:43 +0000 (10:40 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1161 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/WIN32-MSVC/FreeRTOSConfig.h
Demo/WIN32-MSVC/main.c

index 9ca238bba354ef84ec2ca9a8e1206bc06ced84ab..32c12ad35d175d3ed35aa30c9b4671e9ec07a1b6 100644 (file)
@@ -105,5 +105,4 @@ to exclude the API function. */
 #define INCLUDE_uxTaskGetStackHighWaterMark    1\r
 #define INCLUDE_xTaskGetSchedulerState         1\r
 \r
-\r
 #endif /* FREERTOS_CONFIG_H */\r
index 44706775c4a4aeed1a70e6e25d329447eca1d5ac..a14753696394d9e8b6e44c4c89c95e8b84db902c 100644 (file)
  * -NOTE- The Win32 port is a simulation (or is that emulation?) only!  Do not\r
  * expect to get real time behaviour from the Win32 port or this demo\r
  * application.  It is provided as a convenient development and demonstration\r
- * test bed only.  Also, at the time of writing, a method of deleting theads \r
- * has not been implemented, although doing so would be trivial so this\r
- * functionality might be added in at a later date.  At present, calling \r
- * vTaskDelete() will delete the real time task from FreeRTOS but not the Win32\r
- * thread in which the task was executing.  DO NOT CALL vTaskDelete() when using \r
- * the Win32 port!  This was tested using Windows XP on a dual core laptop.\r
+ * test bed only.  This was tested using Windows XP on a dual core laptop.\r
  *\r
  * - READ THE WEB DOCUMENTATION FOR THIS PORT FOR MORE INFORMATION ON USING IT -\r
  *******************************************************************************\r
 #include "QPeek.h"\r
 #include "recmutex.h"\r
 #include "flop.h"\r
+#include "death.h"\r
 \r
 /* Priorities at which the tasks are created. */\r
 #define mainCHECK_TASK_PRIORITY                ( configMAX_PRIORITIES - 1 )\r
@@ -134,6 +130,11 @@ int main( void )
        vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
        vStartRecursiveMutexTasks();\r
 \r
+       /* The suicide tasks must be created last as they need to know how many\r
+       tasks were running prior to their creation in order to ascertain whether\r
+       or not the correct/expected number of tasks are running at any given time. */\r
+       vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+\r
        /* Start the scheduler itself. */\r
        vTaskStartScheduler();\r
 \r
@@ -189,6 +190,10 @@ char *pcStatusMessage = "OK";
                {\r
                        pcStatusMessage = "Error: Flop";\r
                }\r
+               else if( xIsCreateTaskStillRunning() != pdPASS )\r
+               {\r
+                       pcStatusMessage = "Error: Create";\r
+               }\r
            else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
            {\r
                        pcStatusMessage = "Error: RecMutex";\r
@@ -203,19 +208,11 @@ char *pcStatusMessage = "OK";
 \r
 void vApplicationIdleHook( void )\r
 {\r
-       /* Sleep to reduce CPU load, but don't sleep indefinitely if not using \r
-       preemption as as nothing will cause     a task switch. */\r
-       #if( configUSE_PREEMPTION != 0 )\r
-       {\r
-               SleepEx( INFINITE, TRUE );\r
-       }\r
-       #else\r
-       {\r
-               const unsigned long ulMSToSleep = 5;\r
+const unsigned long ulMSToSleep = 5;\r
 \r
-               SleepEx( ulMSToSleep, TRUE );\r
-       }\r
-       #endif\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
+       Sleep( ulMSToSleep );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r