]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/main.c
Added more files to the Rowley and IAR LM3S demos to test building the newer files...
[freertos] / FreeRTOS / Demo / CORTEX_LM3Sxxxx_IAR_Keil / main.c
index 489f68a8d31a649d0315a5326ef628f3577a5ae7..0e952d1d956efbf3fe2b03a8310064a145ccc4b3 100644 (file)
@@ -1,7 +1,7 @@
 /*\r
     FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.\r
 \r
-    FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME.  PLEASE VISIT \r
+    FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME.  PLEASE VISIT\r
     http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
 \r
     ***************************************************************************\r
@@ -42,7 +42,7 @@
     FreeRTOS WEB site.\r
 \r
     1 tab == 4 spaces!\r
-    \r
+\r
     ***************************************************************************\r
      *                                                                       *\r
      *    Having a problem?  Start by reading the FAQ "My application does   *\r
      *                                                                       *\r
     ***************************************************************************\r
 \r
-    \r
-    http://www.FreeRTOS.org - Documentation, training, latest versions, license \r
-    and contact details.  \r
-    \r
+\r
+    http://www.FreeRTOS.org - Documentation, training, latest versions, license\r
+    and contact details.\r
+\r
     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
     including FreeRTOS+Trace - an indispensable productivity tool.\r
 \r
-    Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell \r
-    the code with commercial support, indemnification, and middleware, under \r
+    Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell\r
+    the code with commercial support, indemnification, and middleware, under\r
     the OpenRTOS brand: http://www.OpenRTOS.com.  High Integrity Systems also\r
-    provide a safety engineered and independently SIL3 certified version under \r
+    provide a safety engineered and independently SIL3 certified version under\r
     the SafeRTOS brand: http://www.SafeRTOS.com.\r
 */\r
 \r
@@ -151,6 +151,7 @@ and the TCP/IP stack together cannot be accommodated with the 32K size limit. */
 #include "QPeek.h"\r
 #include "recmutex.h"\r
 #include "IntQueue.h"\r
+#include "QueueSet.h"\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -254,12 +255,13 @@ int main( void )
     vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );\r
     vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
     vStartInterruptQueueTasks();\r
-       vStartRecursiveMutexTasks();    \r
+       vStartRecursiveMutexTasks();\r
        vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
        vCreateBlockTimeTasks();\r
        vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
        vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
-       vStartQueuePeekTasks();         \r
+       vStartQueuePeekTasks();\r
+       vStartQueueSetTasks();\r
 \r
        /* Exclude some tasks if using the kickstart version to ensure we stay within\r
        the 32K code size limit. */\r
@@ -273,9 +275,9 @@ int main( void )
                }\r
        }\r
        #endif\r
-       \r
-       \r
-       \r
+\r
+\r
+\r
        /* Start the tasks defined within this file/specific to this demo. */\r
        xTaskCreate( vOLEDTask, ( signed portCHAR * ) "OLED", mainOLED_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
 \r
@@ -305,17 +307,17 @@ void prvSetupHardware( void )
     {\r
         SysCtlLDOSet( SYSCTL_LDO_2_75V );\r
     }\r
-       \r
+\r
        /* Set the clocking to run from the PLL at 50 MHz */\r
        SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ );\r
-       \r
+\r
        /*      Enable Port F for Ethernet LEDs\r
                LED0        Bit 3   Output\r
                LED1        Bit 2   Output */\r
        SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOF );\r
        GPIODirModeSet( GPIO_PORTF_BASE, (GPIO_PIN_2 | GPIO_PIN_3), GPIO_DIR_MODE_HW );\r
-       GPIOPadConfigSet( GPIO_PORTF_BASE, (GPIO_PIN_2 | GPIO_PIN_3 ), GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD );  \r
-       \r
+       GPIOPadConfigSet( GPIO_PORTF_BASE, (GPIO_PIN_2 | GPIO_PIN_3 ), GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD );\r
+\r
        vParTestInitialise();\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -332,7 +334,7 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
        if( ulTicksSinceLastDisplay >= mainCHECK_DELAY )\r
        {\r
                ulTicksSinceLastDisplay = 0;\r
-               \r
+\r
                /* Has an error been found in any task? */\r
                if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
                {\r
@@ -369,16 +371,24 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                else if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
                {\r
                        xMessage.pcMessage = "ERROR IN PEEK Q";\r
-               }                       \r
+               }\r
                else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
                {\r
                        xMessage.pcMessage = "ERROR IN REC MUTEX";\r
-               }                       \r
-               \r
+               }\r
+               else if( xAreQueueSetTasksStillRunning() != pdPASS )\r
+               {\r
+                       xMessage.pcMessage = "ERROR IN Q SET";\r
+               }\r
+\r
                /* Send the message to the OLED gatekeeper for display. */\r
                xHigherPriorityTaskWoken = pdFALSE;\r
                xQueueSendFromISR( xOLEDQueue, &xMessage, &xHigherPriorityTaskWoken );\r
        }\r
