Added in more demo apps to the Win32 demo.
diff --git a/Demo/WIN32-MSVC/FreeRTOSConfig.h b/Demo/WIN32-MSVC/FreeRTOSConfig.h
index 01a8bd5..3d657bf 100644
--- a/Demo/WIN32-MSVC/FreeRTOSConfig.h
+++ b/Demo/WIN32-MSVC/FreeRTOSConfig.h
@@ -64,19 +64,28 @@
  * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE

  * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.

  *----------------------------------------------------------*/

+#define configUSE_PREEMPTION			1

+#define configUSE_IDLE_HOOK				1

+#define configUSE_TICK_HOOK				0

+#define configTICK_RATE_HZ				( ( portTickType ) 50 )

+#define configMINIMAL_STACK_SIZE		( ( unsigned portSHORT ) 50 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the win32 thread. */

+#define configTOTAL_HEAP_SIZE			( ( size_t ) 0 ) /* This parameter has no effect when heap_3.c is included in the project. */

+#define configMAX_TASK_NAME_LEN			( 12 )

+#define configUSE_TRACE_FACILITY		1

+#define configUSE_16_BIT_TICKS			0

+#define configIDLE_SHOULD_YIELD			1

+#define configUSE_CO_ROUTINES 			0

+#define configUSE_MUTEXES				1

+#define configGENERATE_RUN_TIME_STATS	0

+#define configCHECK_FOR_STACK_OVERFLOW	0

+#define configUSE_RECURSIVE_MUTEXES		1

+#define configQUEUE_REGISTRY_SIZE		0

+#define configUSE_MALLOC_FAILED_HOOK	1

+#define configUSE_APPLICATION_TASK_TAG	0

 

-#define configUSE_PREEMPTION		0

-#define configUSE_IDLE_HOOK			1

-#define configUSE_TICK_HOOK			0

-#define configCPU_CLOCK_HZ			( ( unsigned portLONG ) 47923200 )

-#define configTICK_RATE_HZ			( ( portTickType ) 100 )

-#define configMAX_PRIORITIES		( ( unsigned portBASE_TYPE ) 5 )

-#define configMINIMAL_STACK_SIZE	( ( unsigned portSHORT ) 50 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the win32 thread. */

-#define configTOTAL_HEAP_SIZE		( ( size_t ) 0 ) /* This parameter has no effect when heap_3.c is included in the project. */

-#define configMAX_TASK_NAME_LEN		( 16 )

-#define configUSE_TRACE_FACILITY	0

-#define configUSE_16_BIT_TICKS		0

-#define configIDLE_SHOULD_YIELD		1

+#define configMAX_PRIORITIES			( ( unsigned portBASE_TYPE ) 7 )

+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

+

 

 /* Co-routine definitions. */

 #define configUSE_CO_ROUTINES 		0

@@ -85,13 +94,15 @@
 /* Set the following definitions to 1 to include the API function, or zero

 to exclude the API function. */

 

-#define INCLUDE_vTaskPrioritySet		1

-#define INCLUDE_uxTaskPriorityGet		1

-#define INCLUDE_vTaskDelete				0

-#define INCLUDE_vTaskCleanUpResources	0

-#define INCLUDE_vTaskSuspend			1

-#define INCLUDE_vTaskDelayUntil			1

-#define INCLUDE_vTaskDelay				1

+#define INCLUDE_vTaskPrioritySet			1

+#define INCLUDE_uxTaskPriorityGet			1

+#define INCLUDE_vTaskDelete					1

+#define INCLUDE_vTaskCleanUpResources		0

+#define INCLUDE_vTaskSuspend				1

+#define INCLUDE_vTaskDelayUntil				1

+#define INCLUDE_vTaskDelay					1

+#define INCLUDE_uxTaskGetStackHighWaterMark	1

+#define INCLUDE_xTaskGetSchedulerState		1

 

 

 #endif /* FREERTOS_CONFIG_H */

diff --git a/Demo/WIN32-MSVC/WIN32.suo b/Demo/WIN32-MSVC/WIN32.suo
index 39aba2f..f78c1bf 100644
--- a/Demo/WIN32-MSVC/WIN32.suo
+++ b/Demo/WIN32-MSVC/WIN32.suo
Binary files differ
diff --git a/Demo/WIN32-MSVC/WIN32.vcxproj b/Demo/WIN32-MSVC/WIN32.vcxproj
index 7894559..bc4b02e 100644
--- a/Demo/WIN32-MSVC/WIN32.vcxproj
+++ b/Demo/WIN32-MSVC/WIN32.vcxproj
@@ -55,7 +55,7 @@
     <ClCompile>

       <Optimization>Disabled</Optimization>

       <AdditionalIncludeDirectories>..\..\Source\include;..\..\Source\portable\MSVC-MingW;..\Common\Include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0400;WINVER=0x400;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;WINVER=0x400;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <MinimalRebuild>true</MinimalRebuild>

       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>

       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

