]> git.sur5r.net Git - freertos/commitdiff
Update commenting ready for release.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 6 Mar 2008 16:51:57 +0000 (16:51 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 6 Mar 2008 16:51:57 +0000 (16:51 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@236 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/PPC405_Xilinx_Virtex4_GCC/RTOSDemo/FreeRTOSConfig.h
Demo/PPC405_Xilinx_Virtex4_GCC/RTOSDemo/main.c
Demo/PPC405_Xilinx_Virtex4_GCC/RTOSDemo/partest/partest.c
Demo/PPC405_Xilinx_Virtex4_GCC/RTOSDemo/serial/serial.c

index 6225b540f626bedb3f38b96447d3b121605d9aac..dec25fc6476414b23cc0ba1f5b97b9183c6d814d 100644 (file)
@@ -87,6 +87,4 @@ to exclude the API function. */
 #define INCLUDE_uxTaskGetStackHighWaterMark    1\r
 \r
 \r
-#define configKERNEL_INTERRUPT_PRIORITY 6\r
-\r
 #endif /* FREERTOS_CONFIG_H */\r
index 7ebdfa71114b6687363d7be505f133326326f22a..3cb5686454d018b58420865b4e155f45d281264e 100644 (file)
@@ -135,7 +135,7 @@ static void prvSetupHardware( void );
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* xRegTestStatus will geet set to pdFAIL by the regtest tasks if they\r
+/* xRegTestStatus will get set to pdFAIL by the regtest tasks if they\r
 discover an unexpected value. */\r
 static unsigned portBASE_TYPE xRegTestStatus = pdPASS;\r
 \r
@@ -151,7 +151,7 @@ int main( void )
        prvSetupHardware();\r
 \r
        /* Start the standard demo application tasks.  Note that the baud rate used\r
-       by the comtest tasks is set by the hardware, so the baud rate paramter\r
+       by the comtest tasks is set by the hardware, so the baud rate parameter\r
        passed has no effect. */\r
        vStartLEDFlashTasks( mainLED_TASK_PRIORITY );   \r
        vStartIntegerMathTasks( tskIDLE_PRIORITY );\r
@@ -261,6 +261,10 @@ static void prvErrorChecks( void *pvParameters )
 portTickType xDelayPeriod = mainNO_ERROR_CHECK_DELAY, xLastExecutionTime;\r
 volatile unsigned portBASE_TYPE uxFreeStack;\r
 \r
+       /* This call is just to demonstrate the use of the function - nothing is\r
+       done with the value.  You would expect the stack high water mark to be\r
+       lower (the function to return a larger value) here at function entry than\r
+       later following calls to other functions. */\r
        uxFreeStack = uxTaskGetStackHighWaterMark( NULL );\r
 \r
        /* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()\r
@@ -271,12 +275,14 @@ volatile unsigned portBASE_TYPE uxFreeStack;
        operating without error. */\r
        for( ;; )\r
        {\r
+               /* Again just for demo purposes - uxFreeStack should have a lower value\r
+               here than following the call to uxTaskGetStackHighWaterMark() on the\r
+               task entry. */\r
                uxFreeStack = uxTaskGetStackHighWaterMark( NULL );\r
 \r
                /* Wait until it is time to check again.  The time we wait here depends\r
                on whether an error has been detected or not.  When an error is \r
                detected the time is shortened resulting in a faster LED flash rate. */\r
-               /* Perform this check every mainCHECK_DELAY milliseconds. */\r
                vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );\r
 \r
                /* See if the other tasks are all ok. */\r
@@ -299,11 +305,18 @@ static void prvSetupHardware( void )
        XCache_EnableICache( 0x80000000 );\r
        XCache_EnableDCache( 0x80000000 );\r
 \r
+       /* Setup the IO port for use with the LED outputs. */\r
        vParTestInitialise();\r
 }\r
+/*-----------------------------------------------------------*/\r
 \r
 static void prvRegTestTask1( void *pvParameters )\r
 {\r
+       /* The first register test task as described at the top of this file.  The\r
+       values used in the registers are different to those use in the second \r
+       register test task.  Also, unlike the second register test task, this task\r
+       yields between setting the register values and subsequently checking the\r
+       register values. */\r
        asm volatile\r
        (\r
                "RegTest1Start:                                 \n\t" \\r
@@ -416,9 +429,13 @@ static void prvRegTestTask1( void *pvParameters )
                "       b RegTest1Start                         \n\t" \\r
        );\r
 }\r
+/*-----------------------------------------------------------*/\r
 \r
 static void prvRegTestTask2( void *pvParameters )\r
 {\r
+       /* The second register test task as described at the top of this file.  \r
+       Note that this task fills the registers with different values to the\r
+       first register test task. */\r
        asm volatile\r
        (\r
                "RegTest2Start:                                 \n\t" \\r
@@ -455,9 +472,6 @@ static void prvRegTestTask2( void *pvParameters )
                "       li              30,     130                             \n\t" \\r
                "       li              31,     131                             \n\t" \\r
                "                                                               \n\t" \\r
-               "       sc                                                      \n\t" \\r
-               "       nop                                                     \n\t" \\r
-               "                                                               \n\t" \\r
                "       cmpwi   0, 11                           \n\t" \\r
                "       bne             RegTest2Fail            \n\t" \\r
                "       cmpwi   2, 12                           \n\t" \\r
@@ -531,34 +545,11 @@ static void prvRegTestTask2( void *pvParameters )
                "       b RegTest2Start                         \n\t" \\r
        );\r
 }\r
+/*-----------------------------------------------------------*/\r
 \r
-\r
-#if 0\r
-\r
-static void prvRegTestTask2( void *pvParameters )\r
-{\r
-volatile unsigned int i= 0;\r
-\r
-       for( ;; )\r
-       {\r
-               i++;\r
-               taskYIELD();\r
-       }\r
-}\r
-\r
-static void prvRegTestTask1( void *pvParameters )\r
-{\r
-volatile unsigned int i= 0;\r
-\r
-       for( ;; )\r
-       {\r
-               i++;\r
-               taskYIELD();\r
-       }\r
-}\r
-\r
-#endif\r
-\r
+/* This hook function will get called if there is a suspected stack overflow.\r
+An overflow can cause the task name to be corrupted, in which case the task\r
+handle needs to be used to determine the offending task. */\r
 void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName );\r
 void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName )\r
 {\r
index d552c385aa705e1bf094286e202e96f531dd7298..40091acfa3168007b2ec8819bfd829ebb3ec41d5 100644 (file)
@@ -44,8 +44,6 @@
 /* Scheduler includes. */\r
 #include "FreeRTOS.h"\r
 \r
-#define partstNUM_LEDs 8\r
-\r
 /* Demo application includes. */\r
 #include "partest.h"\r
 \r
index d4c1750e5cd26c7795f6c42639daf6e03b691fda..91127654988376e539b97448f1aec52aadea834d 100644 (file)
 /* Demo application includes. */\r
 #include "serial.h"\r
 \r
-/* Microblaze driver includes. */\r
+/* Library includes. */\r
 #include "xparameters.h"\r
 #include "xuartlite.h"\r
 #include "xuartlite_l.h"\r
-#include "xintc_l.h"\r
-#include "xintc.h"\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -67,26 +65,31 @@ transmitted. */
 static xQueueHandle xRxedChars; \r
 static xQueueHandle xCharsForTx; \r
 \r
+/* Structure that maintains information on the UART being used. */\r
 static XUartLite xUART;\r
 \r
+/*\r
+ * Sample UART interrupt handler.  Note this is used to demonstrate the kernel\r
+ * features and test the port - it is not intended to represent an efficient\r
+ * implementation.\r
+ */\r
 static void vSerialISR( XUartLite *pxUART );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
 xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )\r
 {\r
-unsigned portLONG ulControlReg, ulMask;\r
-extern XIntc xInterruptController;\r
-\r
        /* NOTE: The baud rate used by this driver is determined by the hardware\r
        parameterization of the UART Lite peripheral, and the baud value passed to\r
        this function has no effect. */\r
+       ( void ) ulWantedBaud;\r
 \r
        /* Create the queues used to hold Rx and Tx characters. */\r
        xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );\r
        xCharsForTx = xQueueCreate( uxQueueLength + 1, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );\r
 \r
