]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/Common/Minimal/StreamBufferDemo.c
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Demo / Common / Minimal / StreamBufferDemo.c
index 6cafe14c4de3afc8ae5c845ee89d0ddadd099e6e..49546ce96a3ae72ae6952818dae43138bccb4213 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
  * this software and associated documentation files (the "Software"), to deal in\r
@@ -283,8 +283,8 @@ UBaseType_t uxOriginalPriority;
        xReturned = xStreamBufferSend( xStreamBuffer, ( void * ) pucData, sizeof( pucData[ 0 ] ), xBlockTime );\r
        xTimeAfterCall = xTaskGetTickCount();\r
        vTaskPrioritySet( NULL, uxOriginalPriority );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) >= xBlockTime );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) < ( xBlockTime + xAllowableMargin ) );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) >= xBlockTime );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) < ( xBlockTime + xAllowableMargin ) );\r
        prvCheckExpectedState( xReturned == 0 );\r
 \r
        /* The buffer is now full of data in the form "000000", "111111", etc.  Make\r
@@ -331,8 +331,8 @@ UBaseType_t uxOriginalPriority;
        xReturned = xStreamBufferReceive( xStreamBuffer, ( void * ) pucReadData, x6ByteLength, xBlockTime );\r
        xTimeAfterCall = xTaskGetTickCount();\r
        vTaskPrioritySet( NULL, uxOriginalPriority );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) >= xBlockTime );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) < ( xBlockTime + xAllowableMargin ) );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) >= xBlockTime );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) < ( xBlockTime + xAllowableMargin ) );\r
        prvCheckExpectedState( xReturned == 0 );\r
 \r
 \r
@@ -847,7 +847,7 @@ const TickType_t xTicksToBlock = pdMS_TO_TICKS( 350UL );
        /* Don't expect to receive anything yet! */\r
        xTimeOnEntering = xTaskGetTickCount();\r
        xReceivedLength = xStreamBufferReceive( xStreamBuffers.xEchoClientBuffer, ( void * ) pcReceivedString, sbSTREAM_BUFFER_LENGTH_BYTES, xTicksToBlock );\r
-       prvCheckExpectedState( ( xTaskGetTickCount() - xTimeOnEntering ) >= xTicksToBlock );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTaskGetTickCount() - xTimeOnEntering ) ) >= xTicksToBlock );\r
        prvCheckExpectedState( xReceivedLength == 0 );\r
 \r
        /* Now the stream buffers have been created the echo client task can be\r
@@ -933,6 +933,7 @@ BaseType_t xErrorDetected = pdFALSE;
                {\r
                        /* Create the stream buffer that will be used from inside the tick\r
                        interrupt. */\r
+                       memset( ucRxData, 0x00, sizeof( ucRxData ) );\r
                        xStreamBuffer = xStreamBufferCreate( xStreamBufferSizeBytes, xTriggerLevel );\r
                        configASSERT( xStreamBuffer );\r
 \r
@@ -958,21 +959,36 @@ BaseType_t xErrorDetected = pdFALSE;
                        /* Now check the number of bytes received equals the trigger level,\r
                        except in the case that the read timed out before the trigger level\r
                        was reached. */\r
-                       if( xBytesReceived < xTriggerLevel )\r
+                       if( xTriggerLevel > xReadBlockTime )\r
                        {\r
-                               /* This should only happen if the trigger level was greater than\r
-                               the block time. */\r
-                               if( xTriggerLevel < xReadBlockTime )\r
+                               /* Trigger level was greater than the block time so expect to\r
+                               time out having received xReadBlockTime bytes. */\r
+                               if( ( xReadBlockTime - xBytesReceived ) > xAllowableMargin )\r
                                {\r
                                        xErrorDetected = pdTRUE;\r
                                }\r
                        }\r
-                       else if( ( xBytesReceived - xTriggerLevel ) > xAllowableMargin )\r
+                       else if( xTriggerLevel < xReadBlockTime )\r
                        {\r
-                               /* A margin may be required here if there are other high priority\r
-                               tasks prevent the task that reads from the message buffer running\r
-                               immediately. */\r
-                               xErrorDetected = pdTRUE;\r
+                               /* Trigger level was less than the block time so we expect to\r
+                               have received the trigger level number of bytes - could be more\r
+                               though depending on other activity between the task being\r
+                               unblocked and the task reading the number of bytes received. */\r
+                               if( ( xBytesReceived - xTriggerLevel ) > xAllowableMargin )\r
+                               {\r
+                                       xErrorDetected = pdTRUE;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               /* The trigger level equaled the block time, so expect to\r
+                               receive no greater than the block time, but one or two less is\r
+                               ok due to variations in how far through the time slice the\r
+                               functions get executed. */\r
+                               if( ( xBytesReceived - xReadBlockTime ) > xAllowableMargin )\r
+                               {\r
+                                       xErrorDetected = pdTRUE;\r
+                               }\r
                        }\r
 \r
                        if( xBytesReceived > sizeof( ucRxData ) )\r