@@ -66,6 +66,7 @@
       <WarningLevel>Level4</WarningLevel>

       <SuppressStartupBanner>true</SuppressStartupBanner>

       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>

+      <DisableLanguageExtensions>false</DisableLanguageExtensions>

     </ClCompile>

     <ResourceCompile>

       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

@@ -78,6 +79,7 @@
       <ProgramDatabaseFile>.\Debug/WIN32.pdb</ProgramDatabaseFile>

       <SubSystem>Console</SubSystem>

       <TargetMachine>MachineX86</TargetMachine>

+      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

     </Link>

     <Bscmake>

       <SuppressStartupBanner>true</SuppressStartupBanner>

@@ -122,6 +124,15 @@
   </ItemDefinitionGroup>

   <ItemGroup>

     <ClCompile Include="..\..\Source\portable\MemMang\heap_3.c" />

+    <ClCompile Include="..\Common\Minimal\BlockQ.c" />

+    <ClCompile Include="..\Common\Minimal\blocktim.c" />

+    <ClCompile Include="..\Common\Minimal\flop.c" />

+    <ClCompile Include="..\Common\Minimal\GenQTest.c" />

+    <ClCompile Include="..\Common\Minimal\integer.c" />

+    <ClCompile Include="..\Common\Minimal\PollQ.c" />

+    <ClCompile Include="..\Common\Minimal\QPeek.c" />

+    <ClCompile Include="..\Common\Minimal\recmutex.c" />

+    <ClCompile Include="..\Common\Minimal\semtest.c" />

     <ClCompile Include="main.c">

       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>

diff --git a/Demo/WIN32-MSVC/WIN32.vcxproj.filters b/Demo/WIN32-MSVC/WIN32.vcxproj.filters
index 99f5959..f57f154 100644
--- a/Demo/WIN32-MSVC/WIN32.vcxproj.filters
+++ b/Demo/WIN32-MSVC/WIN32.vcxproj.filters
@@ -23,6 +23,12 @@
       <UniqueIdentifier>{34567deb-d5ab-4a56-8640-0aaec609521a}</UniqueIdentifier>

       <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>

     </Filter>

+    <Filter Include="Demo App Source\Common Demo Tasks">

+      <UniqueIdentifier>{2d4a700c-06e3-4dd2-afbe-ab1be71ebe2a}</UniqueIdentifier>

+    </Filter>

+    <Filter Include="FreeRTOS Source\Source\Portable">

+      <UniqueIdentifier>{88f409e6-d396-4ac5-94bd-7a99c914be46}</UniqueIdentifier>

+    </Filter>

   </ItemGroup>

   <ItemGroup>

     <ClCompile Include="main.c">

@@ -31,9 +37,6 @@
     <ClCompile Include="..\..\Source\list.c">

       <Filter>FreeRTOS Source\Source</Filter>

     </ClCompile>

-    <ClCompile Include="..\..\Source\portable\WIN32\port.c">

-      <Filter>FreeRTOS Source\Source</Filter>

-    </ClCompile>

     <ClCompile Include="..\..\Source\queue.c">

       <Filter>FreeRTOS Source\Source</Filter>

     </ClCompile>

@@ -43,6 +46,36 @@
     <ClCompile Include="..\..\Source\portable\MemMang\heap_3.c">

       <Filter>FreeRTOS Source\Source</Filter>

     </ClCompile>

+    <ClCompile Include="..\..\Source\portable\MSVC-MingW\port.c">

+      <Filter>FreeRTOS Source\Source\Portable</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\flop.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\GenQTest.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\integer.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\PollQ.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\QPeek.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\recmutex.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\semtest.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\BlockQ.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

+    <ClCompile Include="..\Common\Minimal\blocktim.c">

+      <Filter>Demo App Source\Common Demo Tasks</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="Board.h">

diff --git a/Demo/WIN32-MSVC/main.c b/Demo/WIN32-MSVC/main.c
index b5b7d49..6685e2f 100644
--- a/Demo/WIN32-MSVC/main.c
+++ b/Demo/WIN32-MSVC/main.c
@@ -51,13 +51,38 @@
     licensing and training services.

 */

 

+/* Standard includes. */

 #include <stdio.h>

+

+/* Kernel includes. */

 #include <FreeRTOS.h>

 #include "task.h"

 #include "queue.h"

 