-       if( ( xRxedChars ) && ( xCharsForTx ) )\r
+       /* Only initialise the UART if the queues were created correctly. */\r
+       if( ( xRxedChars != NULL ) && ( xCharsForTx != NULL ) )\r
        {\r
 \r
                XUartLite_Initialize( &xUART, XPAR_RS232_UART_DEVICE_ID );\r
@@ -94,11 +97,15 @@ extern XIntc xInterruptController;
                XUartLite_DisableInterrupt( &xUART );\r
 \r
                if( xPortInstallInterruptHandler( XPAR_OPB_INTC_0_RS232_UART_INTERRUPT_INTR, ( XInterruptHandler )vSerialISR, (void *)&xUART ) == pdPASS )\r
-               {               \r
+               {\r
+                       /* xPortInstallInterruptHandler() could fail if \r
+                       vPortSetupInterruptController() has not been called prior to this \r
+                       function. */\r
                        XUartLite_EnableInterrupt( &xUART );\r
                }\r
        }\r
        \r
+       /* There is only one port so the handle is not used. */\r
        return ( xComPortHandle ) 0;\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -170,31 +177,37 @@ void vSerialClose( xComPortHandle xPort )
 static void vSerialISR( XUartLite *pxUART )\r
 {\r
 unsigned portLONG ulISRStatus;\r
-portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE;\r
+portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByRx = pdFALSE, lDidSomething;\r
 portCHAR cChar;\r
 \r
-    ulISRStatus = XIo_In32( pxUART->RegBaseAddress + XUL_STATUS_REG_OFFSET );\r
-\r
-    if( ( ulISRStatus & (XUL_SR_RX_FIFO_FULL | XUL_SR_RX_FIFO_VALID_DATA ) ) != 0 )\r
-    {\r
-               /* A character is available - place it in the queue of received\r
-               characters.  This might wake a task that was blocked waiting for \r
-               data. */\r
-               cChar = ( portCHAR ) XIo_In32( pxUART->RegBaseAddress + XUL_RX_FIFO_OFFSET );\r
-               xTaskWokenByRx = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByRx );\r
-    }\r
-\r
-    if( ( ulISRStatus & XUL_SR_TX_FIFO_EMPTY ) != 0 )\r
-    {\r
-               /* There is space in the FIFO - if there are any characters queue for\r
-               transmission they can be send to the UART now.  This might unblock a\r
-               task that was waiting for space to become available on the Tx queue. */\r
-               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+       do\r
+       {\r
+               lDidSomething = pdFALSE;\r
+\r
+               ulISRStatus = XIo_In32( pxUART->RegBaseAddress + XUL_STATUS_REG_OFFSET );\r
+\r
+               if( ( ulISRStatus & (XUL_SR_RX_FIFO_FULL | XUL_SR_RX_FIFO_VALID_DATA ) ) != 0 )\r
                {\r
-                       XIo_Out32( pxUART->RegBaseAddress + XUL_TX_FIFO_OFFSET, cChar );\r
+                       /* A character is available - place it in the queue of received\r
+                       characters.  This might wake a task that was blocked waiting for \r
+                       data. */\r
+                       cChar = ( portCHAR ) XIo_In32( pxUART->RegBaseAddress + XUL_RX_FIFO_OFFSET );\r
+                       xTaskWokenByRx = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByRx );\r
+                       lDidSomething = pdTRUE;\r
                }\r
 \r
-    }\r
+               if( ( ulISRStatus & XUL_SR_TX_FIFO_EMPTY ) != 0 )\r
+               {\r
+                       /* There is space in the FIFO - if there are any characters queue for\r
+                       transmission they can be sent to the UART now.  This might unblock a\r
+                       task that was waiting for space to become available on the Tx queue. */\r
+                       if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )\r
+                       {\r
+                               XIo_Out32( pxUART->RegBaseAddress + XUL_TX_FIFO_OFFSET, cChar );\r
+                               lDidSomething = pdTRUE;\r
+                       }                       \r
+               }\r
+       } while( lDidSomething == pdTRUE );\r
 \r
        /* If we woke any tasks we may require a context switch. */\r
        if( xTaskWokenByTx || xTaskWokenByRx )\r