]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/Common/Minimal/AbortDelay.c
Remove casts from EventGroupHandle_t to EventGroup_t, and corresponding lint comments...
[freertos] / FreeRTOS / Demo / Common / Minimal / AbortDelay.c
index 100a54a3af278144d9d6fce8f16089d132c5aa7e..03cef929d788aa0f4bf6110d74c62d178a85cb09 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.0.0\r
+ * FreeRTOS Kernel V10.0.1\r
  * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
  *\r
  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
@@ -10,8 +10,7 @@
  * subject to the following conditions:\r
  *\r
  * The above copyright notice and this permission notice shall be included in all\r
- * copies or substantial portions of the Software. If you wish to use our Amazon\r
- * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
+ * copies or substantial portions of the Software.\r
  *\r
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
@@ -28,7 +27,9 @@
 \r
 /*\r
  * This file contains some test scenarios that ensure tasks respond correctly\r
- * to xTaskAbortDelay() calls.\r
+ * to xTaskAbortDelay() calls.  It also ensures tasks return the correct state\r
+ * of eBlocked when blocked indefinitely in both the case where a task is\r
+ * blocked on an object and when a task is blocked on a notification.\r
  */\r
 \r
 /* Standard includes. */\r
@@ -40,6 +41,7 @@
 #include "queue.h"\r
 #include "semphr.h"\r
 #include "event_groups.h"\r
+#include "stream_buffer.h"\r
 \r
 /* Demo includes. */\r
 #include "AbortDelay.h"\r
@@ -69,7 +71,8 @@ build.  Remove the whole file if this is not the case. */
 #define abtSEMAPHORE_TAKE_ABORTS       4\r
 #define abtEVENT_GROUP_ABORTS          5\r
 #define abtQUEUE_SEND_ABORTS           6\r
-#define abtMAX_TESTS                           7\r
+#define abtSTREAM_BUFFER_RECEIVE       7\r
+#define abtMAX_TESTS                           8\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -96,6 +99,7 @@ static void prvTestAbortingTaskDelayUntil( void );
 static void prvTestAbortingSemaphoreTake( void );\r
 static void prvTestAbortingEventGroupWait( void );\r
 static void prvTestAbortingQueueSend( void );\r
+static void prvTestAbortingStreamBufferReceive( void );\r
 \r
 /*\r
  * Checks the amount of time a task spent in the Blocked state is within the\r
@@ -242,6 +246,10 @@ const uint32_t ulMax = 0xffffffffUL;
                                prvTestAbortingQueueSend();\r
                                break;\r
 \r
+                       case abtSTREAM_BUFFER_RECEIVE:\r
+                               prvTestAbortingStreamBufferReceive();\r
+                               break;\r
+\r
                        default:\r
                                /* Should not get here. */\r
                                break;\r
@@ -418,6 +426,75 @@ EventBits_t xBitsToWaitFor = ( EventBits_t ) 0x01, xReturn;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+static void prvTestAbortingStreamBufferReceive( void )\r
+{\r
+TickType_t xTimeAtStart;\r
+StreamBufferHandle_t xStreamBuffer;\r
+EventBits_t xReturn;\r
+const size_t xTriggerLevelBytes = ( size_t ) 1;\r
+uint8_t uxRxData;\r
+\r
+       #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
+       {\r
+               /* Defines the memory that will actually hold the streams within the\r
+               stream buffer. */\r
+               static uint8_t ucStorageBuffer[ sizeof( configMESSAGE_BUFFER_LENGTH_TYPE ) + 1 ];\r
+\r
+               /* The variable used to hold the stream buffer structure. */\r
+               StaticStreamBuffer_t xStreamBufferStruct;\r
+\r
+\r
+               xStreamBuffer = xStreamBufferCreateStatic( sizeof( ucStorageBuffer ),\r
+                                                                                                  xTriggerLevelBytes,\r
+                                                                                                  ucStorageBuffer,\r
+                                                                                                  &xStreamBufferStruct );\r
+       }\r
+       #else\r
+       {\r
+               xStreamBuffer = xStreamBufferCreate( sizeof( uint8_t ), xTriggerLevelBytes );\r
+               configASSERT( xStreamBuffer );\r
+       }\r
+       #endif\r
+\r
+       /* Note the time before the delay so the length of the delay is known. */\r
+       xTimeAtStart = xTaskGetTickCount();\r
+\r
+       /* This first delay should just time out. */\r
+       xReturn = xStreamBufferReceive( xStreamBuffer, &uxRxData, sizeof( uxRxData ), xMaxBlockTime );\r
+       if( xReturn != 0x00 )\r
+       {\r
+               xErrorOccurred = pdTRUE;\r
+       }\r
+       prvCheckExpectedTimeIsWithinAnAcceptableMargin( xTimeAtStart, xMaxBlockTime );\r
+\r
+       /* Note the time before the delay so the length of the delay is known. */\r
+       xTimeAtStart = xTaskGetTickCount();\r
+\r
+       /* This second delay should be aborted by the primary task half way\r
+       through xMaxBlockTime. */\r
+       xReturn = xStreamBufferReceive( xStreamBuffer, &uxRxData, sizeof( uxRxData ), xMaxBlockTime );\r
+       if( xReturn != 0x00 )\r
+       {\r
+               xErrorOccurred = pdTRUE;\r
+       }\r
+       prvCheckExpectedTimeIsWithinAnAcceptableMargin( xTimeAtStart, xHalfMaxBlockTime );\r
+\r
+       /* Note the time before the delay so the length of the delay is known. */\r
+       xTimeAtStart = xTaskGetTickCount();\r
+\r
+       /* This third delay should just time out again. */\r
+       xReturn = xStreamBufferReceive( xStreamBuffer, &uxRxData, sizeof( uxRxData ), xMaxBlockTime );\r
+       if( xReturn != 0x00 )\r
+       {\r
+               xErrorOccurred = pdTRUE;\r
+       }\r
+       prvCheckExpectedTimeIsWithinAnAcceptableMargin( xTimeAtStart, xMaxBlockTime );\r
+\r
+       /* Not really necessary in this case, but for completeness. */\r
+       vStreamBufferDelete( xStreamBuffer );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 static void prvTestAbortingQueueSend( void )\r
 {\r
 TickType_t xTimeAtStart;\r
@@ -524,8 +601,8 @@ SemaphoreHandle_t xSemaphore;
        xTimeAtStart = xTaskGetTickCount();\r
 \r
        /* This second delay should be aborted by the primary task half way\r
-       through. */\r
-       xReturn = xSemaphoreTake( xSemaphore, xMaxBlockTime );\r
+       through xMaxBlockTime. */\r
+       xReturn = xSemaphoreTake( xSemaphore, portMAX_DELAY );\r
        if( xReturn != pdFALSE )\r
        {\r
                xErrorOccurred = pdTRUE;\r
@@ -568,8 +645,8 @@ BaseType_t xReturn;
        xTimeAtStart = xTaskGetTickCount();\r
 \r
        /* This second delay should be aborted by the primary task half way\r
-       through. */\r
-       xReturn = xTaskNotifyWait( 0, 0, NULL, xMaxBlockTime );\r
+       through xMaxBlockTime. */\r
+       xReturn = xTaskNotifyWait( 0, 0, NULL, portMAX_DELAY );\r
        if( xReturn != pdFALSE )\r
        {\r
                xErrorOccurred = pdTRUE;\r