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\flop.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\integer.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\QPeek.c DemoTasks
copy ..\Common\Minimal\flop.c DemoTasks
copy ..\Common\Minimal\death.c DemoTasks
: END

View File

@ -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";
@ -204,19 +209,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 );
}
/*-----------------------------------------------------------*/