]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/PIC32MZ_MPLAB/main_full.c
Update version number to 9.0.0rc2.
[freertos] / FreeRTOS / Demo / PIC32MZ_MPLAB / main_full.c
index a176abf172882187c897266d3bb17e70f12615a9..588c0a948d0e9f6cc08b48f527679cb9362301f1 100644 (file)
@@ -1,60 +1,64 @@
 /*\r
-    FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.\r
+    FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
 \r
-    ***************************************************************************\r
-     *                                                                       *\r
-     *    FreeRTOS provides completely free yet professionally developed,    *\r
-     *    robust, strictly quality controlled, supported, and cross          *\r
-     *    platform software that has become a de facto standard.             *\r
-     *                                                                       *\r
-     *    Help yourself get started quickly and support the FreeRTOS         *\r
-     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
-     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
-     *                                                                       *\r
-     *    Thank you!                                                         *\r
-     *                                                                       *\r
-    ***************************************************************************\r
-\r
     This file is part of the FreeRTOS distribution.\r
 \r
     FreeRTOS is free software; you can redistribute it and/or modify it under\r
     the terms of the GNU General Public License (version 2) as published by the\r
-    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
 \r
-    >>! NOTE: The modification to the GPL is included to allow you to distribute\r
-    >>! a combined work that includes FreeRTOS without being obliged to provide\r
-    >>! the source code for proprietary components outside of the FreeRTOS\r
-    >>! kernel.\r
+    ***************************************************************************\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+    ***************************************************************************\r
 \r
     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
-    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
     link: http://www.freertos.org/a00114.html\r
 \r
-    1 tab == 4 spaces!\r
-\r
     ***************************************************************************\r
      *                                                                       *\r
-     *    Having a problem?  Start by reading the FAQ "My application does   *\r
-     *    not run, what could be wrong?"                                     *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that is more than just the market leader, it     *\r
+     *    is the industry's de facto standard.                               *\r
      *                                                                       *\r
-     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *    Help yourself get started quickly while simultaneously helping     *\r
+     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
+     *    tutorial book, reference manual, or both:                          *\r
+     *    http://www.FreeRTOS.org/Documentation                              *\r
      *                                                                       *\r
     ***************************************************************************\r
 \r
-    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
-    license and Real Time Engineers Ltd. contact details.\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+    the FAQ page "My application does not run, what could be wrong?".  Have you\r
+    defined configASSERT()?\r
+\r
+    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+    embedded software for free we request you assist our global community by\r
+    participating in the support forum.\r
+\r
+    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+    be as productive as possible as early as possible.  Now you can receive\r
+    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+    Ltd, and the world's leading authority on the world's leading RTOS.\r
 \r
     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
 \r
-    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
-    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
-    licenses offer ticketed support, indemnification and middleware.\r
+    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
+    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
+    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and commercial middleware.\r
 \r
     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
     engineered and independently SIL3 certified version for use in safety and\r
 #include "QueueOverwrite.h"\r
 #include "QueueSet.h"\r
 #include "recmutex.h"\r
+#include "EventGroupsDemo.h"\r
+#include "flop_mz.h"\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
 /* The period after which the check timer will expire, in ms, provided no errors\r
 have been reported by any of the standard demo tasks.  ms are converted to the\r
-equivalent in ticks using the portTICK_RATE_MS constant. */\r
-#define mainCHECK_TIMER_PERIOD_MS                      ( 3000UL / portTICK_RATE_MS )\r
+equivalent in ticks using the portTICK_PERIOD_MS constant. */\r
+#define mainCHECK_TIMER_PERIOD_MS                      ( 3000UL / portTICK_PERIOD_MS )\r
 \r
 /* The period at which the check timer will expire, in ms, if an error has been\r
 reported in one of the standard demo tasks.  ms are converted to the equivalent\r
-in ticks using the portTICK_RATE_MS constant. */\r
-#define mainERROR_CHECK_TIMER_PERIOD_MS        ( 200UL / portTICK_RATE_MS )\r
+in ticks using the portTICK_PERIOD_MS constant. */\r
+#define mainERROR_CHECK_TIMER_PERIOD_MS        ( 200UL / portTICK_PERIOD_MS )\r
 \r
 /* The priorities of the various demo application tasks. */\r
 #define mainSEM_TEST_PRIORITY                          ( tskIDLE_PRIORITY + 1 )\r
 #define mainBLOCK_Q_PRIORITY                           ( tskIDLE_PRIORITY + 2 )\r
 #define mainCOM_TEST_PRIORITY                          ( tskIDLE_PRIORITY + 2 )\r
