Adjusted the wrap checks in the QueueSet test task.

Added the QueueSet test to the Rowlay Stellaris and SAM4S-EK Studio demos.
Updated the MSVC demo to use heap_4.c.
This commit is contained in:
Richard Barry 2013-02-12 14:30:12 +00:00
parent 0262f4a6cd
commit 9b26071eb8
13 changed files with 92 additions and 60 deletions

View file

@ -1,7 +1,7 @@
/* /*
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd. FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
*************************************************************************** ***************************************************************************
@ -42,7 +42,7 @@
FreeRTOS WEB site. FreeRTOS WEB site.
1 tab == 4 spaces! 1 tab == 4 spaces!
*************************************************************************** ***************************************************************************
* * * *
* Having a problem? Start by reading the FAQ "My application does * * Having a problem? Start by reading the FAQ "My application does *
@ -52,17 +52,17 @@
* * * *
*************************************************************************** ***************************************************************************
http://www.FreeRTOS.org - Documentation, training, latest versions, license http://www.FreeRTOS.org - Documentation, training, latest versions, license
and contact details. and contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool. including FreeRTOS+Trace - an indispensable productivity tool.
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
the code with commercial support, indemnification, and middleware, under the code with commercial support, indemnification, and middleware, under
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
provide a safety engineered and independently SIL3 certified version under provide a safety engineered and independently SIL3 certified version under
the SafeRTOS brand: http://www.SafeRTOS.com. the SafeRTOS brand: http://www.SafeRTOS.com.
*/ */
@ -99,6 +99,7 @@
#define configQUEUE_REGISTRY_SIZE 10 #define configQUEUE_REGISTRY_SIZE 10
#define configGENERATE_RUN_TIME_STATS 1 #define configGENERATE_RUN_TIME_STATS 1
#define configUSE_MALLOC_FAILED_HOOK 1 #define configUSE_MALLOC_FAILED_HOOK 1
#define configUSE_QUEUE_SETS 1
#define configMAX_PRIORITIES ( 5UL ) #define configMAX_PRIORITIES ( 5UL )
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
@ -132,4 +133,7 @@ to zero. */
version. */ version. */
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
/* Disable interrupts and sit in a null loop if assert is called. */
#define configASSERT( x ) if( ( x == 0 ) ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
#endif /* FREERTOS_CONFIG_H */ #endif /* FREERTOS_CONFIG_H */

View file

@ -58,7 +58,9 @@
<file file_name="../Common/include/death.h"/> <file file_name="../Common/include/death.h"/>
<file file_name="../Common/include/GenQTest.h"/> <file file_name="../Common/include/GenQTest.h"/>
<file file_name="../Common/include/integer.h"/> <file file_name="../Common/include/integer.h"/>
<file file_name="../Common/include/QueueSet.h"/>
</folder> </folder>
<file file_name="../Common/Minimal/QueueSet.c"/>
</folder> </folder>
<folder Name="WEB Server"> <folder Name="WEB Server">
<file file_name="webserver/uIP_Task.c"/> <file file_name="webserver/uIP_Task.c"/>

View file

