]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/Common/Minimal/TaskNotify.c
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / Common / Minimal / TaskNotify.c
index 48182b9481c756c299f4cefb8c2eb94124fc18e7..c06d9822b1cb8f62a2776411b60f0a8935364310 100644 (file)
@@ -147,7 +147,7 @@ static void prvSingleTaskTests( void )
 {\r
 const TickType_t xTicksToWait = pdMS_TO_TICKS( 100UL );\r
 BaseType_t xReturned;\r
-uint32_t ulNotifiedValue, ulLoop, ulNotifyingValue;\r
+uint32_t ulNotifiedValue, ulLoop, ulNotifyingValue, ulPreviousValue, ulExpectedValue;\r
 TickType_t xTimeOnEntering;\r
 const uint32_t ulFirstNotifiedConst = 100001UL, ulSecondNotifiedValueConst = 5555UL, ulMaxLoops = 5UL;\r
 const uint32_t ulBit0 = 0x01UL, ulBit1 = 0x02UL;\r
@@ -172,12 +172,15 @@ const uint32_t ulBit0 = 0x01UL, ulBit1 = 0x02UL;
        Check no blocking when notifications are pending.  First notify itself -\r
        this would not be a normal thing to do and is done here for test purposes\r
        only. */\r
-       xReturned = xTaskNotify( xTaskToNotify, ulFirstNotifiedConst, eSetValueWithoutOverwrite );\r
+       xReturned = xTaskNotifyAndQuery( xTaskToNotify, ulFirstNotifiedConst, eSetValueWithoutOverwrite, &ulPreviousValue );\r
 \r
        /* Even through the 'without overwrite' action was used the update should\r
        have been successful. */\r
        configASSERT( xReturned == pdPASS );\r
 \r
+       /* No bits should have been pending previously. */\r
+       configASSERT( ulPreviousValue == 0 );\r
+\r
        /* The task should now have a notification pending, and so not time out. */\r
        xTimeOnEntering = xTaskGetTickCount();\r
        xReturned = xTaskNotifyWait( ULONG_MAX, 0, &ulNotifiedValue, xTicksToWait );\r
@@ -351,6 +354,28 @@ const uint32_t ulBit0 = 0x01UL, ulBit1 = 0x02UL;
 \r
 \r
 \r
+\r
+       /*--------------------------------------------------------------------------\r
+       Now try querying the previus value while notifying a task. */\r
+       xTaskNotifyAndQuery( xTaskToNotify, 0x00, eSetBits, &ulPreviousValue );\r
+       configASSERT( ulNotifiedValue == ( ULONG_MAX & ~( ulBit0 | ulBit1 ) ) );\r
+\r
+       /* Clear all bits. */\r
+       xTaskNotifyWait( 0x00, ULONG_MAX, &ulNotifiedValue, 0 );\r
+       xTaskNotifyAndQuery( xTaskToNotify, 0x00, eSetBits, &ulPreviousValue );\r
+       configASSERT( ulPreviousValue == 0 );\r
+\r
+       ulExpectedValue = 0;\r
+       for( ulLoop = 0x01; ulLoop < 0x80UL; ulLoop <<= 1UL )\r
+       {\r
+               /* Set the next bit up, and expect to receive the last bits set (so\r
+               the previous value will not yet have the bit being set this time\r
+               around). */\r
+               xTaskNotifyAndQuery( xTaskToNotify, ulLoop, eSetBits, &ulPreviousValue );\r
+               configASSERT( ulExpectedValue == ulPreviousValue );\r
+               ulExpectedValue |= ulLoop;\r
+       }\r
+\r
        /* Incremented to show the task is still running. */\r
        ulNotifyCycleCount++;\r
 \r