-#define mainINTEGER_TASK_PRIORITY           ( tskIDLE_PRIORITY )\r
+#define mainINTEGER_TASK_PRIORITY                      ( tskIDLE_PRIORITY )\r
 #define mainGEN_QUEUE_TASK_PRIORITY                    ( tskIDLE_PRIORITY )\r
 #define mainQUEUE_OVERWRITE_TASK_PRIORITY      ( tskIDLE_PRIORITY )\r
+#define mainFLOP_TASK_PRIORITY                         ( tskIDLE_PRIORITY )\r
 \r
 /* The LED controlled by the 'check' software timer. */\r
 #define mainCHECK_LED                                          ( 2 )\r
@@ -180,7 +187,7 @@ occur. */
 /*\r
  * The check timer callback function, as described at the top of this file.\r
  */\r
-static void prvCheckTimerCallback( xTimerHandle xTimer );\r
+static void prvCheckTimerCallback( TimerHandle_t xTimer );\r
 \r
 /*\r
  * It is important to ensure the high frequency timer test does not start before\r
@@ -189,7 +196,7 @@ static void prvCheckTimerCallback( xTimerHandle xTimer );
  * executing.  A one-shot timer is used, so the callback function will only\r
  * execute once (unless it is manually reset/restarted).\r
  */\r
