]> git.sur5r.net Git - freertos/commitdiff
Complete testing of changes that allow xQueueOverwrite() to be used on a queue that...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 5 Mar 2018 21:35:50 +0000 (21:35 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 5 Mar 2018 21:35:50 +0000 (21:35 +0000)
Fix some compiler warnings in stream_buffer.c.
Update the MingW/Eclipse project so it also includes static allocation tests.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2532 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Demo/Common/Minimal/QueueSet.c
FreeRTOS/Demo/Common/Minimal/StreamBufferDemo.c
FreeRTOS/Demo/WIN32-MingW/.cproject
FreeRTOS/Demo/WIN32-MingW/.project
FreeRTOS/Demo/WIN32-MingW/FreeRTOSConfig.h
FreeRTOS/Demo/WIN32-MingW/main.c
FreeRTOS/Demo/WIN32-MingW/main_full.c

index 528ec06c08c2932c5e9965dee417387a4e5b80ad..2bd0cf60f14276053bc90a9f634ea09b114b10c9 100644 (file)
@@ -624,7 +624,7 @@ const UBaseType_t xLengthOfOne = ( UBaseType_t ) 1;
                /* Add an item to the queue then ensure the queue set correctly\r
                indicates that one item is available, and that that item is indeed the\r
                queue written to. */\r
-               xQueueSend( xQueueHandle, ( void * ) &ulValueToSend, 0 );\r
+               xQueueOverwrite( xQueueHandle, ( void * ) &ulValueToSend );\r
                if( uxQueueMessagesWaiting( xQueueSet ) != ( UBaseType_t ) 1 )\r
                {\r
                        /* Expected one item in the queue set. */\r
index 0c812ac8afa618bee57e312885a778984cdb85cf..a0cdda6c4e4b00c3e4a2d7381f7c3f766eab098a 100644 (file)
@@ -600,7 +600,7 @@ BaseType_t xNonBlockingReceiveError = pdFALSE;
                        xBytesToSend = xStringLength - xNextChar;\r
 \r
                        /* Attempt to send right up to the end of the string. */\r
-                       xBytesActuallySent = xStreamBufferSend( xStreamBuffer, ( void * ) &( pc55ByteString[ xNextChar ] ), xBytesToSend, xTicksToWait );\r
+                       xBytesActuallySent = xStreamBufferSend( xStreamBuffer, ( const void * ) &( pc55ByteString[ xNextChar ] ), xBytesToSend, xTicksToWait );\r
                        configASSERT( xBytesActuallySent <= xBytesToSend );\r
 \r
                        /* Move the index up the string to the next character to be sent,\r
@@ -661,7 +661,7 @@ BaseType_t xNonBlockingReceiveError = pdFALSE;
                        } while( xReceivedLength == 0 );\r
 \r
                        /* Ensure the received string matches the expected string. */\r
-                       configASSERT( memcmp( ( void * ) cRxString, ( void * ) &( pc55ByteString[ xNextChar ] ), xReceivedLength ) == 0 );\r
+                       configASSERT( memcmp( ( void * ) cRxString, ( const void * ) &( pc55ByteString[ xNextChar ] ), xReceivedLength ) == 0 );\r
 \r
                        /* Move the index into the string up to the end of the bytes\r
                        received so far - wrapping if the end of the string has been\r
index b49c52a21c3ffcfdb0c0be12f6758d52126126fc..c4882f3f4ebc3e06b6fa4d4d40b78c04c6a30e3f 100644 (file)
@@ -2,7 +2,7 @@
 <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">\r
        <storageModule moduleId="org.eclipse.cdt.core.settings">\r
                <cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.debug.396692239">\r
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.debug.396692239" moduleId="org.eclipse.cdt.core.settings" name="Debug">\r
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.debug.396692239" moduleId="org.eclipse.cdt.core.settings" name="Debug_Full">\r
                                <externalSettings/>\r
                                <extensions>\r
                                        <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>\r
@@ -12,7 +12,7 @@
                                </extensions>\r
                        </storageModule>\r
                        <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
-                               <configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.debug.396692239" name="Debug" parent="cdt.managedbuild.config.gnu.mingw.exe.debug">\r
+                               <configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="Everything Enabled" id="cdt.managedbuild.config.gnu.mingw.exe.debug.396692239" name="Debug_Full" parent="cdt.managedbuild.config.gnu.mingw.exe.debug">\r
                                        <folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.396692239." name="/" resourcePath="">\r
                                                <toolChain id="cdt.managedbuild.toolchain.gnu.mingw.exe.debug.1619684599" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.exe.debug">\r
                                                        <targetPlatform id="cdt.managedbuild.target.gnu.platform.mingw.exe.debug.1827277435" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.mingw.exe.debug"/>\r
                                                        <tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug.500696043" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug"/>\r
                                                </toolChain>\r
                                        </folderInfo>\r
-                                       <folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.396692239.363521217" name="/" resourcePath="FreeRTOS+Trace Recorder/streamports">\r
-                                               <toolChain id="cdt.managedbuild.toolchain.gnu.mingw.exe.debug.2001714173" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.exe.debug" unusedChildren="">\r
-                                                       <tool id="cdt.managedbuild.tool.gnu.assembler.mingw.exe.debug.484223068" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.exe.debug.2050893079"/>\r
-                                                       <tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.1176918279" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base.867063893"/>\r
-                                                       <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.1512464009" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.1190873987"/>\r
-                                                       <tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.666862055" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1285167012"/>\r
-                                                       <tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.debug.1503833368" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.debug.2080839343"/>\r
-                                                       <tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug.2108315890" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug.500696043"/>\r
-                                               </toolChain>\r
-                                       </folderInfo>\r
                                        <sourceEntries>\r
                                                <entry excluding="FreeRTOS+Trace Recorder/streamports" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
                                        </sourceEntries>\r
index 07f94ab4e0f324f8ffca58f596f4ed7fcb8090f1..f23f16227588f92bca7147fae2835985fb3fd07c 100644 (file)
@@ -56,7 +56,7 @@
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948166</id>\r
+                       <id>1520280722235</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
@@ -65,7 +65,7 @@
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948169</id>\r
+                       <id>1520280722238</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
@@ -74,7 +74,7 @@
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948172</id>\r
+                       <id>1520280722242</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
@@ -83,7 +83,7 @@
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948176</id>\r
+                       <id>1520280722245</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
@@ -92,7 +92,7 @@
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948179</id>\r
+                       <id>1520280722248</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948183</id>\r
+                       <id>1520280722252</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948186</id>\r
+                       <id>1520280722255</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948190</id>\r
+                       <id>1520280722260</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948195</id>\r
+                       <id>1520280722266</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948199</id>\r
+                       <id>1520280722269</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948202</id>\r
+                       <id>1520280722274</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948213</id>\r
+                       <id>1520280722279</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948216</id>\r
+                       <id>1520280722282</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948224</id>\r
+                       <id>1520280722286</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948228</id>\r
+                       <id>1520280722289</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948231</id>\r
+                       <id>1520280722292</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948235</id>\r
+                       <id>1520280722296</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948237</id>\r
+                       <id>1520280722342</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948240</id>\r
+                       <id>1520280722367</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948242</id>\r
+                       <id>1520280722370</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948269</id>\r
+                       <id>1520280722374</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948274</id>\r
+                       <id>1520280722380</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948277</id>\r
+                       <id>1520280722384</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948281</id>\r
+                       <id>1520280722388</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                        </matcher>\r
                </filter>\r
                <filter>\r
-                       <id>1519407948286</id>\r
+                       <id>1520280722391</id>\r
                        <name>Standard_Demo_Tasks</name>\r
                        <type>5</type>\r
                        <matcher>\r
                                <arguments>1.0-name-matches-false-false-MessageBufferAMP.c</arguments>\r
                        </matcher>\r
                </filter>\r
+               <filter>\r
+                       <id>1520280722395</id>\r
+                       <name>Standard_Demo_Tasks</name>\r
+                       <type>5</type>\r
+                       <matcher>\r
+                               <id>org.eclipse.ui.ide.multiFilter</id>\r
+                               <arguments>1.0-name-matches-false-false-StaticAllocation.c</arguments>\r
+                       </matcher>\r
+               </filter>\r
                <filter>\r
                        <id>0</id>\r
                        <name>FreeRTOS_Source/portable</name>\r
index f25119d49ae9d5b72ab6778d2e75c13c5a891d1c..671508c9a8db4acd69ceee6900eb1ec9a4f375a5 100644 (file)
@@ -62,7 +62,7 @@
 #define configUSE_ALTERNATIVE_API                              0\r
 #define configUSE_QUEUE_SETS                                   1\r
 #define configUSE_TASK_NOTIFICATIONS                   1\r
-#define configSUPPORT_STATIC_ALLOCATION                        0\r
+#define configSUPPORT_STATIC_ALLOCATION                        1\r
 \r
 /* Software timer related configuration options. */\r
 #define configUSE_TIMERS                                               1\r
@@ -114,7 +114,7 @@ uses the same semantics as the standard C assert() macro. */
 extern void vAssertCalled( unsigned long ulLine, const char * const pcFileName );\r
 #define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __LINE__, __FILE__ )\r
 \r
-#define configINCLUDE_MESSAGE_BUFFER_AMP_DEMO  1\r
+#define configINCLUDE_MESSAGE_BUFFER_AMP_DEMO  0\r
 #if ( configINCLUDE_MESSAGE_BUFFER_AMP_DEMO == 1 )\r
        extern void vGenerateCoreBInterrupt( void * xUpdatedMessageBuffer );\r
        #define sbSEND_COMPLETED( pxStreamBuffer ) vGenerateCoreBInterrupt( pxStreamBuffer )\r
index 1c994bcb7e5606f232b42609b734931049a80a15..cfb16a4b0524b49411f624f28003d8d32776bc06 100644 (file)
@@ -75,9 +75,9 @@ that make up the total heap.  heap_5 is only used for test and example purposes
 as this demo could easily create one large heap region instead of multiple\r
 smaller heap regions - in which case heap_4.c would be the more appropriate\r
 choice.  See http://www.freertos.org/a00111.html for an explanation. */\r
-#define mainREGION_1_SIZE      7201\r
+#define mainREGION_1_SIZE      8201\r
 #define mainREGION_2_SIZE      29905\r
-#define mainREGION_3_SIZE      6407\r
+#define mainREGION_3_SIZE      6007\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -111,6 +111,8 @@ void vApplicationMallocFailedHook( void );
 void vApplicationIdleHook( void );\r
 void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );\r
 void vApplicationTickHook( void );\r
+void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );\r
+void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize );\r
 \r
 /*\r
  * Writes trace data to a disk file when the trace recording is stopped.\r
@@ -118,6 +120,15 @@ void vApplicationTickHook( void );
  */\r
 static void prvSaveTraceFile( void );\r
 \r
