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

Demo/WIN32-MingW/CreateProjectDirectoryStructure.bat
Demo/WIN32-MingW/main.c

index a1986dc044ae07d43c907d4e84e2d1c4e6107c52..26a75fa86def3878c13367dceca7ec69a399afed 100644 (file)
@@ -43,6 +43,7 @@ IF EXIST FreeRTOS Goto END
        copy ..\Common\include\QPeek.h DemoTasks\include\r
        copy ..\Common\include\flop.h DemoTasks\include\r
        copy ..\Common\include\recmutex.h DemoTasks\include\r
+       copy ..\Common\include\death.h DemoTasks\include\r
        copy ..\Common\Minimal\BlockQ.c DemoTasks\r
        copy ..\Common\Minimal\integer.c DemoTasks\r
        copy ..\Common\Minimal\semtest.c DemoTasks\r
@@ -50,5 +51,6 @@ IF EXIST FreeRTOS Goto END
        copy ..\Common\Minimal\GenQTest.c DemoTasks\r
        copy ..\Common\Minimal\QPeek.c DemoTasks\r
        copy ..\Common\Minimal\flop.c DemoTasks\r
+       copy ..\Common\Minimal\death.c DemoTasks\r
        \r
 : END
\ No newline at end of file
index 5f89ef62cfd297bfdf00b5ba119b7ac0fc19cacc..d8eb1a0d0cee0d9ca15a10d51542e02ceaf7ce74 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
@@ -204,19 +209,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