-static void prvSetupHighFrequencyTimerTest( xTimerHandle xTimer );\r
+static void prvSetupHighFrequencyTimerTest( TimerHandle_t xTimer );\r
 \r
 /*\r
  * Tasks that test the context switch mechanism by filling the processor\r
@@ -221,7 +228,7 @@ volatile unsigned long ulRegTest1Cycles = 0, ulRegTest2Cycles = 0;
  */\r
 int main_full( void )\r
 {\r
-xTimerHandle xTimer = NULL;\r
+TimerHandle_t xTimer = NULL;\r
 \r
        /* Create all the other standard demo tasks. */\r
        vStartLEDFlashTimers( mainNUM_FLASH_TIMER_LEDS );\r
@@ -236,20 +243,22 @@ xTimerHandle xTimer = NULL;
        vStartQueueOverwriteTask( mainQUEUE_OVERWRITE_TASK_PRIORITY );\r
        vStartQueueSetTasks();\r
        vStartRecursiveMutexTasks();\r
+       vStartEventGroupTasks();\r
+       vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
 \r
        /* Create the tasks defined within this file. */\r
-       xTaskCreate( prvRegTestTask1,                                           /* The function that implements the task. */\r
-                               ( const signed char * const ) "Reg1",   /* Text name for the task to assist debugger - not used by FreeRTOS itself. */\r
-                               configMINIMAL_STACK_SIZE,                               /* The stack size to allocate for the task - specified in words not bytes. */\r
-                               NULL,                                                                   /* The parameter to pass into the task - not used in this case so set to NULL. */\r
-                               tskIDLE_PRIORITY,                                               /* The priority to assign to the task. */\r
-                               NULL );                                                                 /* Used to obtain a handle to the task being created - not used in this case so set to NULL. */\r
+       xTaskCreate( prvRegTestTask1,                   /* The function that implements the task. */\r
+                               "Reg1",                                         /* Text name for the task to assist debugger - not used by FreeRTOS itself. */\r
+                               configMINIMAL_STACK_SIZE,       /* The stack size to allocate for the task - specified in words not bytes. */\r
+                               NULL,                                           /* The parameter to pass into the task - not used in this case so set to NULL. */\r
+                               tskIDLE_PRIORITY,                       /* The priority to assign to the task. */\r
+                               NULL );                                         /* Used to obtain a handle to the task being created - not used in this case so set to NULL. */\r
 \r
-       xTaskCreate( prvRegTestTask2, ( const signed char * const ) "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
+       xTaskCreate( prvRegTestTask2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
 \r
        /* Create the software timer that performs the 'check' functionality, as\r
        described at the top of this file. */\r
-       xTimer = xTimerCreate(  ( const signed char * ) "CheckTimer",/* A text name, purely to help debugging. */\r
+       xTimer = xTimerCreate(  "CheckTimer",/* A text name, purely to help debugging. */\r
                                                        ( mainCHECK_TIMER_PERIOD_MS ),          /* The timer period, in this case 3000ms (3s). */\r
                                                        pdTRUE,                                                         /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
                                                        ( void * ) 0,                                           /* The ID is not used, so can be set to anything. */\r
@@ -263,7 +272,7 @@ xTimerHandle xTimer = NULL;
        /* A software timer is also used to start the high frequency timer test.\r
        This is to ensure the test does not start before the kernel.  This time a\r
        one shot software timer is used. */\r
-       xTimer = xTimerCreate( ( const signed char * ) "HighHzTimerSetup", 1, pdFALSE, ( void * ) 0, prvSetupHighFrequencyTimerTest );\r
+       xTimer = xTimerCreate( "HighHzTimerSetup", 1, pdFALSE, ( void * ) 0, prvSetupHighFrequencyTimerTest );\r
        if( xTimer != NULL )\r
        {\r
                xTimerStart( xTimer, mainDONT_BLOCK );\r
@@ -288,6 +297,11 @@ extern void vRegTest1( volatile unsigned long * );
        /* Avoid compiler warnings. */\r
        ( void ) pvParameters;\r
 \r
+       /* Must be called before any hardware floating point operations are\r
+       performed to let the RTOS portable layer know that this task requires\r
+       a floating point context. */\r
+       portTASK_USES_FLOATING_POINT();\r
+\r
        /* Pass the address of the RegTest1 loop counter into the test function,\r
        which is necessarily implemented in assembler. */\r
        vRegTest1( &ulRegTest1Cycles );\r
@@ -304,6 +318,11 @@ extern void vRegTest2( volatile unsigned long * );
        /* Avoid compiler warnings. */\r
        ( void ) pvParameters;\r
 \r
+       /* Must be called before any hardware floating point operations are\r
+       performed to let the RTOS portable layer know that this task requires\r
+       a floating point context. */\r
+       portTASK_USES_FLOATING_POINT();\r
+\r
        /* Pass the address of the RegTest2 loop counter into the test function,\r
        which is necessarily implemented in assembler. */\r
        vRegTest2( &ulRegTest2Cycles );\r
@@ -313,7 +332,7 @@ extern void vRegTest2( volatile unsigned long * );
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-static void prvCheckTimerCallback( xTimerHandle xTimer )\r
+static void prvCheckTimerCallback( TimerHandle_t xTimer )\r
 {\r
 static long lChangedTimerPeriodAlready = pdFALSE;\r
 static unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0, ulLastHighFrequencyTimerInterrupts = 0;\r
@@ -383,13 +402,21 @@ extern unsigned long ulHighFrequencyTimerInterrupts;
        {\r
                ulErrorOccurred |= ( 0x01UL << 12UL );\r
        }\r
+       else if( xAreEventGroupTasksStillRunning() != pdTRUE )\r
+       {\r
+               ulErrorOccurred |= ( 0x01UL << 13UL );\r
+       }\r
+       else if( xAreMathsTaskStillRunning() != pdTRUE )\r
+       {\r
+               ulErrorOccurred |= ( 0x01UL << 15UL );\r
+       }\r
 \r
        /* Ensure the expected number of high frequency interrupts have occurred. */\r
        if( ulLastHighFrequencyTimerInterrupts != 0 )\r
        {\r
                if( ( ulHighFrequencyTimerInterrupts - ulLastHighFrequencyTimerInterrupts ) < ulExpectedHighFrequencyInterrupts )\r
                {\r
-                       ulErrorOccurred |= ( 0x01UL << 13UL );\r
+                       ulErrorOccurred |= ( 0x01UL << 14UL );\r
                }\r
        }\r
        ulLastHighFrequencyTimerInterrupts = ulHighFrequencyTimerInterrupts;\r
@@ -415,7 +442,7 @@ extern unsigned long ulHighFrequencyTimerInterrupts;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-static void prvSetupHighFrequencyTimerTest( xTimerHandle xTimer )\r
+static void prvSetupHighFrequencyTimerTest( TimerHandle_t xTimer )\r
 {\r
 void vSetupTimerTest( unsigned short usFrequencyHz );\r
 \r