+/*-----------------------------------------------------------*/\r
+\r
+/* When configSUPPORT_STATIC_ALLOCATION is set to 1 the application writer can\r
+use a callback function to optionally provide the memory required by the idle\r
+and timer tasks.  This is the stack that will be used by the timer task.  It is\r
+declared here, as a global, so it can be checked by a test that is implemented\r
+in a different file. */\r
+StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];\r
+\r
 /* Notes if the trace is running or not. */\r
 static BaseType_t xTraceRunning = pdTRUE;\r
 \r
@@ -341,3 +352,52 @@ const HeapRegion_t xHeapRegions[] =
        vPortDefineHeapRegions( xHeapRegions );\r
 }\r
 /*-----------------------------------------------------------*/\r
+\r
+/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an\r
+implementation of vApplicationGetIdleTaskMemory() to provide the memory that is\r
+used by the Idle task. */\r
+void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )\r
+{\r
+/* If the buffers to be provided to the Idle task are declared inside this\r
+function then they must be declared static - otherwise they will be allocated on\r
+the stack and so not exists after this function exits. */\r
+static StaticTask_t xIdleTaskTCB;\r
+static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];\r
+\r
+       /* Pass out a pointer to the StaticTask_t structure in which the Idle task's\r
+       state will be stored. */\r
+       *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;\r
+\r
+       /* Pass out the array that will be used as the Idle task's stack. */\r
+       *ppxIdleTaskStackBuffer = uxIdleTaskStack;\r
+\r
+       /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.\r
+       Note that, as the array is necessarily of type StackType_t,\r
+       configMINIMAL_STACK_SIZE is specified in words, not bytes. */\r
+       *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* configUSE_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the\r
+application must provide an implementation of vApplicationGetTimerTaskMemory()\r
+to provide the memory that is used by the Timer service task. */\r
+void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )\r
+{\r
+/* If the buffers to be provided to the Timer task are declared inside this\r
+function then they must be declared static - otherwise they will be allocated on\r
+the stack and so not exists after this function exits. */\r
+static StaticTask_t xTimerTaskTCB;\r
+\r
+       /* Pass out a pointer to the StaticTask_t structure in which the Timer\r
+       task's state will be stored. */\r
+       *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;\r
+\r
+       /* Pass out the array that will be used as the Timer task's stack. */\r
+       *ppxTimerTaskStackBuffer = uxTimerTaskStack;\r
+\r
+       /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.\r
+       Note that, as the array is necessarily of type StackType_t,\r
+       configMINIMAL_STACK_SIZE is specified in words, not bytes. */\r
+       *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;\r
+}\r
+\r
index b67a6fd0cc3398d58acdf6fcdbf8ddb211358747..38e303521e3c5ee5b371a87344d2d1ee73341434 100644 (file)
 \r
 /* Kernel includes. */\r
 #include <FreeRTOS.h>\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "timers.h"\r
