From: richardbarry Date: Mon, 22 Nov 2010 10:40:43 +0000 (+0000) Subject: Added in the 'death' tasks to the Win32 MSVN demo. X-Git-Tag: V6.1.1~96 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=3c88f92d37d3e5dbe0e58ea78a1916fda346dd16;p=freertos Added in the 'death' tasks to the Win32 MSVN demo. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1161 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- diff --git a/Demo/WIN32-MSVC/FreeRTOSConfig.h b/Demo/WIN32-MSVC/FreeRTOSConfig.h index 9ca238bba..32c12ad35 100644 --- a/Demo/WIN32-MSVC/FreeRTOSConfig.h +++ b/Demo/WIN32-MSVC/FreeRTOSConfig.h @@ -105,5 +105,4 @@ to exclude the API function. */ #define INCLUDE_uxTaskGetStackHighWaterMark 1 #define INCLUDE_xTaskGetSchedulerState 1 - #endif /* FREERTOS_CONFIG_H */ diff --git a/Demo/WIN32-MSVC/main.c b/Demo/WIN32-MSVC/main.c index 44706775c..a14753696 100644 --- a/Demo/WIN32-MSVC/main.c +++ b/Demo/WIN32-MSVC/main.c @@ -56,12 +56,7 @@ * -NOTE- The Win32 port is a simulation (or is that emulation?) only! Do not * expect to get real time behaviour from the Win32 port or this demo * application. It is provided as a convenient development and demonstration - * test bed only. Also, at the time of writing, a method of deleting theads - * has not been implemented, although doing so would be trivial so this - * functionality might be added in at a later date. At present, calling - * vTaskDelete() will delete the real time task from FreeRTOS but not the Win32 - * thread in which the task was executing. DO NOT CALL vTaskDelete() when using - * the Win32 port! This was tested using Windows XP on a dual core laptop. + * test bed only. This was tested using Windows XP on a dual core laptop. * * - READ THE WEB DOCUMENTATION FOR THIS PORT FOR MORE INFORMATION ON USING IT - ******************************************************************************* @@ -101,6 +96,7 @@ #include "QPeek.h" #include "recmutex.h" #include "flop.h" +#include "death.h" /* Priorities at which the tasks are created. */ #define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) @@ -134,6 +130,11 @@ int main( void ) vStartMathTasks( mainFLOP_TASK_PRIORITY ); vStartRecursiveMutexTasks(); + /* The suicide tasks must be created last as they need to know how many + tasks were running prior to their creation in order to ascertain whether + or not the correct/expected number of tasks are running at any given time. */ + vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY ); + /* Start the scheduler itself. */ vTaskStartScheduler(); @@ -189,6 +190,10 @@ char *pcStatusMessage = "OK"; { pcStatusMessage = "Error: Flop"; } + else if( xIsCreateTaskStillRunning() != pdPASS ) + { + pcStatusMessage = "Error: Create"; + } else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE ) { pcStatusMessage = "Error: RecMutex"; @@ -203,19 +208,11 @@ char *pcStatusMessage = "OK"; void vApplicationIdleHook( void ) { - /* Sleep to reduce CPU load, but don't sleep indefinitely if not using - preemption as as nothing will cause a task switch. */ - #if( configUSE_PREEMPTION != 0 ) - { - SleepEx( INFINITE, TRUE ); - } - #else - { - const unsigned long ulMSToSleep = 5; +const unsigned long ulMSToSleep = 5; - SleepEx( ulMSToSleep, TRUE ); - } - #endif + /* Sleep to reduce CPU load, but don't sleep indefinitely in case there are + tasks waiting to be terminated by the idle task. */ + Sleep( ulMSToSleep ); } /*-----------------------------------------------------------*/