]> git.sur5r.net Git - freertos/commitdiff
Add a small amount of randomisation into the Zynq demo.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 11 Feb 2014 11:37:42 +0000 (11:37 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 11 Feb 2014 11:37:42 +0000 (11:37 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2200 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/main.c

index 7c716b6133df256026703aafe6f7681ae246e60d..a6d353fc7791d5f0fc6aaae0b9261bba3baeb366 100644 (file)
@@ -218,6 +218,13 @@ extern void vRegisterSampleCLICommands( void );
  */\r
 extern void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );\r
 \r
+/*\r
+ * A high priority task that does nothing other than execute at a pseudo random\r
+ * time to ensure the other test tasks don't just execute in a repeating\r
+ * pattern.\r
+ */\r
+static void prvPseudoRandomiser( void *pvParameters );\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* The following two variables are used to communicate the status of the\r
@@ -257,6 +264,9 @@ void main_full( void )
        xTaskCreate( prvRegTestTaskEntry1, "Reg1", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_1_PARAMETER, tskIDLE_PRIORITY, NULL );\r
        xTaskCreate( prvRegTestTaskEntry2, "Reg2", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_2_PARAMETER, tskIDLE_PRIORITY, NULL );\r
 \r
+       /* Create the task that just adds a little random behaviour. */\r
+       xTaskCreate( prvPseudoRandomiser, "Rnd", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );\r
+\r
        /* Create the task that performs the 'check' functionality,     as described at\r
        the top of this file. */\r
        xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
@@ -450,6 +460,40 @@ static void prvRegTestTaskEntry2( void *pvParameters )
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+static void prvPseudoRandomiser( void *pvParameters )\r
+{\r
+const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL, ulMinDelay = ( 35 / portTICK_PERIOD_MS );\r
+volatile uint32_t ulNextRand = ( uint32_t ) &pvParameters, ulValue;\r
+\r
+       /* This task does nothing other than ensure there is a little bit of\r
+       disruption in the scheduling pattern of the other tasks.  Normally this is\r
+       done by generating interrupts at pseudo random times. */\r
+       for( ;; )\r
+       {\r
+               ulNextRand = ( ulMultiplier * ulNextRand ) + ulIncrement;\r
+               ulValue = ( ulNextRand >> 16UL ) & 0xffUL;\r
+\r
+               if( ulValue < ulMinDelay )\r
+               {\r
+                       ulValue = ulMinDelay;\r
+               }\r
+\r
+               vTaskDelay( ulValue );\r
+\r
+               while( ulValue > 0 )\r
+               {\r
+                       __asm volatile( "NOP" );\r
+                       __asm volatile( "NOP" );\r
+                       __asm volatile( "NOP" );\r
+                       __asm volatile( "NOP" );\r
+\r
+                       ulValue--;\r
+               }\r
+       }\r
+}\r
+\r
+\r
+\r
 \r
 \r
 \r
index 29d160a6804bf4e9a4311cc2f99169837ad612ed..079ba995386519fd54555a7b5b2284ea3638c02c 100644 (file)
@@ -316,7 +316,7 @@ size_t x;
 
        for( x = 0; x < ulBytes; x++ )
        {
-               *pcDest = ( unsigned char ) c;
+               *pcDest = ( unsigned char ) iValue;
                pcDest++;
        }
 
@@ -324,7 +324,7 @@ size_t x;
 }
 /*-----------------------------------------------------------*/
 
-int memcmp( const void *pvMem1, const void *pvMem2 ,size_t ulBytes )
+int memcmp( const void *pvMem1, const void *pvMem2size_t ulBytes )
 {
 const unsigned char *pucMem1 = pvMem1, *pucMem2 = pvMem2;
 size_t x;
@@ -337,7 +337,7 @@ size_t x;
         }
     }
 
-    return n - x;
+    return ulBytes - x;
 }