+\r
+       /* Write to a queue that is in use as part of the queue set demo to\r
+       demonstrate using queue sets from an ISR. */\r
+       vQueueSetAccessQueueSetFromISR();\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
@@ -388,7 +398,6 @@ xOLEDMessage xMessage;
 unsigned portLONG ulY, ulMaxY;\r
 static portCHAR cMessage[ mainMAX_MSG_LEN ];\r
 extern volatile unsigned portLONG ulMaxJitter;\r
-unsigned portBASE_TYPE uxUnusedStackOnEntry;\r
 const unsigned portCHAR *pucImage;\r
 \r
 /* Functions to access the OLED.  The one used depends on the dev kit\r
@@ -398,14 +407,11 @@ void ( *vOLEDStringDraw )( const portCHAR *, unsigned portLONG, unsigned portLON
 void ( *vOLEDImageDraw )( const unsigned portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portLONG, unsigned portLONG ) = NULL;\r
 void ( *vOLEDClear )( void ) = NULL;\r
 \r
-       /* Just for demo purposes. */\r
-       uxUnusedStackOnEntry = uxTaskGetStackHighWaterMark( NULL );\r
-\r
        /* Map the OLED access functions to the driver functions that are appropriate\r
-       for the evaluation kit being used. */   \r
+       for the evaluation kit being used. */\r
        switch( HWREG( SYSCTL_DID1 ) & SYSCTL_DID1_PRTNO_MASK )\r
        {\r
-               case SYSCTL_DID1_PRTNO_6965     :       \r
+               case SYSCTL_DID1_PRTNO_6965     :\r
                case SYSCTL_DID1_PRTNO_2965     :       vOLEDInit = OSRAM128x64x4Init;\r
                                                                                vOLEDStringDraw = OSRAM128x64x4StringDraw;\r
                                                                                vOLEDImageDraw = OSRAM128x64x4ImageDraw;\r
@@ -413,8 +419,8 @@ void ( *vOLEDClear )( void ) = NULL;
                                                                                ulMaxY = mainMAX_ROWS_64;\r
                                                                                pucImage = pucBasicBitmap;\r
                                                                                break;\r
-                                                                               \r
-               case SYSCTL_DID1_PRTNO_1968     :       \r
+\r
+               case SYSCTL_DID1_PRTNO_1968     :\r
                case SYSCTL_DID1_PRTNO_8962 :   vOLEDInit = RIT128x96x4Init;\r
                                                                                vOLEDStringDraw = RIT128x96x4StringDraw;\r
                                                                                vOLEDImageDraw = RIT128x96x4ImageDraw;\r
@@ -422,7 +428,7 @@ void ( *vOLEDClear )( void ) = NULL;
                                                                                ulMaxY = mainMAX_ROWS_96;\r
                                                                                pucImage = pucBasicBitmap;\r
                                                                                break;\r
-                                                                               \r
+\r
                default                                         :       vOLEDInit = vFormike128x128x16Init;\r
                                                                                vOLEDStringDraw = vFormike128x128x16StringDraw;\r
                                                                                vOLEDImageDraw = vFormike128x128x16ImageDraw;\r
@@ -430,28 +436,28 @@ void ( *vOLEDClear )( void ) = NULL;
                                                                                ulMaxY = mainMAX_ROWS_128;\r
                                                                                pucImage = pucGrLibBitmap;\r
                                                                                break;\r
-                                                                               \r
+\r
        }\r
 \r
        ulY = ulMaxY;\r
-       \r
+\r
        /* Initialise the OLED and display a startup message. */\r
-       vOLEDInit( ulSSI_FREQUENCY );   \r
+       vOLEDInit( ulSSI_FREQUENCY );\r
        vOLEDStringDraw( "POWERED BY FreeRTOS", 0, 0, mainFULL_SCALE );\r
        vOLEDImageDraw( pucImage, 0, mainCHARACTER_HEIGHT + 1, bmpBITMAP_WIDTH, bmpBITMAP_HEIGHT );\r
-       \r
+\r
        for( ;; )\r
        {\r
                /* Wait for a message to arrive that requires displaying. */\r
                xQueueReceive( xOLEDQueue, &xMessage, portMAX_DELAY );\r
-       \r
+\r
                /* Write the message on the next available row. */\r
                ulY += mainCHARACTER_HEIGHT;\r
                if( ulY >= ulMaxY )\r
                {\r
                        ulY = mainCHARACTER_HEIGHT;\r
                        vOLEDClear();\r
-                       vOLEDStringDraw( pcWelcomeMessage, 0, 0, mainFULL_SCALE );                      \r
+                       vOLEDStringDraw( pcWelcomeMessage, 0, 0, mainFULL_SCALE );\r
                }\r
 \r
                /* Display the message along with the maximum jitter time from the\r