Added in the 'death' tasks to the MingW Win32 demo.

This commit is contained in:
Richard Barry 2010-11-22 10:46:54 +00:00
parent 853250260c
commit f3dbcaf725
2 changed files with 17 additions and 18 deletions

View File

@ -43,6 +43,7 @@ IF EXIST FreeRTOS Goto END
copy ..\Common\include\QPeek.h DemoTasks\include copy ..\Common\include\QPeek.h DemoTasks\include
copy ..\Common\include\flop.h DemoTasks\include copy ..\Common\include\flop.h DemoTasks\include
copy ..\Common\include\recmutex.h DemoTasks\include copy ..\Common\include\recmutex.h DemoTasks\include
copy ..\Common\include\death.h DemoTasks\include
copy ..\Common\Minimal\BlockQ.c DemoTasks copy ..\Common\Minimal\BlockQ.c DemoTasks
copy ..\Common\Minimal\integer.c DemoTasks copy ..\Common\Minimal\integer.c DemoTasks
copy ..\Common\Minimal\semtest.c DemoTasks copy ..\Common\Minimal\semtest.c DemoTasks
@ -50,5 +51,6 @@ IF EXIST FreeRTOS Goto END
copy ..\Common\Minimal\GenQTest.c DemoTasks copy ..\Common\Minimal\GenQTest.c DemoTasks
copy ..\Common\Minimal\QPeek.c DemoTasks copy ..\Common\Minimal\QPeek.c DemoTasks
copy ..\Common\Minimal\flop.c DemoTasks copy ..\Common\Minimal\flop.c DemoTasks
copy ..\Common\Minimal\death.c DemoTasks
: END : END

View File

@ -56,12 +56,7 @@
* -NOTE- The Win32 port is a simulation (or is that emulation?) only! Do not * -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 * expect to get real time behaviour from the Win32 port or this demo
* application. It is provided as a convenient development and demonstration * application. It is provided as a convenient development and demonstration
* test bed only. Also, at the time of writing, a method of deleting theads * test bed only. This was tested using Windows XP on a dual core laptop.
* 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.
* *
* - READ THE WEB DOCUMENTATION FOR THIS PORT FOR MORE INFORMATION ON USING IT - * - READ THE WEB DOCUMENTATION FOR THIS PORT FOR MORE INFORMATION ON USING IT -
******************************************************************************* *******************************************************************************
@ -101,6 +96,7 @@
#include "QPeek.h" #include "QPeek.h"
#include "recmutex.h" #include "recmutex.h"
#include "flop.h" #include "flop.h"
#include "death.h"
/* Priorities at which the tasks are created. */ /* Priorities at which the tasks are created. */
#define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) #define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
@ -134,6 +130,11 @@ int main( void )
vStartMathTasks( mainFLOP_TASK_PRIORITY ); vStartMathTasks( mainFLOP_TASK_PRIORITY );
vStartRecursiveMutexTasks(); 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. */ /* Start the scheduler itself. */
vTaskStartScheduler(); vTaskStartScheduler();
@ -189,6 +190,10 @@ char *pcStatusMessage = "OK";
{ {
pcStatusMessage = "Error: Flop"; pcStatusMessage = "Error: Flop";
} }
else if( xIsCreateTaskStillRunning() != pdPASS )
{
pcStatusMessage = "Error: Create";
}
else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE ) else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
{ {
pcStatusMessage = "Error: RecMutex"; pcStatusMessage = "Error: RecMutex";
@ -203,20 +208,12 @@ char *pcStatusMessage = "OK";
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void vApplicationIdleHook( void ) 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 ); /* Sleep to reduce CPU load, but don't sleep indefinitely in case there are
} tasks waiting to be terminated by the idle task. */
#endif Sleep( ulMSToSleep );
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/