@ -24,9 +24,7 @@
<ProjectSessionItem path="RTOSDemo" name="unnamed" /> <ProjectSessionItem path="RTOSDemo" name="unnamed" />
<ProjectSessionItem path="RTOSDemo;RTOSDemo" name="unnamed" /> <ProjectSessionItem path="RTOSDemo;RTOSDemo" name="unnamed" />
<ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files" name="unnamed" /> <ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files" name="unnamed" />
<ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files;FreeRTOS" name="unnamed" />
<ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files;include" name="unnamed" /> <ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files;include" name="unnamed" />
<ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files;WEB Server" name="unnamed" />
</Project> </Project>
<Register1> <Register1>
<RegisterWindow openNodes="CPU;CPU/xPSR;CPU/CFBP" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU" decimalNodes="" octalNodes="" asciiNodes="" /> <RegisterWindow openNodes="CPU;CPU/xPSR;CPU/CFBP" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU" decimalNodes="" octalNodes="" asciiNodes="" />
@ -57,7 +55,7 @@
<Watches active="0" update="Never" /> <Watches active="0" update="Never" />
</Watch4> </Watch4>
<Files> <Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_LM3Sxxxx_Rowley\main.c" y="238" path="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_LM3Sxxxx_Rowley\main.c" left="0" selected="1" name="unnamed" top="63" /> <SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_LM3Sxxxx_Rowley\main.c" y="241" path="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_LM3Sxxxx_Rowley\main.c" left="0" selected="1" name="unnamed" top="59" />
</Files> </Files>
<ARMCrossStudioWindow activeProject="RTOSDemo" autoConnectTarget="Luminary USB Debug" debugSearchFileMap="" fileDialogInitialDirectory="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Source\portable\MemMang" fileDialogDefaultFilter="*.*" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" /> <ARMCrossStudioWindow activeProject="RTOSDemo" autoConnectTarget="Luminary USB Debug" debugSearchFileMap="" fileDialogInitialDirectory="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\Common\include" fileDialogDefaultFilter="*.*" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
</session> </session>

View file

@ -1,7 +1,7 @@
/* /*
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd. FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
*************************************************************************** ***************************************************************************
@ -42,7 +42,7 @@
FreeRTOS WEB site. FreeRTOS WEB site.
1 tab == 4 spaces! 1 tab == 4 spaces!
*************************************************************************** ***************************************************************************
* * * *
* Having a problem? Start by reading the FAQ "My application does * * Having a problem? Start by reading the FAQ "My application does *
@ -52,17 +52,17 @@
* * * *
*************************************************************************** ***************************************************************************
http://www.FreeRTOS.org - Documentation, training, latest versions, license http://www.FreeRTOS.org - Documentation, training, latest versions, license
and contact details. and contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool. including FreeRTOS+Trace - an indispensable productivity tool.
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
the code with commercial support, indemnification, and middleware, under the code with commercial support, indemnification, and middleware, under
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
provide a safety engineered and independently SIL3 certified version under provide a safety engineered and independently SIL3 certified version under
the SafeRTOS brand: http://www.SafeRTOS.com. the SafeRTOS brand: http://www.SafeRTOS.com.
*/ */
@ -146,6 +146,7 @@
#include "QPeek.h" #include "QPeek.h"
#include "recmutex.h" #include "recmutex.h"
#include "IntQueue.h" #include "IntQueue.h"
#include "QueueSet.h"
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
@ -262,6 +263,7 @@ int main( void )
vStartQueuePeekTasks(); vStartQueuePeekTasks();
vStartRecursiveMutexTasks(); vStartRecursiveMutexTasks();
vStartInterruptQueueTasks(); vStartInterruptQueueTasks();
vStartQueueSetTasks();
/* Start the tasks defined within this file/specific to this demo. */ /* Start the tasks defined within this file/specific to this demo. */
xTaskCreate( vOLEDTask, ( signed char * ) "OLED", mainOLED_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL ); xTaskCreate( vOLEDTask, ( signed char * ) "OLED", mainOLED_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
@ -366,12 +368,18 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
{ {
xMessage.pcMessage = "ERROR IN INT QUEUE"; xMessage.pcMessage = "ERROR IN INT QUEUE";
} }
else if( xAreQueueSetTasksStillRunning() != pdTRUE )
{
xMessage.pcMessage = "ERROR IN QUEUE SET";
}
/* Send the message to the OLED gatekeeper for display. */ /* Send the message to the OLED gatekeeper for display. */
xHigherPriorityTaskWoken = pdFALSE; xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR( xOLEDQueue, &xMessage, &xHigherPriorityTaskWoken ); xQueueSendFromISR( xOLEDQueue, &xMessage, &xHigherPriorityTaskWoken );
} }
/* Exercise the queue sets from an ISR. */
vQueueSetAccessQueueSetFromISR();
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -92,27 +92,28 @@
#include <stdint.h> #include <stdint.h>
extern uint32_t SystemCoreClock; extern uint32_t SystemCoreClock;
#define configUSE_PREEMPTION 1 #define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 0 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
#define configUSE_TICK_HOOK 1 #define configUSE_IDLE_HOOK 0
#define configCPU_CLOCK_HZ ( SystemCoreClock ) #define configUSE_TICK_HOOK 1
#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) #define configCPU_CLOCK_HZ ( SystemCoreClock )
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 ) #define configTICK_RATE_HZ ( ( portTickType ) 1000 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 130 ) #define configMAX_PRIORITIES ( 5 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 40960 ) ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 130 )
#define configMAX_TASK_NAME_LEN ( 10 ) #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 40960 ) )
#define configUSE_TRACE_FACILITY 0 #define configMAX_TASK_NAME_LEN ( 10 )
#define configUSE_16_BIT_TICKS 0 #define configUSE_TRACE_FACILITY 0
#define configIDLE_SHOULD_YIELD 1 #define configUSE_16_BIT_TICKS 0
#define configUSE_MUTEXES 1 #define configIDLE_SHOULD_YIELD 1
#define configQUEUE_REGISTRY_SIZE 0 #define configUSE_MUTEXES 1
#define configCHECK_FOR_STACK_OVERFLOW 2 #define configQUEUE_REGISTRY_SIZE 0
#define configUSE_RECURSIVE_MUTEXES 1 #define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_MALLOC_FAILED_HOOK 1 #define configUSE_RECURSIVE_MUTEXES 1
#define configUSE_APPLICATION_TASK_TAG 0 #define configUSE_MALLOC_FAILED_HOOK 1
#define configUSE_COUNTING_SEMAPHORES 1 #define configUSE_APPLICATION_TASK_TAG 0
#define configUSE_QUEUE_SETS 1 #define configUSE_COUNTING_SEMAPHORES 1
#define configGENERATE_RUN_TIME_STATS 0 #define configUSE_QUEUE_SETS 1
#define configGENERATE_RUN_TIME_STATS 0
/* Co-routine definitions. */ /* Co-routine definitions. */
#define configUSE_CO_ROUTINES 0 #define configUSE_CO_ROUTINES 0