-/* Task priorities. */

-#define mainSTDOUT_TASK_PRIORITY	tskIDLE_PRIORITY

+/* Standard demo includes. */

+#include "partest.h"

+#include "BlockQ.h"

+#include "death.h"

+#include "integer.h"

+//#include "blocktim.h"

+#include "semtest.h"

+#include "PollQ.h"

+#include "GenQTest.h"

+#include "QPeek.h"

+#include "recmutex.h"

+#include "flop.h"

+

+/* Priorities at which the tasks are created. */

+#define mainCHECK_TASK_PRIORITY		( configMAX_PRIORITIES - 1 )

+#define mainQUEUE_POLL_PRIORITY		( tskIDLE_PRIORITY + 1 )

+#define mainSEM_TEST_PRIORITY		( tskIDLE_PRIORITY + 1 )

+#define mainBLOCK_Q_PRIORITY		( tskIDLE_PRIORITY + 2 )

+#define mainCREATOR_TASK_PRIORITY   ( tskIDLE_PRIORITY + 3 )

+#define mainFLASH_TASK_PRIORITY		( tskIDLE_PRIORITY + 1 )

+#define mainuIP_TASK_PRIORITY		( tskIDLE_PRIORITY + 2 )

+#define mainINTEGER_TASK_PRIORITY   ( tskIDLE_PRIORITY )

+#define mainGEN_QUEUE_TASK_PRIORITY	( tskIDLE_PRIORITY )

+#define mainFLOP_TASK_PRIORITY		( tskIDLE_PRIORITY )

 

 /* Stack sizes. */

 #define mainSTDOUT_TASK_STACK_SIZE		( configMINIMAL_STACK_SIZE * 4 )

@@ -67,9 +92,7 @@
 static xQueueHandle xStdoutQueue = NULL;

 

 /* Task function prototypes. */

-static void prvTask1( void *pvParameters );

-static void prvTask2( void *pvParameters );

-static void prvStdoutTask( void *pvParameters );

+static void prvCheckTask( void *pvParameters );

 

 /* Create a queue on which console output strings can be posted, then start the

 task that processes the queue - printf()'ing each string that is received. */

@@ -79,14 +102,25 @@
 pointed to by pcTextToPrint for output to stdout in a thread safe manner. */

 void vMainConsolePrint( const char *pcTextToPrint, portTickType xTicksToWait );

 

-volatile unsigned long ulIdleCount = 0UL, ulT1Count = 0UL, ulT2Count = 0UL, ulTicks = 0UL;

 /*-----------------------------------------------------------*/

 

 int main( void )

 {

-	prvStartStdoutTask();

-	xTaskCreate( prvTask1, "t1", 100, NULL, 0, NULL );

-	xTaskCreate( prvTask2, "t2", 100, NULL, 0, NULL );

+	/* Start the check task as described at the top of this file. */

+	xTaskCreate( prvCheckTask, ( signed char * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );

+

+	/* Create the standard demo tasks. */

+	vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );

+//	vCreateBlockTimeTasks();

+	vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );

+	vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );

+	vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );

+	vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );

+	vStartQueuePeekTasks();

+	vStartRecursiveMutexTasks();

+	vStartMathTasks( mainFLOP_TASK_PRIORITY );

+

+	/* Start the scheduler itself. */

 	vTaskStartScheduler();

 

     /* Should never get here unless there was not enough heap space to create 

@@ -95,102 +129,97 @@
 }

 /*-----------------------------------------------------------*/

 

-void vMainConsolePrint( const char *pcTextToPrint, portTickType xTicksToWait )

+static void prvCheckTask( void *pvParameters )

 {

-	if( xStdoutQueue != NULL )

-	{

-		xQueueSend( xStdoutQueue, &pcTextToPrint, xTicksToWait );

-	}

-}

-/*-----------------------------------------------------------*/

+portTickType xNextWakeTime;

+const portTickType xCycleFrequency = 5000 / portTICK_RATE_MS;

+char *pcStatusMessage = "OK";

+long lCycleCount = 0;

 

-static void prvStartStdoutTask( void )

-{

-const unsigned long ulQueueLength = 20;

-

-	/* Create the queue on which starings for output will be stored. */

-	xStdoutQueue = xQueueCreate( ulQueueLength, ( unsigned portBASE_TYPE ) sizeof( char * ) );

-

-	if( xStdoutQueue != NULL )

-	{

-		/* Create the task that processes the stdout messages. */

-		xTaskCreate( prvStdoutTask, "stdout task", mainSTDOUT_TASK_STACK_SIZE, NULL, mainSTDOUT_TASK_PRIORITY, NULL );

-	}

-}

