]> git.sur5r.net Git - freertos/commitdiff
Switch to using the private watchdog as the run time stats timer in the Zynq demo.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 10 Jun 2014 16:25:46 +0000 (16:25 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 10 Jun 2014 16:25:46 +0000 (16:25 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2255 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/lwIP_Apps/apps/BasicSocketCommandServer/BasicSocketCommandServer.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/lwIP_Apps/lwIP_Apps.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/lwIP_port/netif/xpqueue.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/main_lwIP.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/main.c

index c61f9972c06bf464d6d9479ea1ee099de6a8a4a9..b61a83bb8c1b7a796d8647959cf2a1fe0283c706 100644 (file)
@@ -159,14 +159,13 @@ readable ASCII form.  See the notes in the implementation of vTaskList() within
 FreeRTOS/Source/tasks.c for limitations. */\r
 #define configUSE_STATS_FORMATTING_FUNCTIONS   1\r
 \r
-/* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS is not required because the time base\r
-comes from the ulHighFrequencyTimerCounts variable which is incremented in a\r
-high frequency timer that is already being started as part of the interrupt\r
-nesting test. */\r
-#define configGENERATE_RUN_TIME_STATS  1\r
-extern volatile uint32_t ulHighFrequencyTimerCounts;\r
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()\r
-#define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTimerCounts\r
+/* The private watchdog is used to generate run time stats. */\r
+#include "xscuwdt.h"\r
+extern XScuWdt xWatchDogInstance;\r
+extern void vInitialiseTimerForRunTimeStats( void );\r
+#define configGENERATE_RUN_TIME_STATS 1\r
+#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vInitialiseTimerForRunTimeStats()\r
+#define portGET_RUN_TIME_COUNTER_VALUE() ( 0xffffffffUL - XScuWdt_ReadReg( xWatchDogInstance.Config.BaseAddr, XSCUWDT_COUNTER_OFFSET ) )\r
 \r
 /* The size of the global output buffer that is available for use when there\r
 are multiple command interpreters running at once (for example, one on a UART\r
@@ -205,11 +204,21 @@ Zynq MPU. */
 \r
 \r
 \r
-/****** Network configuration settings. ***************************************/\r
+/****** Network configuration settings - only used when the lwIP example is\r
+built.  See the page that documents this demo on the http://www.FreeRTOS.org\r
+website for more information. ***********************************************/\r
 \r
+/* The priority for the task that unblocked by the MAC interrupt to process\r
+received packets. */\r
 #define configMAC_INPUT_TASK_PRIORITY          ( configMAX_PRIORITIES - 1 )\r
+\r
+/* The priority of the task that runs the lwIP stack. */\r
 #define configLWIP_TASK_PRIORITY                       ( configMAX_PRIORITIES - 2 )\r
 \r
+/* The priority of the task that uses lwIP sockets to provide a simple command\r
+line interface. */\r
+#define configCLI_TASK_PRIORITY                                ( tskIDLE_PRIORITY )\r
+\r
 /* MAC address configuration. */\r
 #define configMAC_ADDR0        0x00\r
 #define configMAC_ADDR1        0x13\r
index 00856d194d030c19648b4a1e07c0720ad8cbd573..c03fd942a44b218c1a9703e16e610963f8c86615 100644 (file)
@@ -148,9 +148,9 @@ actually being reached. */
 extern uint32_t ulPortInterruptNesting;\r
 static uint32_t ulMaxRecordedNesting = 0;\r
 \r
-/* For convenience the high frequency timer increments a variable that is then\r
-used as the time base for the run time stats. */\r
-volatile uint32_t ulHighFrequencyTimerCounts = 0;\r
+/* Used to ensure the high frequency timer is running at the expected\r
+frequency. */\r
+static volatile uint32_t ulHighFrequencyTimerCounts = 0;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -238,8 +238,7 @@ BaseType_t xYieldRequired;
        }\r
        else\r
        {\r
-               /* The high frequency timer is also used to generate the time base for\r
-               the run time state. */\r
+               /* Used to check the timer is running at the expected frequency. */\r
                ulHighFrequencyTimerCounts++;\r
 \r
                /* Latch the highest interrupt nesting count detected. */\r
index 57f9b5ac419f598a2539da8aecce2a0a0c3c3dca..bf7d1f0bfaf44004b0cafa66d3b4bdd3e2cba6fd 100644 (file)
@@ -83,9 +83,13 @@ const char *pcWelcomeMessage = "FreeRTOS command server - connection accepted.\r
 char cInChar;\r
 static char cInputString[ cmdMAX_INPUT_SIZE ], cOutputString[ cmdMAX_OUTPUT_SIZE ];\r
 portBASE_TYPE xReturned;\r
+extern void vRegisterSampleCLICommands( void );\r
 \r
        ( void ) pvParameters;\r
 \r
+       /* Register the standard CLI commands. */\r
+       vRegisterSampleCLICommands();\r
+\r
        lSocket = lwip_socket(AF_INET, SOCK_STREAM, 0);\r
 \r
        if( lSocket >= 0 )\r
index fd2b5f8e56558f1f81ce250bb1f3608a97bbae9f..b298b8dd3db50a1bd2c5665797fb8567d49a6923 100644 (file)
@@ -165,12 +165,11 @@ static struct netif xNetIf;
        use of the lwIP raw API. */\r
        httpd_init();\r
 \r
-       sys_thread_new( "lwIP Input", xemacif_input_thread, &xNetIf, configMINIMAL_STACK_SIZE, configMAC_INPUT_TASK_PRIORITY );\r
+       sys_thread_new( "lwIP_In", xemacif_input_thread, &xNetIf, configMINIMAL_STACK_SIZE, configMAC_INPUT_TASK_PRIORITY );\r
 \r
        /* Create the FreeRTOS defined basic command server.  This demonstrates use\r
        of the lwIP sockets API. */\r
-#warning Commented out CLI\r
-//     xTaskCreate( vBasicSocketsCommandInterpreterTask, "CmdInt", configMINIMAL_STACK_SIZE * 10, NULL, configMAX_PRIORITIES - 2, NULL );\r
+       xTaskCreate( vBasicSocketsCommandInterpreterTask, "CmdInt", configMINIMAL_STACK_SIZE * 5, NULL, configCLI_TASK_PRIORITY, NULL );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index 02bb68fd62f0547c00299b5f4ef6fd572809c686..6802c1310cef371631bf7348ffa11a904da9f4e8 100644 (file)
@@ -31,7 +31,7 @@ pq_create_queue()
        pq_queue_t *q = NULL;
 
        if (i >= NUM_QUEUES) {
-               xil_printf("ERR: Max Queues allocated\n\r");
+               //xil_printf("ERR: Max Queues allocated\n\r");
                return q;
        }
 
index 05942205bbe81163ba093106ded4f79527e75b5c..7cd652da66a9caaa8b430b8203404afab5f4a277 100644 (file)
@@ -156,4 +156,4 @@ static void prvLEDToggleTimer( TimerHandle_t pxTimer )
        vParTestToggleLED( mainTIMER_LED );\r
 }\r
 \r
-\r
+/*-----------------------------------------------------------*/\r
index 3738bb75cdd298eeb39877f52aee7755d2616915..425c87ac73895c34223a83d5717bf683bdccd7c0 100644 (file)
@@ -93,6 +93,7 @@
 \r
 /* Standard includes. */\r
 #include <stdio.h>\r
+#include <limits.h>\r
 \r
 /* Scheduler include files. */\r
 #include "FreeRTOS.h"\r
  *\r
  * When mainSELECTED_APPLICATION is set to 2 the lwIP example will be run.\r
  */\r
-#define mainSELECTED_APPLICATION       0\r
+#define mainSELECTED_APPLICATION       2\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -161,6 +162,10 @@ void vApplicationIdleHook( void );
 void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );\r
 void vApplicationTickHook( void );\r
 \r