View file

@ -211,7 +211,7 @@ void vApplicationTickHook( void )
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 ) #if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 )
{ {
/* In this case the tick hook is used as part of the queue set test. */ /* In this case the tick hook is used as part of the queue set test. */
vQueueSetWriteToQueueFromISR(); vQueueSetAccessQueueSetFromISR();
} }
#endif /* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY */ #endif /* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY */
} }

View file

@ -116,13 +116,18 @@ queuesetPRIORITY_CHANGE_LOOPS number of values are sent to a queue. */
#define queuesetPRIORITY_CHANGE_LOOPS 100UL #define queuesetPRIORITY_CHANGE_LOOPS 100UL
/* The ISR sends to the queue every queuesetISR_TX_PERIOD ticks. */ /* The ISR sends to the queue every queuesetISR_TX_PERIOD ticks. */
#define queuesetISR_TX_PERIOD 2//( 100UL ) #define queuesetISR_TX_PERIOD ( 100UL )
/* The allowable maximum deviation between a received value and the expected /* The allowable maximum deviation between a received value and the expected
received value. A deviation will occur when data is received from a queue received value. A deviation will occur when data is received from a queue
inside an ISR in between a task receiving from a queue and the task checking inside an ISR in between a task receiving from a queue and the task checking
the received value. */ the received value. */
#define queuesetALLOWABLE_RX_DEVIATION 5 #define queuesetALLOWABLE_RX_DEVIATION 3
/* Ignore values that are at the boundaries of allowable values to make the
testing of limits easier (don't have to deal with wrapping values). */
#define queuesetIGNORED_BOUNDARY ( queuesetALLOWABLE_RX_DEVIATION * 2 )
/* /*
* The task that periodically sends to the queue set. * The task that periodically sends to the queue set.
*/ */
@ -414,17 +419,21 @@ static unsigned long ulExpectedReceivedFromTask = 0, ulExpectedReceivedFromISR =
if( ulReceived >= queuesetINITIAL_ISR_TX_VALUE ) if( ulReceived >= queuesetINITIAL_ISR_TX_VALUE )
{ {
/* The value was sent from the ISR. */ /* The value was sent from the ISR. */
if( ( ulReceived - queuesetINITIAL_ISR_TX_VALUE ) < queuesetALLOWABLE_RX_DEVIATION ) if( ( ulReceived - queuesetINITIAL_ISR_TX_VALUE ) < queuesetIGNORED_BOUNDARY )
{ {
/* The value received is at the lower limit of the expected range. /* The value received is at the lower limit of the expected range.
Don't test it and expect to receive one higher next time. */ Don't test it and expect to receive one higher next time. */
ulExpectedReceivedFromISR++; ulExpectedReceivedFromISR++;
} }
else if( ( ULONG_MAX - ulReceived ) <= queuesetALLOWABLE_RX_DEVIATION ) else if( ( ULONG_MAX - ulReceived ) <= queuesetIGNORED_BOUNDARY )
{ {
/* The value received is at the higher limit of the expected range. /* The value received is at the higher limit of the expected range.
Don't test it and expect to wrap soon. */ Don't test it and expect to wrap soon. */
ulExpectedReceivedFromISR = queuesetINITIAL_ISR_TX_VALUE; ulExpectedReceivedFromISR++;
if( ulExpectedReceivedFromISR == 0 )
{
ulExpectedReceivedFromISR = queuesetINITIAL_ISR_TX_VALUE;
}
} }
else else
{ {
@ -443,17 +452,21 @@ static unsigned long ulExpectedReceivedFromTask = 0, ulExpectedReceivedFromISR =
else else
{ {
/* The value was sent from the Tx task. */ /* The value was sent from the Tx task. */
if( ulReceived < queuesetALLOWABLE_RX_DEVIATION ) if( ulReceived < queuesetIGNORED_BOUNDARY )
{ {
/* The value received is at the lower limit of the expected range. /* The value received is at the lower limit of the expected range.
Don't test it, and expect to receive one higher next time. */ Don't test it, and expect to receive one higher next time. */
ulExpectedReceivedFromTask++; ulExpectedReceivedFromTask++;
} }
else if( ( ( queuesetINITIAL_ISR_TX_VALUE - 1 ) - ulReceived ) <= queuesetALLOWABLE_RX_DEVIATION ) else if( ( ( queuesetINITIAL_ISR_TX_VALUE - 1 ) - ulReceived ) <= queuesetIGNORED_BOUNDARY )
{ {
/* The value received is at the higher limit of the expected range. /* The value received is at the higher limit of the expected range.
Don't test it and expect to wrap soon. */ Don't test it and expect to wrap soon. */
ulExpectedReceivedFromTask = 0; ulExpectedReceivedFromTask++;
if( ulExpectedReceivedFromTask >= queuesetINITIAL_ISR_TX_VALUE )
{
ulExpectedReceivedFromTask = 0;
}
} }
else else
{ {

View file

@ -85,7 +85,7 @@
#define configUSE_TICK_HOOK 1 #define configUSE_TICK_HOOK 1
#define configTICK_RATE_HZ ( 1000 ) /* In this non-real time simulated environment the tick frequency has to be at least a multiple of the Win32 tick frequency, and therefore very slow. */ #define configTICK_RATE_HZ ( 1000 ) /* In this non-real time simulated environment the tick frequency has to be at least a multiple of the Win32 tick frequency, and therefore very slow. */
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 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 configMINIMAL_STACK_SIZE ( ( unsigned short ) 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 configTOTAL_HEAP_SIZE ( ( size_t ) ( 20 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 12 ) #define configMAX_TASK_NAME_LEN ( 12 )
#define configUSE_TRACE_FACILITY 1 #define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0 #define configUSE_16_BIT_TICKS 0

Binary file not shown.

View file

@ -129,7 +129,7 @@
<ClCompile Include="..\..\..\FreeRTOS-Plus\FreeRTOS-Plus-Trace\trcKernel.c" /> <ClCompile Include="..\..\..\FreeRTOS-Plus\FreeRTOS-Plus-Trace\trcKernel.c" />
<ClCompile Include="..\..\..\FreeRTOS-Plus\FreeRTOS-Plus-Trace\trcPort.c" /> <ClCompile Include="..\..\..\FreeRTOS-Plus\FreeRTOS-Plus-Trace\trcPort.c" />
<ClCompile Include="..\..\..\FreeRTOS-Plus\FreeRTOS-Plus-Trace\trcUser.c" /> <ClCompile Include="..\..\..\FreeRTOS-Plus\FreeRTOS-Plus-Trace\trcUser.c" />
<ClCompile Include="..\..\Source\portable\MemMang\heap_3.c" /> <ClCompile Include="..\..\Source\portable\MemMang\heap_4.c" />
<ClCompile Include="..\..\Source\timers.c" /> <ClCompile Include="..\..\Source\timers.c" />
<ClCompile Include="..\Common\Minimal\BlockQ.c" /> <ClCompile Include="..\Common\Minimal\BlockQ.c" />
<ClCompile Include="..\Common\Minimal\blocktim.c" /> <ClCompile Include="..\Common\Minimal\blocktim.c" />

View file

@ -49,9 +49,6 @@
<ClCompile Include="..\..\Source\tasks.c"> <ClCompile Include="..\..\Source\tasks.c">
<Filter>FreeRTOS Source\Source</Filter> <Filter>FreeRTOS Source\Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\Source\portable\MemMang\heap_3.c">
<Filter>FreeRTOS Source\Source</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\portable\MSVC-MingW\port.c"> <ClCompile Include="..\..\Source\portable\MSVC-MingW\port.c">
<Filter>FreeRTOS Source\Source\Portable</Filter> <Filter>FreeRTOS Source\Source\Portable</Filter>
</ClCompile> </ClCompile>
@ -115,6 +112,9 @@
<ClCompile Include="Run-time-stats-utils.c"> <ClCompile Include="Run-time-stats-utils.c">
<Filter>Demo App Source</Filter> <Filter>Demo App Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\Source\portable\MemMang\heap_4.c">
<Filter>FreeRTOS Source\Source\Portable</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="FreeRTOSConfig.h"> <ClInclude Include="FreeRTOSConfig.h">

View file

@ -96,6 +96,7 @@
/* Standard includes. */ /* Standard includes. */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
/* Kernel includes. */ /* Kernel includes. */
#include <FreeRTOS.h> #include <FreeRTOS.h>
@ -292,6 +293,7 @@ const unsigned long ulMSToSleep = 15;
xTaskHandle xIdleTaskHandle, xTimerTaskHandle, xTestTask; xTaskHandle xIdleTaskHandle, xTimerTaskHandle, xTestTask;
signed char *pcTaskName; signed char *pcTaskName;
const unsigned char ucConstQueueNumber = 0xaaU, ucConstTaskNumber = 0x55U; const unsigned char ucConstQueueNumber = 0xaaU, ucConstTaskNumber = 0x55U;
void *pvAllocated;
/* These three functions are only meant for use by trace code, and not for /* These three functions are only meant for use by trace code, and not for
direct use from application code, hence their prototypes are not in queue.h. */ direct use from application code, hence their prototypes are not in queue.h. */
@ -386,13 +388,17 @@ extern unsigned portBASE_TYPE uxTaskGetTaskNumber( xTaskHandle xTask );
} }
} }
} }
/* Exercise heap_4 a bit. The malloc failed hook will trap failed
allocations so there is no need to test here. */
pvAllocated = pvPortMalloc( ( rand() % 100 ) + 1 );
vPortFree( pvAllocated );
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void vApplicationMallocFailedHook( void ) void vApplicationMallocFailedHook( void )
{ {
/* Can be implemented if required, but probably not required in this vAssertCalled();
environment and running this demo. */
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/