-/*-----------------------------------------------------------*/

-

-static void prvStdoutTask( void *pvParameters )

-{

-char *pcString;

-

-	/* Just to remove compiler warnings. */

+	/* Just to remove compiler warning. */

 	( void ) pvParameters;

 

+	/* Initialise xNextWakeTime - this only needs to be done once. */

+	xNextWakeTime = xTaskGetTickCount();

+

 	for( ;; )

 	{

-		/* This task would not have been created if the queue had not been created

-		successfully too.  Also, because of the FreeRTOSConfig.h settings using

-		portMAX_DELAY in this case means wait forever, so when this function returns

-		we know there is a string to print. */

-		xQueueReceive( xStdoutQueue, &pcString, portMAX_DELAY );

-		printf( "%s", pcString );

-		//fflush( stdout );

+		/* Place this task in the blocked state until it is time to run again. */

+		vTaskDelayUntil( &xNextWakeTime, xCycleFrequency );

+

+		/* Check the standard demo tasks are running without error. */

+	    if( xAreIntegerMathsTaskStillRunning() != pdTRUE )

+	    {

+			pcStatusMessage = "Error: IntMath";

+	    }	

+		else if( xAreGenericQueueTasksStillRunning() != pdTRUE )

+		{			

+			pcStatusMessage = "Error: GenQueue";

+		}

+		else if( xAreQueuePeekTasksStillRunning() != pdTRUE )

+		{

+			pcStatusMessage = "Error: QueuePeek";

+		}

+		else if( xAreBlockingQueuesStillRunning() != pdTRUE )

+		{

+			pcStatusMessage = "Error: BlockQueue";

+		}

+//		else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )

+//		{

+//			pcStatusMessage = "Error: BlockTime";

+//		}

+	    else if( xAreSemaphoreTasksStillRunning() != pdTRUE )

+	    {

+			pcStatusMessage = "Error: SemTest";

+	    }

+	    else if( xArePollingQueuesStillRunning() != pdTRUE )

+	    {

+			pcStatusMessage = "Error: PollQueue";

+	    }

+	    else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )

+	    {

+			pcStatusMessage = "Error: RecMutex";

+	    }

+		else if( xAreMathsTaskStillRunning() != pdPASS )

+		{

+			pcStatusMessage = "Error: Flop";

+		}

+

+		/* This is the only task that uses stdout so its ok to call printf() 

+		directly. */

+		printf( "%s - %d\r\n", pcStatusMessage, xTaskGetTickCount() );

 	}

 }

 /*-----------------------------------------------------------*/

 

-static void prvTask1( void *pvParameters )

+void vApplicationIdleHook( void )

 {

-const char *pcTask1Message = "Task 1 running\r\n";

-const portTickType xTicksToDelay = 1000 / portTICK_RATE_MS;

-

-	/* Just to remove compiler warnings. */

-	( void ) pvParameters;

-

-	for( ;; )

-	{

-//		ul1++;

-		vMainConsolePrint( pcTask1Message, 0 );

-		vTaskDelay( xTicksToDelay );

-		ulT1Count++;

-	}

-}

-/*-----------------------------------------------------------*/

-

-static void prvTask2( void *pvParameters )

-{

-const char *pcTask2Message = "Task 2 running\r\n";

-const portTickType xTicksToDelay = 500 / portTICK_RATE_MS;

-

-	/* Just to remove compiler warnings. */

-	( void ) pvParameters;

-

-	for( ;; )

-	{

-//		ul2++;

-		vMainConsolePrint( pcTask2Message, 0 );

-		vTaskDelay( xTicksToDelay );

-		ulT2Count++;

-//		taskYIELD();

-	}

-}

-/*-----------------------------------------------------------*/

-

-void vApplicationIdleHook()

-{

-const unsigned long ulMSToSleep = 5;

-

 	/* 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

+	#if( configUSE_PREEMPTION != 0 )

 	{

 		SleepEx( INFINITE, TRUE );

 	}

 	#else

 	{

+		const unsigned long ulMSToSleep = 5;

+

 		SleepEx( ulMSToSleep, TRUE );

 	}

 	#endif

-

-	ulIdleCount++;

 }

+/*-----------------------------------------------------------*/

+

+void vApplicationMallocFailedHook( void )

+{

+	/* Can be implemented if required, but probably not required in this 

+	environment and running this demo. */

+}

+/*-----------------------------------------------------------*/

+

+void vApplicationStackOverflowHook( void )

+{

+	/* Can be implemented if required, but not required in this 

+	environment and running this demo. */

+}

+