Make self monitoring in QueueSet.c more robust to prevent false positives.

pull/4/head
Richard Barry 12 years ago
parent c63a81af99
commit dd3fdfa9ff

@ -75,6 +75,7 @@
* queuesetINITIAL_ISR_TX_VALUE to ULONG_MAX. * queuesetINITIAL_ISR_TX_VALUE to ULONG_MAX.
*/ */
/* Standard includes. */ /* Standard includes. */
#include <stdlib.h> #include <stdlib.h>
#include <limits.h> #include <limits.h>
@ -105,7 +106,6 @@ in the range of 0xffff to ULONG_MAX. */
/* The priorities used in this demo. */ /* The priorities used in this demo. */
#define queuesetLOW_PRIORITY ( tskIDLE_PRIORITY ) #define queuesetLOW_PRIORITY ( tskIDLE_PRIORITY )
#define queuesetMEDIUM_PRIORITY ( queuesetLOW_PRIORITY + 1 ) #define queuesetMEDIUM_PRIORITY ( queuesetLOW_PRIORITY + 1 )
#define queuesetHIGH_PRIORITY ( queuesetMEDIUM_PRIORITY + 1 )
/* For test purposes the priority of the sending task is changed after every /* For test purposes the priority of the sending task is changed after every
queuesetPRIORITY_CHANGE_LOOPS number of values are sent to a queue. */ queuesetPRIORITY_CHANGE_LOOPS number of values are sent to a queue. */
@ -165,7 +165,7 @@ static void prvSendToQueueInSetFromISR( void );
* Create the queues and add them to a queue set before resuming the Tx * Create the queues and add them to a queue set before resuming the Tx
* task. * task.
*/ */
static void prvSetupTest( xTaskHandle xQueueSetSendingTask ); static void prvSetupTest( void );
/* /*
* Checks a value received from a queue falls within the range of expected * Checks a value received from a queue falls within the range of expected
@ -227,9 +227,7 @@ xTaskHandle xQueueSetSendingTask, xQueueSetReceivingTask;
void vStartQueueSetTasks( void ) void vStartQueueSetTasks( void )
{ {
/* Create the two queues. The handle of the sending task is passed into /* Create the tasks. */
the receiving task using the task parameter. The receiving task uses the
handle to resume the sending task after it has created the queues. */
xTaskCreate( prvQueueSetSendingTask, ( signed char * ) "SetTx", configMINIMAL_STACK_SIZE, NULL, queuesetMEDIUM_PRIORITY, &xQueueSetSendingTask ); xTaskCreate( prvQueueSetSendingTask, ( signed char * ) "SetTx", configMINIMAL_STACK_SIZE, NULL, queuesetMEDIUM_PRIORITY, &xQueueSetSendingTask );
xTaskCreate( prvQueueSetReceivingTask, ( signed char * ) "SetRx", configMINIMAL_STACK_SIZE, ( void * ) xQueueSetSendingTask, queuesetMEDIUM_PRIORITY, &xQueueSetReceivingTask ); xTaskCreate( prvQueueSetReceivingTask, ( signed char * ) "SetRx", configMINIMAL_STACK_SIZE, ( void * ) xQueueSetSendingTask, queuesetMEDIUM_PRIORITY, &xQueueSetReceivingTask );
@ -388,14 +386,10 @@ static void prvQueueSetReceivingTask( void *pvParameters )
{ {
unsigned long ulReceived; unsigned long ulReceived;
xQueueHandle xActivatedQueue; xQueueHandle xActivatedQueue;
xTaskHandle xQueueSetSendingTask;
/* The handle to the sending task is passed in using the task parameter. */
xQueueSetSendingTask = ( xTaskHandle ) pvParameters;
/* Create the queues and add them to the queue set before resuming the Tx /* Create the queues and add them to the queue set before resuming the Tx
task. */ task. */
prvSetupTest( xQueueSetSendingTask ); prvSetupTest();
for( ;; ) for( ;; )
{ {
@ -483,17 +477,11 @@ static unsigned long ulExpectedReceivedFromTask = 0, ulExpectedReceivedFromISR =
{ {
/* 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++;
} }
else if( ( ULONG_MAX - ulReceived ) <= queuesetIGNORED_BOUNDARY ) 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++;
if( ulExpectedReceivedFromISR == 0 )
{
ulExpectedReceivedFromISR = queuesetINITIAL_ISR_TX_VALUE;
}
} }
else else
{ {
@ -502,11 +490,15 @@ static unsigned long ulExpectedReceivedFromTask = 0, ulExpectedReceivedFromISR =
{ {
xQueueSetTasksStatus = pdFAIL; xQueueSetTasksStatus = pdFAIL;
} }
else }
{
/* It is expected to receive an incrementing value. */ configASSERT( xQueueSetTasksStatus );
ulExpectedReceivedFromISR++;
} /* It is expected to receive an incrementing number. */
ulExpectedReceivedFromISR++;
if( ulExpectedReceivedFromISR == 0 )
{
ulExpectedReceivedFromISR = queuesetINITIAL_ISR_TX_VALUE;
} }
} }
else else
@ -516,17 +508,11 @@ static unsigned long ulExpectedReceivedFromTask = 0, ulExpectedReceivedFromISR =
{ {
/* 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++;
} }
else if( ( ( queuesetINITIAL_ISR_TX_VALUE - 1 ) - ulReceived ) <= queuesetIGNORED_BOUNDARY ) 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++;
if( ulExpectedReceivedFromTask >= queuesetINITIAL_ISR_TX_VALUE )
{
ulExpectedReceivedFromTask = 0;
}
} }
else else
{ {
@ -535,11 +521,15 @@ static unsigned long ulExpectedReceivedFromTask = 0, ulExpectedReceivedFromISR =
{ {
xQueueSetTasksStatus = pdFAIL; xQueueSetTasksStatus = pdFAIL;
} }
else }
{
/* It is expected to receive an incrementing value. */ configASSERT( xQueueSetTasksStatus );
ulExpectedReceivedFromTask++;
} /* It is expected to receive an incrementing number. */
ulExpectedReceivedFromTask++;
if( ulExpectedReceivedFromTask >= queuesetINITIAL_ISR_TX_VALUE )
{
ulExpectedReceivedFromTask = 0;
} }
} }
} }
@ -619,7 +609,7 @@ static portBASE_TYPE xQueueToWriteTo = 0;
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
static void prvSetupTest( xTaskHandle xQueueSetSendingTask ) static void prvSetupTest( void )
{ {
portBASE_TYPE x; portBASE_TYPE x;
unsigned long ulValueToSend = 0; unsigned long ulValueToSend = 0;
@ -706,7 +696,7 @@ unsigned long ulValueToSend = 0;
static unsigned long prvRand( void ) static unsigned long prvRand( void )
{ {
ulNextRand = ( ulNextRand * 1103515245UL ) + 12345UL; ulNextRand = ( ulNextRand * 1103515245UL ) + 12345UL;
return (ulNextRand / 65536UL ) % 32768UL; return ( ulNextRand / 65536UL ) % 32768UL;
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

Loading…
Cancel
Save