+/* The private watchdog is used as the timer that generates run time\r
+stats.  This frequency means it will overflow quite quickly. */\r
+XScuWdt xWatchDogInstance;\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* The interrupt controller is initialised in this file, and made available to\r
@@ -359,5 +364,25 @@ size_t x;
 \r
     return ulBytes - x;\r
 }\r
+/*-----------------------------------------------------------*/\r
+\r
+void vInitialiseTimerForRunTimeStats( void )\r
+{\r
+XScuWdt_Config *pxWatchDogInstance;\r
+uint32_t ulValue;\r
+const uint32_t ulMaxDivisor = 0xff, ulDivisorShift = 0x08;\r
+\r
+        pxWatchDogInstance = XScuWdt_LookupConfig( XPAR_SCUWDT_0_DEVICE_ID );\r
+        XScuWdt_CfgInitialize( &xWatchDogInstance, pxWatchDogInstance, pxWatchDogInstance->BaseAddr );\r
+\r
+        ulValue = XScuWdt_GetControlReg( &xWatchDogInstance );\r
+        ulValue |= ulMaxDivisor << ulDivisorShift;\r
+        XScuWdt_SetControlReg( &xWatchDogInstance, ulValue );\r
+\r
+        XScuWdt_LoadWdt( &xWatchDogInstance, UINT_MAX );\r
+        XScuWdt_SetTimerMode( &xWatchDogInstance );\r
+        XScuWdt_Start( &xWatchDogInstance );\r
+}\r
+\r
 \r
 \r