-#include "semphr.h"\r
+#include <task.h>\r
+#include <queue.h>\r
+#include <timers.h>\r
+#include <semphr.h>\r
 \r
 /* Standard demo includes. */\r
 #include "BlockQ.h"\r
@@ -98,6 +98,7 @@
 #include "IntSemTest.h"\r
 #include "TaskNotify.h"\r
 #include "QueueSetPolling.h"\r
+#include "StaticAllocation.h"\r
 #include "blocktim.h"\r
 #include "AbortDelay.h"\r
 #include "MessageBufferDemo.h"\r
@@ -209,6 +210,12 @@ int main_full( void )
        vStartStreamBufferInterruptDemo();\r
        vStartMessageBufferAMPTasks();\r
 \r
+       #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
+       {\r
+               vStartStaticallyAllocatedTasks();\r
+       }\r
+       #endif\r
+\r
        #if( configUSE_PREEMPTION != 0  )\r
        {\r
                /* Don't expect these tasks to pass when preemption is not used. */\r
@@ -577,6 +584,7 @@ char *pcTaskName;
 static portBASE_TYPE xPerformedOneShotTests = pdFALSE;\r
 TaskHandle_t xTestTask;\r
 TaskStatus_t xTaskInfo;\r
+extern StackType_t uxTimerTaskStack[];\r
 \r
        /* Demonstrate the use of the xTimerGetTimerDaemonTaskHandle() and\r
        xTaskGetIdleTaskHandle() functions.  Also try using the function that sets\r
@@ -637,6 +645,7 @@ TaskStatus_t xTaskInfo;
        if( ( xTaskInfo.eCurrentState != eBlocked )                                              ||\r
                ( strcmp( xTaskInfo.pcTaskName, "Tmr Svc" ) != 0 )                       ||\r
                ( xTaskInfo.uxCurrentPriority != configTIMER_TASK_PRIORITY ) ||\r
+               ( xTaskInfo.pxStackBase != uxTimerTaskStack )                            ||\r
                ( xTaskInfo.xHandle != xTimerTaskHandle ) )\r
        {\r
                pcStatusMessage = "Error:  vTaskGetInfo() returned incorrect information about the timer task";\r