]> git.sur5r.net Git - freertos/commitdiff
+ Moved the History.txt file from the website git repo into the source code SVN repo.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 25 Aug 2019 19:35:59 +0000 (19:35 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 25 Aug 2019 19:35:59 +0000 (19:35 +0000)
+ Added xTaskCatchUpTicks() which corrects the tick count value after the application code has held interrupts disabled for an extended period.
+ Updated the xTaskResumeAll() implementation so it uses the new xTaskCatchUpTicks() function mentioned above to unwind ticks that were pended while the scheduler was suspended.
+ Various maintenance on the message buffer, stream buffer and abort delay demos.
+ Change type of uxPendedTicks from UBaseType_t to TickType_t to ensure it has same type as variables it is compared to, and therefore also rename the variable xPendingTicks.
+ Correct spelling mistake within a comment that was common to all the ARMv7-M ports.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2715 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

20 files changed:
FreeRTOS/Demo/Common/Minimal/AbortDelay.c
FreeRTOS/Demo/Common/Minimal/MessageBufferDemo.c
FreeRTOS/Demo/Common/Minimal/StreamBufferDemo.c
FreeRTOS/History.txt [new file with mode: 0644]
FreeRTOS/Source/include/mpu_prototypes.h
FreeRTOS/Source/include/mpu_wrappers.h
FreeRTOS/Source/include/task.h
FreeRTOS/Source/portable/CCS/ARM_CM3/port.c
FreeRTOS/Source/portable/CCS/ARM_CM4F/port.c
FreeRTOS/Source/portable/GCC/ARM_CM3/port.c
FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c
FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c
FreeRTOS/Source/portable/IAR/ARM_CM3/port.c
FreeRTOS/Source/portable/IAR/ARM_CM4F/port.c
FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/port.c
FreeRTOS/Source/portable/MikroC/ARM_CM4F/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM3/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM4F/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1/port.c
FreeRTOS/Source/tasks.c

index 27d41c75707fb72da575780279c5efe71ff4f110..fc4e36f4d3d921423845045c3a6ebe78a5d76ff7 100644 (file)
@@ -430,7 +430,7 @@ static void prvTestAbortingStreamBufferReceive( void )
 {\r
 TickType_t xTimeAtStart;\r
 StreamBufferHandle_t xStreamBuffer;\r
-EventBits_t xReturn;\r
+size_t xReturn;\r
 const size_t xTriggerLevelBytes = ( size_t ) 1;\r
 uint8_t uxRxData;\r
 \r
index d50f573a00827e414c34f37c87b9b9dfe52913cc..ef52b2fd173ca843d2f84879ea9c5a6ed42bd480 100644 (file)
@@ -57,7 +57,7 @@ priority tasks, and from high to low priority tasks. */
 #define mbHIGHER_PRIORITY                      ( tskIDLE_PRIORITY + 1 )\r
 \r
 /* Block times used when sending and receiving from the message buffers. */\r
-#define mbRX_TX_BLOCK_TIME                     pdMS_TO_TICKS( 125UL )\r
+#define mbRX_TX_BLOCK_TIME                     pdMS_TO_TICKS( 175UL )\r
 \r
 /* A block time of 0 means "don't block". */\r
 #define mbDONT_BLOCK                           ( 0 )\r
@@ -245,8 +245,8 @@ UBaseType_t uxOriginalPriority;
        xReturned = xMessageBufferSend( xMessageBuffer, ( void * ) pucData, sizeof( pucData[ 0 ] ), xBlockTime );\r
        xTimeAfterCall = xTaskGetTickCount();\r
        vTaskPrioritySet( NULL, uxOriginalPriority );\r
-       configASSERT( ( xTimeAfterCall - xTimeBeforeCall ) >= xBlockTime );\r
-       configASSERT( ( xTimeAfterCall - xTimeBeforeCall ) < ( xBlockTime + xAllowableMargin ) );\r
+       configASSERT( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) >= xBlockTime );\r
+       configASSERT( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) < ( xBlockTime + xAllowableMargin ) );\r
        configASSERT( xReturned == 0 );\r
        ( void ) xReturned; /* In case configASSERT() is not defined. */\r
        ( void ) xTimeBeforeCall;\r
@@ -758,7 +758,7 @@ const TickType_t xTicksToBlock = pdMS_TO_TICKS( 250UL );
        /* Don't expect to receive anything yet! */\r
        xTimeOnEntering = xTaskGetTickCount();\r
        xReceivedLength = xMessageBufferReceive( xMessageBuffers.xEchoClientBuffer, ( void * ) pcReceivedString, mbMESSAGE_BUFFER_LENGTH_BYTES, xTicksToBlock );\r
-       configASSERT( ( xTaskGetTickCount() - xTimeOnEntering ) >= xTicksToBlock );\r
+       configASSERT( ( ( TickType_t ) ( xTaskGetTickCount() - xTimeOnEntering ) ) >= xTicksToBlock );\r
        configASSERT( xReceivedLength == 0 );\r
        ( void ) xTimeOnEntering; /* In case configASSERT() is not defined. */\r
 \r
index 0efddcd25c29bcd04a295d281154e5b6d4c654f7..c5854bc62f63b2eff8567d680da3e5543b6bdce1 100644 (file)
@@ -283,8 +283,8 @@ UBaseType_t uxOriginalPriority;
        xReturned = xStreamBufferSend( xStreamBuffer, ( void * ) pucData, sizeof( pucData[ 0 ] ), xBlockTime );\r
        xTimeAfterCall = xTaskGetTickCount();\r
        vTaskPrioritySet( NULL, uxOriginalPriority );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) >= xBlockTime );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) < ( xBlockTime + xAllowableMargin ) );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) >= xBlockTime );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) < ( xBlockTime + xAllowableMargin ) );\r
        prvCheckExpectedState( xReturned == 0 );\r
 \r
        /* The buffer is now full of data in the form "000000", "111111", etc.  Make\r
@@ -331,8 +331,8 @@ UBaseType_t uxOriginalPriority;
        xReturned = xStreamBufferReceive( xStreamBuffer, ( void * ) pucReadData, x6ByteLength, xBlockTime );\r
        xTimeAfterCall = xTaskGetTickCount();\r
        vTaskPrioritySet( NULL, uxOriginalPriority );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) >= xBlockTime );\r
-       prvCheckExpectedState( ( xTimeAfterCall - xTimeBeforeCall ) < ( xBlockTime + xAllowableMargin ) );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) >= xBlockTime );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTimeAfterCall - xTimeBeforeCall ) ) < ( xBlockTime + xAllowableMargin ) );\r
        prvCheckExpectedState( xReturned == 0 );\r
 \r
 \r
@@ -847,7 +847,7 @@ const TickType_t xTicksToBlock = pdMS_TO_TICKS( 350UL );
        /* Don't expect to receive anything yet! */\r
        xTimeOnEntering = xTaskGetTickCount();\r
        xReceivedLength = xStreamBufferReceive( xStreamBuffers.xEchoClientBuffer, ( void * ) pcReceivedString, sbSTREAM_BUFFER_LENGTH_BYTES, xTicksToBlock );\r
-       prvCheckExpectedState( ( xTaskGetTickCount() - xTimeOnEntering ) >= xTicksToBlock );\r
+       prvCheckExpectedState( ( ( TickType_t ) ( xTaskGetTickCount() - xTimeOnEntering ) ) >= xTicksToBlock );\r
        prvCheckExpectedState( xReceivedLength == 0 );\r
 \r
        /* Now the stream buffers have been created the echo client task can be\r
@@ -933,6 +933,7 @@ BaseType_t xErrorDetected = pdFALSE;
                {\r
                        /* Create the stream buffer that will be used from inside the tick\r
                        interrupt. */\r
+                       memset( ucRxData, 0x00, sizeof( ucRxData ) );\r
                        xStreamBuffer = xStreamBufferCreate( xStreamBufferSizeBytes, xTriggerLevel );\r
                        configASSERT( xStreamBuffer );\r
 \r
@@ -958,21 +959,34 @@ BaseType_t xErrorDetected = pdFALSE;
                        /* Now check the number of bytes received equals the trigger level,\r
                        except in the case that the read timed out before the trigger level\r
                        was reached. */\r
-                       if( xBytesReceived < xTriggerLevel )\r
+                       if( xTriggerLevel > xReadBlockTime )\r
                        {\r
-                               /* This should only happen if the trigger level was greater than\r
-                               the block time. */\r
-                               if( xTriggerLevel < xReadBlockTime )\r
+                               /* Trigger level was greater than the block time so expect to\r
+                               time out having received xReadBlockTime bytes. */\r
+                               if( ( xReadBlockTime - xBytesReceived ) > xAllowableMargin )\r
                                {\r
                                        xErrorDetected = pdTRUE;\r
                                }\r
                        }\r
-                       else if( ( xBytesReceived - xTriggerLevel ) > xAllowableMargin )\r
+                       else if( xTriggerLevel < xReadBlockTime )\r
                        {\r
-                               /* A margin may be required here if there are other high priority\r
-                               tasks prevent the task that reads from the message buffer running\r
-                               immediately. */\r
-                               xErrorDetected = pdTRUE;\r
+                               /* Trigger level was less than the block time so we expect to\r
+                               have received the trigger level number of bytes. */\r
+                               if( ( xTriggerLevel - xBytesReceived ) > xAllowableMargin )\r
+                               {\r
+                                       xErrorDetected = pdTRUE;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               /* The trigger level equaled the block time, so expect to\r
+                               receive no greater than the block time, but one or two less is\r
+                               ok due to variations in how far through the time slice the\r
+                               functions get executed. */\r
+                               if( xBytesReceived > xReadBlockTime )\r
+                               {\r
+                                       xErrorDetected = pdTRUE;\r
+                               }\r
                        }\r
 \r
                        if( xBytesReceived > sizeof( ucRxData ) )\r
diff --git a/FreeRTOS/History.txt b/FreeRTOS/History.txt
new file mode 100644 (file)
index 0000000..ba09972
--- /dev/null
@@ -0,0 +1,2707 @@
+Documentation and download available at http://www.FreeRTOS.org/\r
+\r
+Changes since the last release:\r
+       + Added xTaskCatchUpTicks() which corrects the tick count value after the\r
+         application code has held interrupts disabled for an extended period.\r
+       + Updated the xTaskResumeAll() implementation so it uses the new\r
+         xTaskCatchUpTicks() function mentioned above to unwind ticks that were\r
+         pended while the scheduler was suspended.\r
+       + Update the Windows simulator port to use a synchronous object to prevent\r
+         a user reported error whereby a task continues to run for a short time\r
+         after being moved to the Blocked state.  Note we were not able to\r
+         replicate the reported error.\r
+       + Added the vPortGetHeapStats() API function which returns information on\r
+         the heap_4 and heap_5 state.\r
+       + Change type of uxPendedTicks from UBaseType_t to TickType_t to ensure it\r
+         has same type as variables it is compared to, and therefore also rename\r
+         the variable xPendingTicks.\r
+\r
+Changes between FreeRTOS V10.2.1 and FreeRTOS V10.2.0 released May 13 2019:\r
+\r
+       + Added ARM Cortex-M23 port layer to complement the pre-existing ARM\r
+         Cortex-M33 port layer.\r
+       + The RISC-V port now automatically switches between 32-bit and 64-bit\r
+         cores.\r
+       + Introduced the portMEMORY_BARRIER macro to prevent instruction re-ordering\r
+         when GCC link time optimisation is used.\r
+       + Introduced the portDONT_DISCARD macro to the ARMv8-M ports to try and\r
+         prevent the secure side builds from removing symbols required by the\r
+         non secure side build.\r
+       + Introduced the portARCH_NAME to provide additional data to select semi-\r
+         automated build environments.\r
+       + Cortex-M33 and Cortex-M23 ports now correctly disable the MPU before\r
+         updating the MPU registers.\r
+\r
+       + Added Nuvoton NuMaker-PFM-M2351 ARM Cortex-M23 demo.\r
+       + Added LPC55S69 ARM Cortex-M33 demo.\r
+       + Added an STM32 dual core AMP stress test demo.\r
+\r
+\r
+Changes between FreeRTOS V10.1.1 and FreeRTOS V10.2.0 released February 25 2019:\r
+\r
+       + Added GCC RISC-V MCU port with three separate demo applications.\r
+       + Included pre-existing ARM Cortex-M33 (ARMv8-M) GCC/ARMclang and IAR ports\r
+         with Keil simulator demo.\r
+       + Update the method used to detect if a timer is active.  Previously the\r
+         timer was deemed to be inactive if it was not referenced from a list.\r
+         However, when a timer is updated it is temporarily removed from, then\r
+         re-added to a list, so now the timer's active status is stored separately.\r
+       + Add vTimerSetReloadMode(), xTaskGetIdleRunTimeCounter(), and\r
+         xTaskGetApplicationTaskTagFromISR() API functions.\r
+       + Updated third party Xtensa port so it is MIT licensed.\r
+       + Added configINCLUDE_PLATFORM_H_INSTEAD_OF_IODEFINE_H to the Renesas\r
+         compiler RX600v2 port to enable switching between platform.h and\r
+         iodefine.h includes within that port's port.c file.\r
+       + Removed the 'FromISR' functions from the MPU ports as ISRs run privileged\r
+         anyway.\r
+       + Added uxTaskGetStackHighWaterMark2() function to enable the return type to\r
+         be changed without breaking backward compatibility.\r
+         uxTaskGetStackHighWaterMark() returns a UBaseType_t as always,\r
+         uxTaskGetStackHighWaterMark2() returns configSTACK_DEPTH_TYPE to allow the\r
+         user to determine the return type.\r
+       + Fixed issues in memory protected ports related to different combinations\r
+         of static memory only and dynamic memory only builds.  As a result the\r
+         definition of tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE became more\r
+         complex and was moved to FreeRTOS.h with a table explaining its definition.\r
+       + Added a 'get task tag from ISR' function.\r
+       + Change the method used to determine if a timer is active or not from just\r
+         seeing if it is referenced from the active timer list to storing its\r
+         active state explicitly.  The change prevents the timer reporting that it\r
+         is inactive while it is being moved from one list to another.\r
+       + The pcName parameter passed into the task create functions can be NULL,\r
+         previously a name had to be provided.\r
+       + When using tickless idle, prvResetNextTaskUnblockTime() is now only called\r
+         in xTaskRemoveFromEventList() if the scheduler is not suspended.\r
+       + Introduced portHAS_STACK_OVERFLOW_CHECKING, which should be set to 1 for\r
+         FreeRTOS ports that run on architectures that have stack limit registers.\r
+\r
+\r
+Changes between FreeRTOS V10.1.0 and FreeRTOS V10.1.1 released 7 September 2018\r
+\r
+       + Reverted a few structure name changes that broke several kernel aware\r
+         debugger plug-ins.\r
+       + Updated to the latest trace recorder code.\r
+       + Fixed some formatting in the FreeRTOS+TCP TCP/IP stack code.\r
+       + Reverted moving some variables from file to function scope as doing so\r
+         broke debug scenarios that require the static qualifier to be removed.\r
+\r
+Changes between FreeRTOS V10.0.1 and FreeRTOS V10.1.0 released 22 August 2018\r
+\r
+       FreeRTOS Kernel Changes:\r
+\r
+       + Update lint checked MISRA compliance to use the latest MISRA standard, was\r
+         previously using the original MISRA standard.\r
+       + Updated all object handles (TaskHandle_t, QueueHandle_t, etc.) to be\r
+         unique types instead of void pointers, improving type safety.  (this was\r
+         attempted some years back but had to be backed out due to bugs in some\r
+         debuggers).  Note this required the pvContainer member of a ListItem_t\r
+         struct to be renamed - set configENABLE_BACKWARD_COMPATIBILITY to 1 if\r
+         this causes an issue.\r
+       + Added configUSE_POSIX_ERRNO to enable per task POSIX style errno\r
+         functionality in a more user friendly way - previously the generic thread\r
+         local storage feature was used for this purpose.\r
+       + Added Xtensa port and demo application for the XCC compiler.\r
+       + Changed the implementation of vPortEndScheduler() for the Win32 port to\r
+         simply call exit( 0 ).\r
+       + Bug fix in vPortEnableInterrupt() for the GCC Microblaze port to protect\r
+         the read modify write access to an internal Microblaze register.\r
+       + Fix minor niggles when the MPU is used with regards to prototype\r
+         differences, static struct size differences, etc.\r
+       + The usStackHighWaterMark member of the TaskStatus_t structure now has type\r
+         configSTACK_DEPTH_TYPE in place of uint16_t - that change should have been\r
+         made when the configSTACK_DEPTH_TYPE type (which gets around the previous\r
+         16-bit limit on stack size specifications) was introduced.\r
+       + Added the xMessageBufferNextLengthBytes() API function and likewise stream\r
+         buffer equivalent.\r
+       + Introduce configMESSAGE_BUFFER_LENGTH_TYPE to allow the number of bytes\r
+         used to hold the length of a message in the message buffer to be reduced.\r
+         configMESSAGE_BUFFER_LENGTH_TYPE default to size_t, but if, for example,\r
+         messages can never be more than 255 bytes it could be set to uint8_t,\r
+         saving 3 bytes each time a message is written into the message buffer\r
+         (assuming sizeof( size_t ) is 4).\r
+       + Updated the StaticTimer_t structure to ensure it matches the size of the\r
+         Timer_t structure when the size of TaskFunction_t does not equal the size\r
+         of void *.\r
+       + Update various Xilinx demos to use 2018.1 version of the SDK tools.\r
+       + Various updates to demo tasks to maintain test coverage.\r
+       + FreeRTOS+UDP was removed in FreeRTOS V10.1.0 as it was replaced by\r
+         FreeRTOS+TCP, which was brought into the main download in FreeRTOS\r
+         V10.0.0.  FreeRTOS+TCP can be configured as a UDP only stack, and\r
+         FreeRTOS+UDP does not contain the patches applied to FreeRTOS+TCP.\r
+\r
+       FreeRTOS+TCP Changes:\r
+\r
+       + Multiple security improvements and fixes in packet parsing routines, DNS\r
+         caching, and TCP sequence number and ID generation.\r
+       + Disable NBNS and LLMNR by default.\r
+       + Add TCP hang protection by default.\r
+\r
+       We thank Ori Karliner of Zimperium zLabs Team for reporting these issues.\r
+\r
+\r
+Changes between FreeRTOS V10.0.0 and FreeRTOS V10.0.1, released December 20 2017\r
+\r
+       + Fix position of "#if defined( __cplusplus )" in stream_buffer.h.\r
+       + Correct declarations of MPU_xQueuePeek() and MPU_xQueueSemaphoreTake() in\r
+         mpu_prototypes.h.\r
+       + Correct formatting in vTaskList() helper function when it prints the state\r
+         of the currently executing task.\r
+       + Introduce #error if stream_buffer.c is built without\r
+         configUSE_TASK_NOTIFICATIONS set to 1.\r
+       + Update FreeRTOS+TCP to V2.0.0\r
+               - Improve the formatting of text that displays the available netword\r
+                 interfaces when FreeRTOS+TCP is used on Windows with WinPCap.\r
+               - Introduce ipconfigSOCKET_HAS_USER_WAKE_CALLBACK option to enable a user\r
+                 definable callback to execute when data arrives on a socket.\r
+\r
+Changes between FreeRTOS V9.0.1 and FreeRTOS V10.0.0:\r
+\r
+       The FreeRTOS kernel is now MIT licensed: https://www.FreeRTOS.org/license\r
+\r
+       New Features and components:\r
+\r
+       + Stream Buffers - see http://www.FreeRTOS.org/RTOS-stream-buffer-example.html\r
+       + Message Buffers - see http://www.FreeRTOS.org//RTOS-message-buffer-example.html\r
+       + Move FreeRTOS+TCP into the main repository, along with the basic Win32\r
+         TCP demo FreeRTOS_Plus_TCP_Minimal_Windows_Simulator.\r
+\r
+       New ports or demos:\r
+\r
+       + Added demo for TI SimpleLink CC3220 MCU.\r
+       + Added MPU and non MPU projects for Microchip CEC and MEC 17xx and 51xx\r
+         MCUs.\r
+       + Added CORTEX_MPU_Static_Simulator_Keil_GCC demo to test static allocation\r
+         in the MPU port.\r
+\r
+       Fixes or enhancements:\r
+\r
+       + Cortex-M ports push additional register prior to calling\r
+         vTaskSwitchContext to ensure 8-byte alignment is maintained.  Only\r
+         important if a user defined tick hook function performs an operation that\r
+         requires 8-byte alignment.\r
+       + Optimisations to the implementation of the standard tickless idle mode on\r
+         Cortex-M devices.\r
+       + Improvements to the Win32 port including using higher priority threads.\r
+       + Ensure interrupt stack alignment on PIC32 ports.\r
+       + Updated GCC TriCore port to build with later compiler versions.\r
+       + Update mpu_wrappers.c to support static allocation.\r
+       + The uxNumberOfItems member of List_t is now volatile - solving an issue\r
+         when the IAR compiler was used with maximum optimization.\r
+       + Introduced configRECORD_STACK_HIGH_ADDRESS.  When set to 1 the stack start\r
+         address is saved into each task's TCB (assuming stack grows down).\r
+       + Introduced configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H to allow user defined\r
+         functionality, and user defined initialisation, to be added to FreeRTOS's\r
+         tasks.c source file.  When configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H is\r
+         set to 1 a user provided header file called freertos_task_c_additions.h\r
+         will be included at the bottom of tasks.c.  Functions defined in that\r
+         header file can call freertos_tasks_c_additions_init(), which in turn\r
+         calls a macro called FREERTOS_TASKS_C_ADDITIONS_INIT(), if it is defined.\r
+         FREERTOS_TASKS_C_ADDITIONS_INIT() can be defined in FreeRTOSConfig.h.\r
+       + Introduced configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( x ) which can be\r
+         defined by a user in FreeRTOSConfig.h.  The macro is called before\r
+         assessing whether to enter tickless idle mode or not.  If the macro sets\r
+         x to zero then tickless idle mode will not be entered.  This allows users\r
+         to abort tickless idle mode entry before the tickless idle function is\r
+         even called - previously it was only possible to abort from within the\r
+         tickless idle function itself.\r
+       + Added configPRINTF(), which can be defined by users to allow all libraries\r
+         to use the same print formatter.\r
+       + Introduced configMAX() and configMIN() macros which default to standard\r
+         max( x, y ) and min( x, y ) macro behaviour, but can be overridden if the\r
+         application writer defines the same macros in FreeRTOSConfig.h.\r
+       + Corrected the definition of StaticTask_t in the case where\r
+         INCLUDE_xTaskAbortDelay is set to 1.\r
+       + Introduced configTIMER_SERVICE_TASK_NAME and configIDLE_TASK_NAME, both of\r
+         which can be defined to strings in FreeRTOSConfig.h to change the default\r
+         names of the timer service and idle tasks respectively.\r
+       + Only fill the stack of a newly created task with a known value if stack\r
+         checking, or high water mark checking/viewing, is in use - removing the\r
+         dependency on memset() in other cases.\r
+       + Introduced xTaskCreateRestrictedStatic() so static allocation can be used\r
+         with the MPU.\r
+       + Ensure suspended tasks cannot be unsuspended by a received task\r
+         notification.\r
+       + Fix race condition in vTaskSetTimeOutState().\r
+       + Updated trace recorder files to the latest version.\r
+\r
+Changes since FreeRTOS V9.0.0:\r
+\r
+       + Priority dis-inheritance behaviour has been enhanced in the case where a\r
+         task that attempted to take a mutex that was held by a lower priority task\r
+         timed out before it was able to obtain the mutex (causing the task that\r
+         holds the mutex to have its priority raised, then lowered again, in\r
+         accordance with the priority inheritance protocol).\r
+       + Split the overloaded xQueueGenericReceive() function into three separate\r
+         dedicated functions.\r
+       + Allow the default human readable text names given to the Idle and Timer\r
+         tasks to be overridden by defining the configIDLE_TASK_NAME and\r
+         configTIMER_SERVICE_TASK_NAME definitions respectively in FreeRTOSConfig.h.\r
+       + Introduced configINITIAL_TICK_COUNT to allow the tick count to take a\r
+         value of than than 0 when the system boots.  This can be useful for\r
+         testing purposes - although setting configUSE_16_BIT_TICKS to 1 can also\r
+         be used to test frequent tick overflows.\r
+       + Ensure the Cortex-M SysTick count is cleared to zero before starting the\r
+         first task.\r
+       + Add configASSERT() into ARM Cortex-M ports to check the number of priority\r
+         bit settings.\r
+       + Clear the 'control' register before starting ARM Cortex-M4F ports in case\r
+         the FPU is used before the scheduler is started.  This just saves a few\r
+         bytes on the main stack as it prevents space being left for a later save\r
+         of FPU registers.\r
+       + Added xSemaphoreGetMutexHolderFromISR().\r
+       + Corrected use of portNVIC_PENDSVSET to portNVIC_PENDSVSET_BIT in MPU ports.\r
+       + Introduced configSTACK_DEPTH_TYPE to allow users to change the type used\r
+         to specify the stack size when using xTaskCreate().  For historic reasons,\r
+         when FreeRTOS was only used on small MCUs, the type was set to uint16_t,\r
+         but that can be too restrictive when FreeRTOS is used on larger\r
+         processors.  configSTACK_DEPTH_TYPE defaults to uint16_t.\r
+         xTaskCreateStatic(), being a newer function, used a uint32_t.\r
+       + Increase the priority of the Windows threads used by the Win32 port.  As\r
+         all the threads run on the same core, and the threads run with very high\r
+         priority, there is a risk that the host will become unresponsive, so also\r
+         prevent the Windows port executing on single core hosts.\r
+\r
+Changes between FreeRTOS V9.0.0 and FreeRTOS V9.0.0rc2 released May 25 2016:\r
+\r
+       See http://www.FreeRTOS.org/FreeRTOS-V9.html\r
+\r
+       RTOS kernel updates:\r
+\r
+       + The prototype of the new xTaskCreateStatic() API function was modified to\r
+         remove a parameter and improve compatibility with other new\r
+         "CreateStatic()" API functions.  The stack size parameter in\r
+         xTaskCreateStatic() is now uint32_t, which changes the prototype of the\r
+         callback functions.  See the following URL:\r
+         http://www.freertos.org/xTaskCreateStatic.html\r
+       + GCC ARM Cortex-A port:  Introduced the configUSE_TASK_FPU_SUPPORT\r
+         constant.  When configUSE_TASK_FPU_SUPPORT is set to 2 every task is\r
+         automatically given a floating point (FPU) context.\r
+       + GCC ARM Cortex-A port:  It is now possible to automatically save and\r
+         restore all floating point (FPU) registers on entry to each potentially\r
+         nested interrupt by defining vApplicationFPUSafeIRQHandler() instead of\r
+         vApplicationIRQHandler().\r
+       + All ARM Cortex-M3/4F/7 ports:  Clear the least significant bit of the task\r
+         entry address placed onto the stack of a task when the task is created for\r
+         strict compliance with the ARM Cortex-M3/4/7 architecture documentation\r
+         (no noticeable effect unless using the QMEU emulator).\r
+       + Added GCC and Keil ARM Cortex-M4F MPU ports - previously the MPU was only\r
+         supported on ARM Cortex-M3.\r
+       + ARM Cortex-M3/4F MPU ports:  Update to fully support the FreeRTOS V9.0.0\r
+         API (other than static object creation) and added the\r
+         FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC demo application to\r
+         demonstrate how to use the updated MPU port.\r
+       + All ARM Cortex-M3/4F/7 ports:  Add additional barrier instructions to the\r
+         default low power tickless implementation.\r
+       + All ARM Cortex-M0 ports:  Prevent an item being left on the stack of the\r
+         first task that executes.\r
+       + Win32 ports:  Reduce the amount of stack used and change the way Windows\r
+         threads are deleted to increase the maximum execution time.\r
+       + Add an ARM Cortex-M4F port for the MikroC compiler.  Ensure to read the\r
+         documentation page for this port before use.\r
+       + MPS430X IAR port:  Update to be compatible with the latest EW430 tools\r
+         release.\r
+       + IAR32 GCC port:  Correct vPortExitCritical() when\r
+         configMAX_API_CALL_INTERRUPT_PRIORITY == portMAX_PRIORITY.\r
+       + For consistency vTaskGetTaskInfo() now has the alias vTaskGetInfo(),\r
+         xTaskGetTaskHandle() now has the alias xTaskGetHandle() and\r
+         pcQueueGetQueueName() now has an alias pcQueueGetName().\r
+       + Fix various errors in comments and compiler warnings.\r
+\r
+       Demo application updates:\r
+\r
+       + Update Atmel Studio projects to use Atmel Studio 7.\r
+       + Update Xilinx SDK projects to use the 2016.1 version of the SDK.\r
+       + Remove dependency on legacy IO libraries from the PIC32 demos.\r
+       + Move the Xilinx UltraScale Cortex-R5 demo into the main distribution.\r
+       + Update the MSP432 libraries to the latest version.\r
+       + Add Microchip CEC1302 (ARM Cortex-M4F) demos for GCC, Keil and MikroC\r
+         compilers.\r
+       + Move the Atmel SAMA5D2 demo into the main distribution.\r
+\r
+Changes between FreeRTOS V9.0.0rc1 and FreeRTOS V9.0.0rc2 (release candidate 2)\r
+released March 30 2016:\r
+\r
+       NOTE - See http://www.FreeRTOS.org/FreeRTOS-V9.html for details\r
+\r
+       + The functions that create RTOS objects using static memory allocation have\r
+         been simplified and will not revert to using dynamic allocation if a\r
+         buffer is passed into a function as NULL.\r
+       + Introduced the configSUPPORT_DYNAMIC_ALLOCATION configuration constant to\r
+         allow a FreeRTOS application to be built without a heap even being being\r
+         defined. The Win32 example located in the\r
+         /FreeRTOS/demo/WIN32-MSVC-Static-Allocation-Only directory is provided as\r
+         a reference for projects that do not include a FreeRTOS heap.\r
+       + Minor run-time optimisations.\r
+       + Two new low power tickless implementations that target Silicon Labs EFM32\r
+         microcontrollers.\r
+       + Addition of the xTimerGetPeriod() and xTimerGetExpireTime() API functions.\r
+\r
+Changes between FreeRTOS V8.2.3 and FreeRTOS V9.0.0rc1 (release candidate 1)\r
+released February 19 2016:\r
+\r
+       RTOS Kernel Updates:\r
+\r
+       + Major new feature - tasks, semaphores, queues, timers and event groups can\r
+         now be created using statically allocated memory, so without any calls to\r
+         pvPortMalloc().\r
+       + Major new features - Added the xTaskAbortDelay() API function which allows\r
+         one task to force another task to immediately leave the Blocked state,\r
+         even if the event the blocked task is waiting for has not occurred, or the\r
+         blocked task's timeout has not expired.\r
+       + Updates necessary to allow FreeRTOS to run on 64-bit architectures.\r
+       + Added vApplicationDaemonTaskStartupHook() which executes when the RTOS\r
+         daemon task (which used to be called the timer service task) starts\r
+         running.  This is useful if the application includes initialisation code\r
+         that would benefit from executing after the scheduler has been started.\r
+       + Added the xTaskGetTaskHandle() API function, which obtains a task handle\r
+         from the task's name.  xTaskGetTaskHandle() uses multiple string compare\r
+         operations, so it is recommended that it is called only once per task.\r
+         The handle returned by xTaskGetTaskHandle() can then be stored locally for\r
+         later re-use.\r
+       + Added the pcQueueGetQueueName() API function, which obtains the name of\r
+         a queue from the queue's handle.\r
+       + Tickless idling (for low power applications) can now also be used when\r
+         configUSE_PREEMPTION is 0.\r
+       + If one task deletes another task, then the stack and TCB of the deleted\r
+         task is now freed immediately.  If a task deletes itself, then the stack\r
+         and TCB of the deleted task are freed by the Idle task as before.\r
+       + If a task notification is used to unblock a task from an ISR, but the\r
+         xHigherPriorityTaskWoken parameter is not used, then pend a context switch\r
+         that will then occur during the next tick interrupt.\r
+       + Heap_1.c and Heap_2.c now use the configAPPLICATION_ALLOCATED_HEAP\r
+         settings, which previously was only used by heap_4.c.\r
+         configAPPLICATION_ALLOCATED_HEAP allows the application writer to declare\r
+         the array that will be used as the FreeRTOS heap, and in-so-doing, place\r
+         the heap at a specific memory location.\r
+       + TaskStatus_t structures are used to obtain details of a task.\r
+         TaskStatus_t now includes the bae address of the task's stack.\r
+       + Added the vTaskGetTaskInfo() API function, which returns a TaskStatus_t\r
+         structure that contains information about a single task.  Previously this\r
+         information could only be obtained for all the tasks at once, as an array\r
+         of TaskStatus_t structures.\r
+       + Added the uxSemaphoreGetCount() API function.\r
+       + Replicate previous Cortex-M4F and Cortex-M7 optimisations in some\r
+         Cortex-M3 port layers.\r
+\r
+       Demo Application Updates:\r
+\r
+       Further demo applications will be added prior to the final FreeRTOS V9\r
+       release.\r
+\r
+       + Updated SAM4L Atmel Studio project to use Atmel Studio 7.\r
+       + Added ARM Cortex-A53 64-bit port.\r
+       + Added a port and demo for the ARM Cortex-A53 64-bit cores on the Xilinx\r
+         Ultrascale MPSoC.\r
+       + Added Cortex-M7 SAME70 GCC demo.\r
+       + Added EFM32 Giant and Wonder Gecko demos.\r
+\r
+\r
+Changes between V8.2.2 and V8.2.3 released October 16, 2015\r
+\r
+       RTOS kernel updates:\r
+\r
+       + Fix bug identified in a modification made in V8.2.2 to the software timer\r
+         code that allows tickless low power applications to sleep indefinitely\r
+         when software timers are used.\r
+       + Simplify and improve efficiency of stack overflow checking.\r
+       + Add xTaskNotifyStateClear() API function.\r
+       + New IAR and GCC Cortex-R ports for microprocessors that do not use an ARM\r
+         generic interrupt controller (GIC).\r
+       + New PIC32MEC14xx port.\r
+       + Add support for PIC32MZ EF parts (with floating point) into the PIC32MZ\r
+         port.\r
+       + Zynq7000 port layer now declares the functions that setup and clear the\r
+         tick interrupt as weak symbols so they can be overridden by the\r
+         application, and uses a global XScuGic object so the same object can be\r
+         used by the application code.\r
+       + Introduced configUSE_TASK_FPU_SUPPORT, although the PIC32MZ EF port is\r
+         currently the only port that uses it.\r
+       + Updates to RL78 and 78K0 IAR port layers to improve support for\r
+         combinations of memory models.\r
+       + Minor updates to heap_5.c to remove compiler warnings generated by some\r
+         compilers.\r
+       + License simplifications.  See /FreeRTOS/License/license.txt in the\r
+         official distribution.\r
+\r
+       FreeRTOS+ updates:\r
+\r
+       + Update directory names to use WolfSSL instead of CyaSSL, inline with\r
+         WolfSSL's re-branding.\r
+       + Update to latest WolfSSL code.\r
+       + Update to latest FreeRTOS+Trace recorder code.\r
+       + Add in the FreeRTOS+Trace recorder library required for streaming trace.\r
+\r
+       Demo application changes:\r
+\r
+       + Add demo applications for Renesas RZ/T (Cortex-R), PIC32MZ EF (PIC32 with\r
+         floating point hardware), PIC32MEC14xx, RX71M, RX113 and RX231.\r
+       + General tidy up of spelling and compiler warnings.\r
+\r
+\r
+Changes between V8.2.1 and V8.2.2 released August 12, 2015\r
+\r
+       RTOS kernel updates:\r
+\r
+       + Added Intel IA32/x86 32-bit port.\r
+       + General maintenance.\r
+       + PRIVILEGED_FUNCTION and PRIVILEGED_DATA macros, which are used in memory\r
+         protected systems, have been added to the newer event group and software\r
+         timer functions.\r
+       + Add the errno definitions used by FreeRTOS+ components into projdefs.h.\r
+       + Remove the restriction that prevented tick-less idle implementations\r
+         waiting indefinitely when software timers were used in the same\r
+         application.\r
+       + Introduce xTaskNotifyAndQueryFromISR() as the interrupt safe version of\r
+         xTaskNotifyAndQuery().\r
+       + Add additional NOPs to the MSP430X port layers to ensure strict compliance\r
+         with the hardware documentation.\r
+       + Microblaze port: Added option for port optimised task selection.\r
+       + Microblaze port: Previously tasks inherited the exception enable state\r
+         at the time the task was created.  Now all tasks are created with\r
+         exceptions enabled if the Microblaze design supports exceptions.\r
+       + Windows port: Add additional safe guards to ensure the correct start up\r
+         sequence and thread switching timing.\r
+       + Windows port: Improve the implementation of the port optimised task\r
+         selection assembly code.\r
+       + Update heap_4 and heap_5 to allow use on 64-bit processors.\r
+       + Simplify the code that creates a queue.\r
+       + General improved tick-less idle behaviour.\r
+       + Ensure none of the variables in the common kernel files are initialised to\r
+         anything other than zero.\r
+       + Correct calculation of xHeapStructSize in heap_4 and heap_5.\r
+\r
+       Demo application updates:\r
+\r
+       + Added demo project for the new IA32/x86 port that targets the Galileo\r
+         hardware.\r
+       + Added MSP430FR5969 demos (previously provided as a separate download).\r
+       + Added FreeRTOS BSP repository for automatic creation of FreeRTOS\r
+         applications in the Xilinx SDK.\r
+       + Added Atmel Studio / GCC project for the SAMV71 (ARM Cortex-M7)\r
+       + Update Xilinx SDK projects to use version 2015.2 of the SDK.\r
+       + Remove Microblaze demos that were using obsolete tools.\r
+       + Add MSP43FR5969 IAR and CCS demos.\r
+\r
+       FreeRTOS+ Updates:\r
+\r
+       + Updated FreeRTOS+Trace recorder library, which requires an update to the\r
+         FreeRTOS+Trace application.\r
+       + Added Reliance Edge source code and demo application.  Reliance edge is\r
+         a fail safe transactional file system ideal for applications that require\r
+         file storage, and especially when high reliability is essential.\r
+       + Introduce configAPPLICATION_PROVIDES_cOutputBuffer to allow FreeRTOS+CLI\r
+         users to place the output buffer at a fixed memory address.\r
+       + Improve the NetworkInterface.c file provided for the Windows port of\r
+         FreeRTOS+UDP.\r
+\r
+Changes between V8.2.0 and V8.2.1 released 24th March 2015.\r
+\r
+       RTOS kernel updates:\r
+\r
+       + Added user definable and flexible thread local storage facility.\r
+       + Added vTimerSetTimerID() API function to complement the pvTimerGetTimerID()\r
+         function to allow the timer's ID to be used as timer local storage.\r
+       + Fixed a potential issue related to the use of queue sets from an ISR.\r
+       + Some updates to the Xilinx Microblaze GCC port.\r
+       + Added ARM Cortex-M4F port for Texas Instruments Code Composer Studio.\r
+       + Added ARM Cortex-M7 r0p1 port layer for IAR, GCC and Keil which contains a\r
+         minor errata work around.  All other ARM Cortex-M7 core revisions should\r
+         use the ARM Cortex-M4F port.\r
+       + Exclude the whole of croutine.c if configUSE_CO_ROUTINES is set to 0.\r
+       + Change some data types from uint32_t to size_t in preparation for 64-bit\r
+         Windows port.\r
+       + Update the PIC32 port to remove deprecation warnings output by the latest\r
+         XC32 compilers.\r
+\r
+       Demo application updates:\r
+\r
+       + Added demo application for TI's ARM Cortex-M4F based MSP432\r
+         microcontroller using IAR, Keil and CCS compilers.\r
+       + Added demo application for STM32F ARM Cortex-M7 based microcontroller\r
+         using IAR and Keil.\r
+       + Added demo application for Atmel SAMV71 ARM Cortex-M7 based\r
+         microcontroller using IAR and Keil.\r
+       + Added Microblaze demo that uses the 2014.4 version of the Xilinx SDK and\r
+         runs on the KC705 evaluation board (Kintex FPGA).\r
+\r
+Changes between V8.1.2 and V8.2.0 released 16th January 2015\r
+\r
+       Changes between release candidate 1 and the official release are restricted\r
+       to maintenance only.\r
+\r
+       Significant RTOS kernel updates:\r
+\r
+       + MAJOR NEW FEATURE!  Task notifications.  Please see the following URL for\r
+         details: http://www.FreeRTOS.org/RTOS-task-notifications.html\r
+       + NEW HEADER FILE REQUIRED!  Obsolete definitions have been separated into\r
+         a new header file called FreeRTOS/Source/include/deprecated_definitions.h.\r
+         This header file must be present to build.  Note some of the obsolete\r
+         definitions are still used by very old demo application projects.\r
+\r
+       Other RTOS kernel updates:\r
+\r
+       + Made xSemaphoreGiveFromISR() a function rather than a macro that calls\r
+         xQueueGenericSendFromISR().  This allows for major performance\r
+         enhancements at the expense of some additional code size if both functions\r
+         are used in the same application.  NOTE:  In most uses cases such use of\r
+         a semaphore can now be replaced with a task notification which is smaller\r
+         and faster still.\r
+       + The TCB is now always allocated such that the task's stack grows away from\r
+         the TCB (improves debugging of stack overflows as the overflow will not\r
+         overwrite the task's name).\r
+       + GCC, IAR and Keil Cortex-M4F ports now use more inlining (performance\r
+         enhancements at the cost of a little additional code space).\r
+       + Queues are now allocated with a single call to pvPortMalloc() which\r
+         allocates both the queue structure and the queue storage area.\r
+       + Introduced a new critical section macro for reading the tick count that\r
+         defines away to nothing in cases where the width of the tick allows the\r
+         tick count to be read atomically (performance benefits - especially when\r
+         optimisation is on).\r
+       + Introduced configAPPLICATION_ALLOCATED_HEAP in heap_4.c to allow the\r
+         application writer to provide their own heap array - and in so doing\r
+         control the location of the heap.\r
+       + Introduced configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES which, when set, will\r
+         include known values in both list and list item structures.  The values\r
+         are intended to assist debugging.  If the values get overwritten then it\r
+         is likely application code has written over RAM used by the kernel.\r
+       + configASSERT()s in all Cortex-M ports used to test the lowest 5 bits of\r
+         the interrupt control register to detect taskENTER_CRITICAL() being called\r
+         from an interrupt.  This has been changed to test all 8 bits.\r
+       + Introduced uxTaskPriorityGetFromISR().\r
+       + Microblze V8 port now tests XPAR_MICROBLAZE_0_USE_FPU for inequality to 0\r
+         rather than equality to 1, and 2 and 3 are also valid values.\r
+       + Cortex-A5 GIC-less port no longer passes the address of the interrupting\r
+         peripheral into the interrupt handler.\r
+       + Fix an issue in FreeRTOS-MPU where an attempt was made to free the stack\r
+         belonging to a task when the task was deleted, even when the stack was\r
+         allocated statically.\r
+       + Utility (helper) functions that format task statistic information into\r
+         human readable tables now pad task names with spaces to ensure columns\r
+         line up correctly even where task name lengths vary greatly.\r
+       + Update FreeRTOS+Trace recorder library to version 2.7.0.\r
+\r
+       Demo application updates:\r
+\r
+       + Added two new standard demo task sets:  IntSemTest and TaskNotify.\r
+       + Added port and demo application for Atmel SAMA5D4 Cortex-A5 MPU.\r
+       + Added demo application for Altera Cyclone V Cortex-A9 MPU.\r
+       + Updated Zynq demo to use version 2014.4 of Xilinx's SDK and added in\r
+         demo tasks for new RTOS features.\r
+       + Updated Atmel SAM4E and SAM4S demos to include a lot of additional test\r
+         and demo tasks.\r
+       + Fixed a corner case issue in Atmel SAM4L low power tickless\r
+         implementation, and added button interrupt handling.\r
+       + Make the interrupt queue tests more tolerant to heave CPU loads.\r
+       + Updated MSVC FreeRTOS simulator demo to include the latest standard test\r
+         and demo tasks.\r
+       + Updated MingW/Eclipse FreeRTOS simulator demo to match the FreeRTOS MSVC\r
+         simulator demo.\r
+       + Updated all demos that use FreeRTOS+Trace to work with the latest trace\r
+         recorder code.\r
+\r
+\r
+Changes between V8.1.1 and V8.1.2 released September 2nd 2014\r
+\r
+       Move the defaulting of configUSE_PORT_OPTIMISED_TASK_SELECTION into the\r
+       individual port layers where necessary so it does not affect ports that do\r
+       not support the definition.\r
+\r
+Changes between V8.1.0 and V8.1.1 released August 29th 2014\r
+\r
+       By popular requests - a minor patch to V8.1.0 to re-instate the ability to\r
+       give a mutex type semaphore (with priority inheritance) from an interrupt\r
+       handler.\r
+\r
+Changes between V8.0.1 and V8.1.0 released August 26th 2014\r
+\r
+       FreeRTOS scheduler, kernel, demo and test updates:\r
+\r
+       + Improved the priority inheritance algorithms to assist integration with\r
+         off the shelf middleware that may hold multiple mutexes simultaneously.\r
+       + Introduce heap_5.c, which is similar to heap_4.c but allows the heap to\r
+         span multiple non-contiguous memory regions.\r
+       + Updated all Cortex-A9 ports to help trap a couple of common usage errors -\r
+         the first being when a task incorrectly attempts to exit its implementing\r
+         function and the second being when a non interrupt safe API function is\r
+         called from an interrupt.\r
+       + Update all Cortex-A9 ports to remove obsolete mode switches prior to\r
+         restoring a task context.\r
+       + configUSE_PORT_OPTIMISED_TASK_SELECTION now defaults to 1 instead of 0.\r
+       + Update all Cortex-M3/4F ports to trap a non interrupt safe API function\r
+         being called from an interrupt handler.\r
+       + Simplify the alignment checks in heap_4.c.\r
+       + Update the MSVC Windows simulator demo to use heap_5.c in place of\r
+         heap_4.c to ensure end users have an example to refer to.\r
+       + Updated standard demo test code to test the new priority inheritance\r
+         algorithms.\r
+       + Updated the standard demo tasks to make use of stdint and the FreeRTOS\r
+         specific typedefs that were introduced in FreeRTOS V8.0.0.\r
+       + Introduce the pdMS_TO_TICKS() macro as a more user friendly and intuitive\r
+         alternative to pdTICKS_PER_MS - both of which can be used to convert a\r
+         time specified in milliseconds to a time specified in RTOS ticks.\r
+       + Fix a bug in the Tasking compiler's Cortex-M port that resulted in an\r
+         incorrect value being written to the basepri register.  This only effects\r
+         users of the Tasking compiler.\r
+       + Update the Zynq demo to use version 2014.2 of the SDK and add in an lwIP\r
+         example that demonstrates lwIP being used with both its raw and sockets\r
+         interfaces.\r
+       + Updated the CCS Cortex-R4 port to enable it to be built with the latest\r
+         CCS compiler.\r
+\r
+       New ports and demo applications:\r
+\r
+       + Two Renesas RX64M ports (RXv2 core) and demos introduced, one for the GCC\r
+         compiler and one for the Renesas compiler.  Both demos use e2 studio.\r
+       + Generic IAR Cortex-A5 port (without any reliance on a GIC) introduced.\r
+         The new port is demonstrated on an Atmel SAMA5D3 XPlained board.\r
+\r
+       FreeRTOS+ component updates:\r
+\r
+       + Update CyaSSL to the latest version.\r
+       + Updated the FreeRTOS+ components supplied directly by Real Time Engineers\r
+         Ltd. to make use of stdint and the FreeRTOS specific typedefs that were\r
+         introduced in FreeRTOS V8.0.0.\r
+       + Rework and simplify the FreeRTOS+FAT SL RAM disk driver.\r
+\r
+       Miscellaneous updates and maintenance:\r
+\r
+       + Update the IAR and DS-5/ARM RZ demos to target the official RZ RSK\r
+         hardware in place of the previously targeted Renesas internal (not\r
+         publicly available) hardware.\r
+       + Various other maintenance tasks.\r
+\r
+\r
+Changes between V8.0.0 and V8.0.1 released 2nd May 2014\r
+\r
+       + Minor fixes to the event group functionality that was released in V8.0.0.\r
+         The 'clear bits from ISR' functionality is now implemented using a\r
+         deferred interrupt callback instead of a function, and the 'wait bits' and\r
+         'task sync' functions now correctly clear internal control bits before\r
+         returning a value in every possible path through the respective functions.\r
+       + Ensure the updating of internal control data is protected by a critical\r
+         section after a task is deleted or suspended.\r
+       + Minor fixes to FreeRTOS+FAT SL - namely seeking beyond the end of a file\r
+         when the offset was not a multiple of the sector size.\r
+       + Ensure Cortex-A9 system registers are only ever accessed as 32-bit values,\r
+         even when only the lest significant byte of the register is implemented.\r
+\r
+       Other updates:\r
+\r
+       + Updated the XMC4200 IAR project so it links with version 7.x of the IAR\r
+         tools.\r
+       + Add RL78L1C demo.\r
+       + Add pcTimerGetName() API function.\r
+       + Call _reclaim_reent() when a task is deleted if configUSE_NEWLIB_REENTRANT\r
+         is defined.\r
+\r
+Changes between V7.6.0 and V8.0.0 released 19th Feb 2014\r
+\r
+       http://www.freertos.org/upgrading-to-FreeRTOS-V8.html\r
+\r
+       FreeRTOS V8.x.x is a drop-in compatible replacement for FreeRTOS V7.x.x,\r
+       although a change to the type used to reference character strings may result\r
+       in application code generating a few (easily clearable) compiler warnings\r
+       after the upgrade, and an updated typedef naming convention means use of the\r
+       old typedef names is now discouraged.\r
+       See http://www.freertos.org/upgrading-to-FreeRTOS-V8.html for full\r
+       information.\r
+\r
+       New features and functionality:\r
+\r
+       + Event groups - see http://www.freertos.org/FreeRTOS-Event-Groups.html\r
+       + Centralised deferred interrupt processing - see\r
+         http://www.freertos.org/xTimerPendFunctionCallFromISR.html\r
+\r
+       Other updates:\r
+\r
+       + Previously, when a task left the Blocked state, a context switch was\r
+         performed if the priority of the unblocked task was greater than or equal\r
+         to the priority of the Running task.  Now a context switch is only\r
+         performed if the priority of the unblocked task is greater than the\r
+         priority of the Running task.\r
+       + New low power tickless demonstration project that targets the ST STM32L\r
+         microcontroller - see\r
+         http://www.freertos.org/STM32L-discovery-low-power-tickless-RTOS-demo.html\r
+       + Add xPortGetMinimumEverFreeHeapSize() to heap_4.c.\r
+       + Small change to the tickless low power implementation on the SAM4L to\r
+         ensure the alarm value (compare match value) cannot be set to zero when a\r
+         tickless period is exited due to an interrupt originating from a source\r
+         other than the RTOS tick.\r
+       + Update the GCC/Eclipse Win32 simulator demo to make better use of Eclipse\r
+         resource filters and match the functionality of the MSVC equivalent.\r
+       + xTaskIsTaskSuspended() is no longer a public function.  Use\r
+         eTaskGetState() in its place.\r
+       + Improved trace macros, including tracing of heap usage.\r
+       + Remove one level of indirection when accepting interrupts on the PIC32MZ.\r
+       + Add Cortex-A9 GCC port layer.\r
+       + Add Xilinx Zynq demo application.\r
+\r
+\r
+Changes between V7.5.3 and V7.6.0 released 18th November 2013\r
+\r
+       V7.6.0 changes some behaviour when the co-operative scheduler is used (when\r
+       configUSE_PREEMPTION is set to 0).  It is important to note that the\r
+       behaviour of the pre-emptive scheduler is unchanged - the following\r
+       description only applies when configUSE_PREEMPTION is set to 0:\r
+\r
+       WHEN configUSE_PREEMPTION IS SET TO 0 (which is in a small minority of\r
+       cases) a context switch will now only occur when a task places itself into\r
+       the Blocked state, or explicitly calls taskYIELD().  This differs from\r
+       previous versions, where a context switch would also occur when implicitly\r
+       moving a higher priority task out of the Blocked state.  For example,\r
+       previously, WHEN PREEMPTION WAS TURNED OFF, if task A unblocks task B by\r
+       writing to a queue, then the scheduler would switch to the higher priority\r
+       task.  Now, WHEN PREEMPTION IS TURNED OFF, if task A unblocks task B by\r
+       writing to a queue, task B will not start running until task A enters the\r
+       Blocked state or task A calls taskYIELD().  [If configUSE_PREEMPTION is not\r
+       set to 0, so the normal pre-emptive scheduler is being used, then task B\r
+       will start running immediately that it is moved out of the Blocked state].\r
+\r
+       Other changes:\r
+\r
+       + Added a port layer and a demo project for the new PIC32MZ architecture.\r
+       + Update the PIC32MX port layer to re-introduce some ehb instructions that\r
+         were previously removed, add the ability to catch interrupt stack\r
+         overflows (previously only task stack overflows were trapped), and also\r
+         add the ability to catch an application task incorrectly attempting to\r
+         return from its implementing function.\r
+       + Make dramatic improvements to the performance of the Win32 simulator port\r
+         layer.\r
+       + Ensure tasks that are blocked indefinitely report their state as Blocked\r
+         instead of Suspended.\r
+       + Slight improvement to the Cortex-M4F port layers where previously one\r
+         register was inadvertently being saved twice.\r
+       + Introduce the xSemaphoreCreateBinary() API function to ensure consistency\r
+         in the semantics of how each semaphore type is created.  It is no longer\r
+         recommended to use vSemaphoreCreateBinary() (the version prefixed with a\r
+         'v'), although it will remain in the code for backward compatibility.\r
+       + Update the Cortex-M0 port layers to allow the scheduler to be started\r
+         without using the SVC handler.\r
+       + Added a build configuration to the PIC32MX MPLAB X demo project that\r
+         targets the PIC32 USB II starter kit.  Previously all the build\r
+         configurations required the Explorer 16 hardware.\r
+       + Some of the standard demo tasks have been updated to ensure they execute\r
+         correctly with the updated co-operative scheduling behaviour.\r
+       + Added comprehensive demo for the Atmel SAM4E, including use of\r
+         FreeRTOS+UDP, FreeRTOS+FAT SL and FreeRTOS+CLI.\r
+\r
+       FreeRTOS+ Changes:\r
+\r
+       + Minor maintenance on FreeRTOS+UDP.\r
+\r
+Changes between V7.5.2 and V7.5.3 released October 14 2013\r
+\r
+       Kernel changes:\r
+\r
+       + Prior to V7.5.x yields requested from the tick hook would occur in the\r
+         same tick interrupt - revert to that original behaviour.\r
+       + New API function uxQueueSpacesAvailable().\r
+       + Introduced the prvTaskExitError() function to Cortex-M0, Cortex-M3/4\r
+         and Cortex-M4F ports.  prvTaskExitError() is used to trap tasks that\r
+         attempt to return from their implementing functions (tasks should call\r
+         vTaskDelete( NULL ); if they want to exit).\r
+       + The Cortex-M0 version of portSET_INTERRUPT_MASK_FROM_ISR and\r
+         portCLEAR_INTERRUPT_MASK_FROM_ISR are now fully nestable.\r
+       + Improved behaviour and robustness of the default Cortex-M tickless idle\r
+         behaviour.\r
+       + Add workaround for silicon errata PMU_CM001 in Infineon XMC4000 devices to\r
+         all Cortex-M4F ports.\r
+       + Add Cortex-M0 port for Keil.\r
+       + Updated Cortus port.\r
+       + Ensure _impure_ptr is initialised before the scheduler is started.\r
+         Previously it was not set until the first context switch.\r
+\r
+       FreeRTOS+ changes:\r
+\r
+       + Update FreeRTOS+UDP to V1.0.1 - including direct integration of the\r
+         FreeRTOS+Nabto task, improvements to the DHCP behaviour, and a correction\r
+         to the test that prevents the network event hook being called on the first\r
+         network down event.  The FreeRTOS+UDP change history is maintained\r
+         separately.\r
+       + Correct the __NVIC_PRIO_BITS setting in the LPC18xx.h header files\r
+         provided in the NXP CMSIS library, then update the interrupts used by the\r
+         LPC18xx demos accordingly.\r
+       + Replace double quotes (") with single quotes (') in FreeRTOS+CLI help\r
+         strings to ensure the strings can be used with the JSON descriptions used\r
+         in the FreeRTOS+Nabto demos.\r
+\r
+       Demo and miscellaneous changes:\r
+\r
+       + Added demo for the Atmel SAMD20 Cortex-M0+.  The demo includes\r
+         FreeRTOS+CLI\r
+       + Added a demo for the Infineon Cortex-M0 that can be built with the IAR\r
+         Keil and GCC tools.\r
+       + Updated the Infineon XMC4000 demos for IAR, Keil, GCC and Tasking tools,\r
+         with additional build configurations to directly support the XMC4200 and\r
+         XMC4400 devices, in addition to the previously supported XMC4500.\r
+       + Updated the demo application.\r
+       + Added additional trace macros traceMALLOC and traceFREE to track heap\r
+         usage.\r
+\r
+Changes between V7.5.0 and V7.5.2 released July 24 2013\r
+\r
+       V7.5.2 makes the new Cortex-M vPortCheckInterruptPriority() function\r
+       compatible with the STM32 standard peripheral driver library, and adds\r
+       an extra critical section to the default low power tickless mode\r
+       implementation.  Only users of the STM32 peripheral library or the default\r
+       tickless implementation need update from version 7.5.0.\r
+\r
+Changes between V7.4.2 and V7.5.0 released July 19 2013\r
+\r
+       V7.5.0 is a major upgrade that includes multiple scheduling and efficiency\r
+       improvements, and some new API functions.\r
+\r
+       Compatibility information for FreeRTOS users:\r
+         FreeRTOS V7.5.0 is backward compatible with FreeRTOS V7.4.0 with one\r
+         exception; the vTaskList() and vTaskGetRunTimeStats() functions are now\r
+         considered legacy, having been replaced by the single uxTaskGetSystemState()\r
+         function.  configUSE_STATS_FORMATTING_FUNCTIONS must be set to 1 in\r
+         FreeRTOSConfig.h for vTaskList() and vTaskGetRunTimeStats() to be\r
+         available.\r
+\r
+       Compatibility information for FreeRTOS port writers:\r
+         vTaskIncrementTick() is now called xTaskIncrementTick() (because it now\r
+         returns a value).\r
+\r
+       Headline changes:\r
+\r
+       + Multiple scheduling and efficiency improvements.\r
+       + Core kernel files now pass PC-Lint V8 static checking without outputting\r
+         any warnings (information on the test conditions will follow).\r
+\r
+       New API functions:\r
+\r
+       + uxTaskGetSystemState() http://www.freertos.org/uxTaskGetSystemState.html\r
+       + xQueueOverwrite() http://www.freertos.org/xQueueOverwrite.html\r
+       + xQueueOverwriteFromISR()\r
+       + xQueuePeekFromISR()\r
+\r
+       The following ports and demos, which were previously available separately,\r
+       are now incorporated into the main FreeRTOS zip file download:\r
+\r
+       + ARM Cortex-A9 IAR\r
+       + ARM Cortex-A9 ARM compiler\r
+       + Renesas RZ\r
+       + Microsemi SmartFusion2\r
+\r
+       New FreeRTOSConfig.h settings\r
+       http://shop.freertos.org/FreeRTOS_API_and_Configuration_Reference_s/1822.htm\r
+\r
+       + configUSE_TIME_SLICING\r
+       + configUSE_NEWLIB_REENTRANT\r
+       + configUSE_STATS_FORMATTING_FUNCTIONS\r
+       + configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS\r
+\r
+       Other changes:\r
+\r
+       + (MPU port only) The configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS\r
+         options provides a mechanism that allows application writers to execute\r
+         certain functions in privileged mode even when a task is running in user\r
+         mode.\r
+       + Ports that support interrupt nesting now include a configASSERT() that\r
+         will trigger if an interrupt safe FreeRTOS function is called from an\r
+         interrupt that has a priority designated as above the maximum system/API\r
+         call interrupt priority.\r
+       + The included FreeRTOS+Trace recorder code has been updated to the latest\r
+         version, and the demo applications that use the trace recorder code have\r
+         been updated accordingly.\r
+       + The FreeRTOS Windows Simulator (MSVC version only) has been updated to\r
+         include a new basic 'blinky' build option in addition to the original\r
+         comprehensive build option.\r
+       + Improve RAM usage efficiency of heap_4.c and heap_2.c.\r
+       + Prevent heap_4.c from attempting to free memory blocks that were not\r
+         allocated by heap_4.c, or have already been freed.\r
+       + As FreeRTOS now comes with FreeRTOS+FAT SL (donated by HCC) the Chan FATfs\r
+         files have been removed from FreeRTOS/Demo/Common.\r
+       + Fix build error when R4 port is build in co-operative mode.\r
+       + Multiple port and demo application maintenance activities.\r
+\r
+Changes between V7.4.1 and V7.4.2 released May 1 2013\r
+\r
+       NOTE: There are no changes in the FreeRTOS kernel between V7.4.1 and V7.4.2\r
+\r
+       + Added FreeRTOS+FAT SL source code and demo project.  The demo project\r
+         runs in the FreeRTOS Windows simulator for easy and hardware independent\r
+         experimentation and evaluation.  See http://www.FreeRTOS.org/fat_sl\r
+\r
+Changes between V7.4.0 and V7.4.1 released April 18 2013\r
+\r
+       + To ensure strict conformance with the spec and ensure compatibility with\r
+         future chips data and instruction barrier instructions have been added to\r
+         the yield macros of Cortex-M and Cortex-R port layers.  For efficiency\r
+         the Cortex-M port layer "yield" and "yield" from ISR are now implemented\r
+         separately as the barrier instructions are not required in the ISR case.\r
+       + Added FreeRTOS+UDP into main download.\r
+       + Reorganised the FreeRTOS+ directory so it now matches the FreeRTOS\r
+         directory with Source and Demo subdirectories.\r
+       + Implemented the Berkeley sockets select() function in FreeRTOS+UDP.\r
+       + Changed (unsigned) casting in calls to standard library functions with\r
+         (size_t) casting.\r
+       + Added the Atmel SAM4L and Renesas RX100 demos that demonstrates the\r
+         tickless (tick suppression) low power FreeRTOS features.\r
+       + Add a new RL78 IAR demo that targets numerous new RL78 chips and\r
+         evaluation boards.\r
+       + Adjusted stack alignment on RX200 ports to ensure an assert was not\r
+         falsely triggered when configASSERT() is defined.\r
+       + Updated the Cortex_M4F_Infineon_XMC4500_IAR demo to build with the latest\r
+         version of EWARM.\r
+       + Corrected header comments in the het.c and het.h files (RM48/TMS570 demo).\r
+\r
+\r
+Changes between V7.3.0 and V7.4.0 released February 20 2013\r
+\r
+       + New feature:  Queue sets.  See:\r
+         http://www.FreeRTOS.org/Pend-on-multiple-rtos-objects.html\r
+       + Overhauled the default tickless idle mode implementation provided with the\r
+         ARM Cortex-M3 port layers.\r
+       + Enhanced tickless support in the core kernel code with the introduction of\r
+         the configEXPECTED_IDLE_TIME_BEFORE_SLEEP macro and the\r
+         eTaskConfirmSleepModeStatus() function.\r
+       + Added the QueueSet.c common demo/test file.  Several demo applications\r
+         have been updated to use the new demo/test tasks.\r
+       + Removed reliance on the PLIB libraries from the MPLAB PIC32 port layer and\r
+         demo applications.\r
+       + Added the FreeRTOS+Trace recorder code to the MSVC Win32 demo.\r
+       + Renamed eTaskStateGet() to eTaskGetState() for consistency, and added a\r
+         pre-processor macro for backward compatibility with the previous name.\r
+       + Updated functions implemented in the core queue.c source file to allow\r
+         queue.h to be included from the .c file directly (this prevents compiler\r
+         warnings that were generated by some compilers).\r
+       + Updated the CCS Cortex-R4 port layer to replace the CLZ assembler function\r
+         with the CLZ compiler intrinsic that is provided by the latest versions of\r
+         the CCS ARM compiler.\r
+       + Updated all heap_x.c implementations to replace the structure that was\r
+         used to ensure the start of the heap was aligned with a more portable\r
+         direct C code implementation.\r
+       + Added support for PIC24 devices that include EDS.\r
+       + Minor optimisations to the PIC32 port layer.\r
+       + Minor changes to tasks.c that allow the state viewer plug-ins to display\r
+         additional information.\r
+       + Bug fix:  Update prvProcessReceivedCommands() in timers.c to remove an\r
+         issue that could occur if the priority of the timer daemon task was set\r
+         below the priority of tasks that used timer services.\r
+       + Update the FreeRTOS+Trace recorder code to the latest version.\r
+\r
+Changes between V7.2.0 and V7.3.0 released October 31 2012\r
+\r
+       + Added ability to override the default scheduler task selection mechanism\r
+         with implementations that make use of architecture specific instructions.\r
+       + Added ability to suppress tick interrupts during idle time, and in so\r
+         doing, provide the ability to make use of architecture specific low power\r
+         functionality.\r
+       + Added the portSUPPRESS_TICKS_AND_SLEEP() macro and vTaskStepTick() helper\r
+         function.\r
+       + Added the configSYSTICK_CLOCK_HZ configuration constant.\r
+       + Reworked the Cortex-M3 and Cortex-M4F port layers for GCC, Keil and IAR to\r
+         directly support basic power saving functionality.\r
+       + Added hooks to allow basic power saving to be augmented in the application\r
+         by making use of chip specific functionality.\r
+       + Minor change to allow mutex type semaphores to be used from interrupts\r
+         (which would not be a normal usage model for a mutex).\r
+       + Change the behaviour of the interrupt safe interrupt mask save and restore\r
+         macros in the Cortex-M ports.  The save macro now returns the previous\r
+         mask value.  The restore macro now uses the previous mask value.  These\r
+         changes are not necessary for the kernel's own implementation, and are\r
+         made purely because the macros were being used by application writers.\r
+       + Added eTaskStateGet() API function.\r
+       + Added port specific optimisations to the PIC32 port layer, and updated the\r
+         PIC32 demo applications to make use of this new feature.\r
+       + Added port specific optimisations to the Win32 simulator port.\r
+       + Added new ports and demo applications for the TI Hercules RM48 and TMS570\r
+         safety microcontrollers.\r
+       + Added SAM3 demos targeting the ATSAM3S-EK2 and ATSAM3X-EK evaluation\r
+         boards.\r
+       + Updated the PIC32 MPLAB X project to manually set the compiler include\r
+         paths instead of using the IDE entry box following reports that the\r
+         include paths were somehow being deleted.\r
+       + Improved character handling in FreeRTOS+CLI.\r
+\r
+Changes between V7.1.1 and V7.2.0 released 14 August 2012\r
+\r
+       FreeRTOS V7.2.0 is backward compatible with FreeRTOS V7.1.2.\r
+\r
+       + Added a FreeRTOS+ sub-directory.  The directory contains some FreeRTOS+\r
+         source code, and example projects that use the FreeRTOS Win32 simulator.\r
+       + Added a new example heap allocation implementation (heap_4.c) that\r
+         includes memory block coalescence.\r
+       + Added a demo that targets the Atmel SAM4S Cortex-M4 based microcontroller.\r
+         The demo is preconfigured to build using the free Atmel Studio 6 IDE and\r
+         GCC compiler.\r
+       + Added xSemaphoreTakeFromISR() implementation.\r
+       + The last parameter in ISR safe FreeRTOS queue and semaphore functions\r
+         (xHigherPriorityTaskWoken) is now optional and can be set to NULL if it\r
+         is not required.\r
+       + Update the IAR and MSP430X ports to clear all lower power mode bits before\r
+         exiting the tick interrupt [bug fix].\r
+       + Allow xQueueReset() to be used, even when the queues event lists are not\r
+         empty.\r
+       + Added a vQueueDelete() handler for the FreeRTOS MPU port (this was\r
+         previously missing).\r
+       + Updated the vPortSVCHandler() functions in the FreeRTOS MPU port layer to\r
+         ensure it compiles with the latest ARM GCC compilers from Linaro.\r
+       + Updated the prvReadGP() function in the NIOS II port to ensure the compiler\r
+         can choose any register for the functions parameter (required at high\r
+         compiler optimisation levels).\r
+       + Add #error macros into the Keil and IAR Cortex-M ports to ensure they\r
+         cannot be built if the user has set configMAX_SYSCALL_INTERRUPT_PRIORITY\r
+         to 0.\r
+       + Added comments in the FreeRTOSConfig.h files associated with Cortex-M3 and\r
+         Cortex-M4 demos stating that the configMAX_SYSCALL_INTERRUPT_PRIORITY\r
+         parameter must not be set to 0.\r
+       + Introduce new INCLUDE_xQueueGetMutexHolder configuration constant\r
+         (defaulted to 0).\r
+       + Added two new list handling macros - for internal use only in upcoming new\r
+         products.\r
+       + Removed all mention of the legacy vTaskStartTrace and ulTaskEndTrace\r
+         macros.  FreeRTOS+Trace supersedes the legacy trace.\r
+       + Added a configASSERT() into the vPortFree() function in heap_1.c as it is\r
+         invalid for the function to be called.\r
+       + Made the xRxLock and xTxLock members of the queue structure volatile.\r
+         This is probably not necessary, and is included as a precautionary\r
+         measure.\r
+       + Modify the assert() that checks to see if the priority passed into an\r
+         xTaskCreate() function is within valid bounds to permit the assert to be\r
+         used in the FreeRTOS MPU port.\r
+       + The software timer service (daemon) task is now created in a way that\r
+         to ensure compatibility with FreeRTOS MPU.\r
+\r
+Changes between V7.1.0 and V7.1.1 released May 1 2012\r
+\r
+       New ports:\r
+\r
+       The following ports are brand new:\r
+       + Cortex-M3 Tasking\r
+\r
+       The following ports have been available as separate downloads for a number\r
+       of months, but are now included in the main FreeRTOS download.\r
+       + Cortex-M0 IAR\r
+       + Cortex-M0 GCC\r
+       + Cortex-M4F GCC (with full floating point support)\r
+\r
+\r
+       New demos:\r
+\r
+       The following demos are brand new:\r
+       + Renesas RX63N RDK (Renesas compiler)\r
+\r
+       The following demos have been available as separate downloads for a number\r
+       of months, but are now included in the main FreeRTOS download.\r
+       + NXP LPC1114 GCC/LPCXpresso\r
+       + ST STM32F0518 IAR\r
+       + Infineon XMC4500 GCC/Atollic\r
+       + Infineon XMC4500 IAR\r
+       + Infineon XMC4500 Keil\r
+       + Infineon XMC4500 Tasking\r
+\r
+\r
+       Kernel miscellaneous / maintenance:\r
+\r
+       + Introduced the portSETUP_TCB() macro to remove the requirement for the\r
+         Windows simulator to use the traceTASK_CREATE() macro, leaving the trace\r
+         macro available for use by FreeRTOS+Trace (http://www.FreeRTOS.org/trace).\r
+       + Added a new trace macro, traceMOVE_TASK_TO_READY_STATE(), to allow future\r
+         FreeRTOS+Trace versions to provide even more information to users.\r
+       + Updated the FreeRTOS MPU port to be correct for changes that were\r
+         introduced in FreeRTOS V7.1.0.\r
+       + Introduced the xQueueReset() API function.\r
+       + Introduced the xSemaphoreGetMutexHolder() API function.\r
+       + Tidy up various port implementations to add the static key word where\r
+         appropriate, and remove obsolete code.\r
+       + Slight change to the initial stack frame given to the RX600 ports to allow\r
+         them to be used in the Eclipse based E2Studio IDE without confusing GDB.\r
+       + Correct the alignment given to the initial stack of Cortex-M4F tasks.\r
+       + Added a NOP following each DINT instruction on MSP430 devices for strict\r
+         conformance with the instructions on using DINT.\r
+       + Changed the implementation of thread deletes in the Win32 port to prevent\r
+         the port making use of the traceTASK_DELETE() trace macros - leaving this\r
+         macro free for use by FreeRTOS+Trace.\r
+       + Made some benign changes to the RX600 Renesas compiler port layer to\r
+         ensure the code can be built to a library without essential code being\r
+         removed by the linker.\r
+       + Reverted the change in the name of the uxTaskNumber variable made in\r
+         V7.1.0 as it broke the IAR plug-in.\r
+\r
+\r
+       Demo miscellaneous / maintenance:\r
+\r
+       + The command interpreter has now been formally released as FreeRTOS+CLI,\r
+         and been moved out of the main FreeRTOS download, to instead be available\r
+         from the FreeRTOS+ Ecosystem site http://www.FreeRTOS.org/plus.\r
+       + flash_timer.c/h has been added to the list of standard demo tasks.  This\r
+         performs the same functionality as the flash.c tasks, but using software\r
+         timers in place of tasks.\r
+       + Upgraded the PIC32 demo as follows:  Changes to how the library functions\r
+         are called necessitated by the new compiler version, addition of MPLAB X\r
+         project with PIC32MX360, PIC32MX460 and PIC32MX795 configurations,\r
+         addition of simply blinky demo, updated FreeRTOSConfig.h to include more\r
+         parameters, addition of hook function stubs.\r
+       + The MSP430X IAR and CCS demos have been updated to ensure the power\r
+         settings are correct for the configured CPU frequency.\r
+       + Rowley CrossWorks projects have been updated to correct the "multiple\r
+         definition of ..." warnings introduced when the toolchain was updated.\r
+       + Updated various FreeRTOSConfig.h header files associated with projects\r
+         that build with Eclipse to include a #error statement informing the user\r
+         that the CreateProjectDirectoryStructure.bat batch file needs to be\r
+         executed before the projects can be opened.\r
+       + Renamed directories that included "CCS4" in their name to remove the '4'\r
+         and instead just be "CCS".  This is because the demo was updated and\r
+         tested to also work with later Code Composer Studio versions.\r
+       + Updated the TCP/IP periodic timer frequency in numerous uIP demos to be\r
+         50ms instead of 500ms.\r
+\r
+Changes between V7.0.2 and V7.1.0 released December 13 2011\r
+\r
+       New ports:\r
+\r
+       + Cortex-M4F IAR port.\r
+       + Cortex-M4F Keil/RVDS port.\r
+       + TriCore GCC port.\r
+\r
+       New demos:\r
+\r
+       + NXP LPC4350 using the Keil MDK, and demonstrated on a Hitex development\r
+         board.\r
+       + ST STM32F407 using the IAR Embedded Workbench for ARM, and demonstrated on\r
+         the IAR STM32F407ZG-SK starter kit.\r
+       + Infineon TriCore TC1782, using the GCC compiler, demonstrated on the\r
+         TriBoard TC1782 evaluation board.\r
+       + Renesas RX630, using the Renesas compiler and HEW, demonstrated on an\r
+         RX630 RSK (Renesas Starter Kit).\r
+\r
+       Miscellaneous / maintenance:\r
+\r
+       + Removed all calls to printf() from the K60/IAR Kinetis demo so the project\r
+         can execute stand alone - without being connected to the debugger.\r
+       + Completed the command interpreter framework.  Command handlers now receive\r
+         the entire command string, giving them direct access to parameters.\r
+         Utility functions are provided to check the number of parameters, and\r
+         return parameter sub-strings.\r
+       + The previously documented fix for the bug in xTaskResumeFromISR() that\r
+         effected (only) ports supporting interrupt nesting has now been\r
+         incorporated into the main release.\r
+       + The portALIGNMENT_ASSERT_pxCurrentTCB() definition has been added to allow\r
+         specific ports to skip the second stack alignment check when a task is\r
+         created.  This is because the second check is not appropriate for some\r
+         ports - including the new TriCore port where the checked pointer does not\r
+         actually point to a stack.\r
+       + The portCLEAN_UP_TCB() macro has been added to allow port specific clean\r
+         up when a task is deleted - again this is required by the TriCore port.\r
+       + Various other minor changes to ensure warning free builds on a growing\r
+         number of microcontroller and toolchain platforms.  This includes a\r
+         (benign) correction to the prototype of the\r
+         vApplicationStackOverflowHook() definition found in lots of recent demos.\r
+\r
+       Trace system:\r
+\r
+       + The legacy trace mechanism has been completely removed - it has been\r
+         obsolete for the years since the trace macros were introduced.  The\r
+         configuration constant configUSE_TRACE_FACILITY is now used to optionally\r
+         include additional queue and task information.  The additional information\r
+         is intended to make the trace mechanism more generic, and allow the trace\r
+         output to provide more information.  When configUSE_TRACE_FACILITY is set\r
+         to 1:\r
+               - the queue structure includes an additional member to hold the queue\r
+                 type, which can be base, mutex, counting semaphore, binary semaphore\r
+                 or recursive mutex.\r
+               - the queue structure includes an additional member to hold a queue\r
+                 number.  A trace tool can set and query the queue number for its own\r
+                 purposes.  The kernel does not use the queue number itself.\r
+               - the TCB structure includes an additional member to hold a task number\r
+                 number.  A trace tool can set and query the task number for its own\r
+                 purposes.  The kernel does not use the task number itself.\r
+       + Queues and all types of semaphores are now automatically allocated their\r
+         type as they are created.\r
+       + Added two new trace macros - traceTASK_PRIORITY_INHERIT() and\r
+         traskTASK_PRIORITY_DISINHERIT().\r
+       + Updated the traceQUEUE_CREATE_FAILED() macro to take a parameter that\r
+         indicates the type of queue, mutex, or semaphore that failed to be\r
+         created.\r
+       + The position from which traceCREATE_MUTEX() is called has been moved from\r
+         after the call to xQueueGenericSend() [within the same function] to before\r
+         the call.  This ensures the trace events occur in the correct order.\r
+       + The value passed into tracePRIORITY_SET() has been corrected for the case\r
+         where vTaskPrioritySet() is called with a null parameter.\r
+\r
+Changes between V7.0.1 and V7.0.2 released September 20 2011\r
+\r
+       New ports:\r
+\r
+       + The official FreeRTOS Renesas RX200 port and demo application have been\r
+         incorporated into the main FreeRTOS zip file download.\r
+       + The official FreeRTOS Renesas RL78 port and demo application have been\r
+         incorporated into the main FreeRTOS zip file download.\r
+       + The official FreeRTOS Freescale Kinetis K60 tower demo application has\r
+         been incorporated into the main FreeRTOS zip file download.  This includes\r
+         an embedded web server example.\r
+       + A new Microblaze V8 port layer has been created to replace the older, now\r
+         deprecated, port layer.  The V8 port supports V8.x of the Microblaze IP,\r
+         including exceptions, caches, and the floating point unit.  A new\r
+         Microblaze demo has also been added to demonstrate the new Microblaze V8\r
+         port layer.  The demo application was created using V13.1 of the Xilinx\r
+         EDK, and includes a basic embedded web server that uses lwIP V1.4.0.\r
+       + The official FreeRTOS Fujitsu FM3 MB9A310 demo application has been\r
+         incorporated into the main FreeRTOS zip file download.  Projects are\r
+         provided for both the IAR and Keil toolchains.\r
+\r
+\r
+       API additions:\r
+\r
+       + xTaskGetIdleTaskHandle() has been added.\r
+       + xTaskGetTimerDaemonTaskHandle() has been added.\r
+       + pcTaskGetTaskName() has been added.\r
+       + vSemaphoreDelete() macro has been added to make it obvious how to delete\r
+         a semaphore.  In previous versions vQueueDelete() had to be used.\r
+       + vTaskCleanUpResources() has been removed.  It has been obsolete for a\r
+         while.\r
+       + portPOINTER_SIZE_TYPE has been introduced to prevent compiler warnings\r
+         being generated when the size of a pointer does not match the size of\r
+         the stack type.  This will (has already) be used in new ports, but will\r
+         not be retrofitted to existing ports until the existing port itself is\r
+         updated.\r
+\r
+       Other updates and news:\r
+\r
+       + The core files have all been modified to tighten the coding standard even\r
+         further.  These are style, not functional changes.\r
+       + All ARM7 port layers have been slightly modified to prevent erroneous\r
+         assert() failures when tasks are created and configASSERT() is defined.\r
+       + All ARM IAR projects have been updated to build with the latest V6.2.x\r
+         versions of the IAR Embedded Workbench for ARM tools (EWARM).  This was\r
+         necessary due to a change in the way EWARM uses the CMSIS libraries.\r
+       + The PIC32 port layer has been updated in preparation for V2 of the C32\r
+         compiler.\r
+       + The old Virtex-4 Microblaze demo has been marked as deprecated.  Please\r
+         use the brand new Spartan-6 port and demo in its place.\r
+       + The bones of a new generic command interpreter is located in\r
+         FreeRTOS/Demo/Common/Utils/CommandInterpreter.c.  This is still a work in\r
+         progress, and not documented.  It is however already in use.  It will be\r
+         documented in full when the projects that are already using it are\r
+         completed.\r
+       + A couple of new standard demos have been included.  First, a version of\r
+         flop.c called sp_flop.c.  This is similar to flop.c, but uses single\r
+         precision floats in place of double precision doubles.  This allows the\r
+         for testing ports to processors that have only single precision floating\r
+         point units, and revert to using emulated calculations whenever a double\r
+         is used.  Second, comtest_strings.c has been included to allow the test\r
+         of UART drivers when an entire string is transmitted at once.  The\r
+         previous comtest.c only used single character transmission and reception.\r
+       + lwIP V1.4.0 is now included in the FreeRTOS/Demo/Common directory, and\r
+         used by a couple of new demos.\r
+\r
+Changes between V7.0.0 and V7.0.1 released May 13 2011\r
+\r
+       + Added a Fujitsu FM3 demo application for both the IAR and Keil tool\r
+         chains.\r
+       + Added a SmartFusion demo application for all of the IAR, Keil and\r
+         SoftConsole (GCC/Eclipse) tool chains.\r
+       + Updated the RX600 port and demo applications to take into account the\r
+         different semantics required when using the latest (V1.0.2.0) version of\r
+         the Renesas compiler.\r
+       + Modified the RX600 Ethernet driver slightly to make it more robust under\r
+         heavy load, and updated the uIP handling task to make use of the FreeRTOS\r
+         software timers.\r
+       + Slightly changed the PIC32 port layer to move an ehb instruction in line\r
+         with the recommendations of the MIPS core manual, and ensure 8 byte stack\r
+         alignment is truly always obtained.\r
+       + Changed the behaviour when tasks are suspended before the scheduler has\r
+         been started.  Before, there needed to be at least one task that was not\r
+         in the suspended state.  This is no longer the case.\r
+\r
+Changes between V6.1.1 and V7.0.0 released April 8 2011\r
+\r
+       FreeRTOS V7.0.0 is backward compatible with FreeRTOS V6.x.x\r
+\r
+       Main changes:\r
+\r
+       + Introduced a new software timer implementation.\r
+       + Introduced a new common demo application file to exercise the new timer\r
+         implementation.\r
+       + Updated the Win32/MSVC simulator project to include the new software timer\r
+         demo tasks and software timer tick hook test.  Much simpler software timer\r
+         demonstrations are included in the demo projects for both of the new ports\r
+         (MSP430X with CCS4 and STM32 with TrueStudio).\r
+       + Various enhancements to the kernel implementation in tasks.c.  These are\r
+         transparent to users and do not effect the pre-existing API.\r
+       + Added calls to configASSERT() within the kernel code.  configASSERT() is\r
+         functionally equivalent to the standard C assert() macro, but does not\r
+         rely on the compiler providing assert.h.\r
+\r
+       Other changes:\r
+\r
+       + Updated the MSP430X IAR port and demo project to include support for the\r
+         medium memory model.\r
+       + Added a demo project for the MSP430X that targets the MSP430X Discovery\r
+         board and uses the Code Composer Studio 4 tools.  This demo includes use\r
+         of the new software timer implementation.\r
+       + Added an STM32F100RB demo project that targets the STM32 Discovery Board\r
+         and uses the TrueStudio Eclipse based IDE from Atollic.\r
+       + Removed some compiler warnings from the PSoC demo application.\r
+       + Updated the PIC32 port layer to ensure the\r
+         configMAX_SYSCALL_INTERRUPT_PRIORITY constant works as expected no matter\r
+         what its value is (within the valid range set by the microcontroller\r
+         kernel).\r
+       + Updated the PIC24, dsPIC and PIC32 projects so they work with the latest\r
+         MPLAB compiler versions from Microchip.\r
+       + Various cosmetic changes to prepare for a standards compliance statement\r
+         that will be published after the software release.\r
+\r
+\r
+Changes between V6.1.0 and V6.1.1 released January 14 2011\r
+\r
+       + Added two new Windows simulator ports.  One uses the free Microsoft Visual\r
+         Studio 2010 express edition, and the other the free MingW/Eclipse\r
+         environment.  Demo projects are provided for both.\r
+       + Added three demo projects for the PSoC 5 (CYAC5588).  These are for the\r
+         GCC, Keil, and RVDS build tools, and all use the PSoC Creator IDE.\r
+       + Added a demo for the low power STM32L152 microcontroller using the IAR\r
+         Embedded Workbench.\r
+       + Added a new port for the MSP430X core using the IAR Embedded Workbench.\r
+       + Updated all the RX62N demo projects that target the Renesas Demonstration\r
+         Kit (RDK) to take into account the revered LED wiring on later hardware\r
+         revisions, and the new J-Link debug interface DLL.\r
+       + Updated all the RX62N demo projects so the IO page served by the example\r
+         embedded web server works with all web browsers.\r
+       + Updated the Red Suite projects to work with the up coming Red Suite\r
+         release, and to use a more recent version of the CMSIS libraries.\r
+       + Added the traceTAKE_MUTEX_RECURSIVE_FAILED() trace macro.\r
+       + Removed the (pointless) parameter from the traceTASK_CREATE_FAILED()\r
+         trace macro.\r
+       + Introduced the portALT_GET_RUN_TIME_COUNTER_VALUE() macro to compliment\r
+         the already existing portGET_RUN_TIME_COUNTER_VALUE().  This allows for\r
+         more flexibility in how the time base for the run time statistics feature\r
+         can be implemented.\r
+       + Added a "cpsie i" instruction before the "svc 0" instruction used to start\r
+         the scheduler in each of the Cortex M3 ports.  This is to ensure that\r
+         interrupts are globally enabled prior to the "svc 0" instruction being\r
+         executed in cases where interrupts are left disabled by the C start up\r
+         code.\r
+       + Slight optimisation in the run time stats calculation.\r
+\r
+Changes between V6.0.5 and V6.1.0 released October 6 2010\r
+\r
+       + Added xTaskGetTickCountFromISR() function.\r
+       + Modified vTaskSuspend() to allow tasks that have just been created to be\r
+         immediately suspended even when the kernel has not been started.  This\r
+         allows them to effectively start in the Suspended state - a feature that\r
+         has been asked for on numerous occasions to assist with initialisation\r
+         procedures.\r
+       + Added ports for the Renesas RX62N using IAR, GCC and Renesas tool suites.\r
+       + Added a STM32F103 demo application that uses the Rowley tools.\r
+       + Under specific conditions xFreeBytesRemaining within heap_2.c could end up\r
+         with an incorrect     value.  This has been fixed.\r
+       + xTaskCreateGeneric() has a parameter that can be used to pass the handle\r
+         of the task just created out to the calling task.  The assignment to this\r
+         parameter has been moved to ensure it is assigned prior to the newly\r
+         created having any possibility of executing.  This takes into account the\r
+         case where the assignment is made to a global variable that is accessed by\r
+         the newly created task.\r
+       + Fixed some build time compiler warnings in various FreeTCPIP (based on\r
+         uIP) files.\r
+       + Fixed some build time compiler warnings in Demo/Common/Minimal/IntQueue.c.\r
+\r
+Changes between V6.0.4 and V6.0.5 released May 17 2010\r
+\r
+       + Added port and demo application for the Cortus APS3 processor.\r
+\r
+Changes between V6.0.3 and V6.0.4 released March 14 2010\r
+\r
+       + All the contributed files that were located in the Demo/Unsupported_Demos\r
+         directory have been removed.  These files are instead now available in the\r
+         new  Community Contributions section of the FreeRTOS website.  See\r
+         http://www.freertos.org/RTOS-contributed-ports.html\r
+       + The project file located in the Demo/CORTEX_STM32F107_GCC_Rowley directory\r
+         has been upgraded to use V2.x of the Rowley Crossworks STM32 support\r
+         package.\r
+       + An initial Energy Micro EFM32 demo has been included.  This will be\r
+         updated over the coming months to make better use of the low power modes\r
+         the EFM32 provides.\r
+\r
+Changes between V6.0.2 and V6.0.3 released February 26 2010\r
+\r
+       + SuperH SH7216 (SH2A-FPU) port and demo application added.\r
+       + Slight modification made to the default implementation of\r
+         pvPortMallocAligned() and vPortFreeAligned() macros so by default they\r
+         just call pvPortMalloc() and vPortFree().  The macros are only needed to\r
+         be defined when a memory protection unit (MPU) is being used - and then\r
+         only depending on other configuration settings.\r
+\r
+Changes between V6.0.1 and V6.0.2 released January 9th 2010\r
+\r
+       + Changed all GCC ARM 7 ports to use 0 as the SWI instruction parameter.\r
+         Previously the parameter was blank and therefore only an implicit 0 but\r
+         newer GCC releases do not permit this.\r
+       + Updated IAR SAM7S and SAM7X ports to work with IAR V5.40.\r
+       + Changed the stack alignment requirement for PIC32 from 4 bytes to 8 bytes.\r
+       + Updated prvListTaskWithinSingleList() is it works on processors where the\r
+         stack grows up from low memory.\r
+       + Corrected some comments.\r
+       + Updated the startup file for the RVDS LPC21xx demo.\r
+\r
+Changes between V6.0.0 and V6.0.1 released November 15th 2009\r
+\r
+       + Altered pxPortInitialiseStack() for all Cortex-M3 ports to ensure the\r
+         stack pointer is where the compiler expects it to be when a task first\r
+         starts executing.\r
+\r
+         The following minor changes only effect the Cortex-M3 MPU port:\r
+\r
+       + portRESET_PRIVILEGE() assembly macro updated to include a clobber list.\r
+       + Added prototypes for all the privileged function wrappers to ensure no\r
+         compile time warnings are generated no matter what the warning level\r
+         setting.\r
+       + Corrected the name of portSVC_prvRaisePrivilege to\r
+         portSVC_RAISE_PRIVILEGE.\r
+       + Added conditional compilation into xTaskGenericCreate() to prevent some\r
+         compilers issuing warnings when portPRIVILEGE_BIT is defined as zero.\r
+\r
+\r
+Changes between V5.4.2 and V6.0.0 released October 16th 2009\r
+\r
+       FreeRTOS V6 is backward compatible with FreeRTOS V5.x.\r
+\r
+       Main changes:\r
+\r
+       + FreeRTOS V6 is the first version to include memory protection unit (MPU)\r
+         support.  Two ports now exist for the Cortex M3, the standard FreeRTOS\r
+         which does not include MPU support, and FreeRTOS-MPU which does.\r
+       + xTaskCreateRestricted() and vTaskAllocateMPURegions() API functions added\r
+         in support of FreeRTOS-MPU.\r
+       + Wording for the GPL exception has been (hopefully) clarified.  Also the\r
+         license.txt file included in the download has been fixed (the previous\r
+         version contained some corruption).\r
+\r
+       Other changes:\r
+\r
+       + New API function xPortGetFreeHeapSize() added to heap_1.c and heap_2.c.\r
+       + ARM7 GCC demo interrupt service routines wrappers have been modified to\r
+         call the C portion using an __asm statement.  This prevents the function\r
+         call being inlined at higher optimisation levels.\r
+       + ARM7 ports now automatically set the THUMB bit if necessary when\r
+         setting up the initial stack of a task - removing the need for\r
+         THUMB_INTERWORK to be defined.  This also allows THUMB mode and ARM mode\r
+         tasks to be mixed more easily.\r
+       + All ARM7/9 ports now have portBYTE_ALIGNMENT set to 8 by default.\r
+       + Various demo application project files have been updated to be up to date\r
+         with the latest IDE versions.\r
+       + The linker scripts used with command line GCC demos have been updated to\r
+         include an eh_frame section to allow their use with the latest Yagarto\r
+         release.  Likewise the demo makefiles have been updated to include\r
+         command line options to reduce or eliminate the eh_frame section all\r
+         together.\r
+       + The definition of portBYTE_ALIGNMENT_MASK has been moved out of the\r
+         various memory allocation files and into the common portable.h header\r
+         file.\r
+       + Removed unnecessary use of portLONG, portSHORT and portCHAR.\r
+       + Added LM3Sxxxx demo for Rowley CrossWorks.\r
+       + Posix simulator has been upgraded - see the corresponding WEB page on the\r
+         FreeRTOS.org site.\r
+\r
+\r
+Changes between V5.4.1 and V5.4.2 released August 9th 2009\r
+\r
+       + Added a new port and demo app for the Altera Nios2 soft core.\r
+       + Added LPC1768 demo for IAR.\r
+       + Added a USB CDC demo to all LPC1768 demos (Code Red, CrossWorks and IAR).\r
+       + Changed clock frequency of LPC1768 demos to 99MHz.\r
+\r
+Changes between V5.4.0 and V5.4.1 released July 25th 2009\r
+\r
+       + New hook function added.  vApplicationMallocFailedHook() is (optionally)\r
+         called if pvPortMalloc() returns NULL.\r
+       + Additional casting added to xTaskCheckForTimeOut().  This prevents\r
+         problems that can arise should configUSE_16_BIT_TICKS be set to 1 on a\r
+         32 bit architecture (which would probably be a mistake, anyway).\r
+       + Corrected the parameter passed to NVIC_SetPriority() to set the MAC\r
+         interrupt priority in both LPC1768 demos.\r
+       + Decreased the default setting of configMINIMAL_STACK_SIZE in the PIC32\r
+         demo application to ensure the heap space was not completely consumed\r
+         before the scheduler was started.\r
+\r
+Changes between V5.3.1 and V5.4.0 released July 13th 2009\r
+\r
+       + Added Virtex5 / PPC440 port and demos.\r
+       + Replaced the LPC1766 Red Suite demo with an LPC1768 Red Suite demo.  The\r
+         original demo was configured to use engineering samples of the CPU.  The\r
+         new demo has an improved Ethernet driver.\r
+       + Added LPC1768 Rowley demo with zero copy Ethernet driver.\r
+       + Reworked byte alignment code to ensure 8 byte alignment works correctly.\r
+       + Set configUSE_16_BIT_TICKS to 0 in the PPC405 demo projects.\r
+       + Changed the initial stack setup for the PPC405 to ensure the small data\r
+         area pointers are setup correctly.\r
+\r
+Changes between V5.3.0 and V5.3.1 released June 21st 2009\r
+\r
+       + Added ColdFire V1 MCF51CN128 port and WEB server demo.\r
+       + Added STM32 Connectivity Line STM32107 Cortex M3 WEB server demo.\r
+       + Changed the Cortex M3 port.c asm statements to __asm so it can be\r
+         compiled using Rowley CrossWorks V2 in its default configuration.\r
+       + Updated the Posix/Linux simulator contributed port.\r
+\r
+Changes between V5.2.0 and V5.3.0 released June 1st 2009\r
+\r
+       Main changes:\r
+\r
+       + Added new (optional) feature that gathers statistics on the amount of CPU\r
+         time used by each task.\r
+       + Added a new demo application for the Atmel AT91SAM3U Cortex-M3 based\r
+         microcontroller.\r
+       + Added a new demo application for the NXP LPC1766 Cortex-M3 based\r
+         microcontroller.\r
+       + Added a contributed port/demo that allows FreeRTOS to be 'simulated' in a\r
+         Linux environment.\r
+\r
+       Minor changes:\r
+       + Updated the Stellaris uIP WEB server demos to include the new run time\r
+         statistics gathering feature - and include a served WEB page that\r
+         presents the information in a tabular format.\r
+       + Added in the lwIP port layer for the Coldfire MCF52259.\r
+       + Updated the CrossWorks LPC2368 WEB server to include an image in the\r
+         served content.\r
+       + Changed some of the timing in the initialisation of the LPC2368 MAC to\r
+         permit its use on all part revisions.\r
+       + Minor modifications to the core uIP code to remove some compiler warnings.\r
+       + Added xTaskGetApplicationTaskTag() function and updated the OpenWatcom\r
+         demo to make use of the new function.\r
+       + Added contributed demos for AVR32 AP7000, STM32 Primer 2 and STM32 using\r
+         Rowley Crossworks.\r
+       + Heap_1.c and Heap_2.c used to define structures for the purpose of data\r
+         alignment.  These have been converted to unions to save a few bytes of\r
+         RAM that would otherwise be wasted.\r
+       + Remove the call to strncpy() used to copy the task name into the TCB when\r
+         the maximum task name is configured to be 1 byte long.\r
+\r
+Changes between V5.1.2 and V5.2.0 released March 14th 2009\r
+\r
+       + Optimised the queue send and receive functions (also used by semaphores).\r
+       + Replaced the standard critical sections used to protect BIOS calls in the\r
+         PC port to instead use scheduler locks.  This is because the BIOS calls\r
+         always return with interrupts enabled.\r
+       + Corrected unclosed comments in boot.s.\r
+\r
+Changes between V5.1.1 and V5.1.2 released February 9th 2009\r
+\r
+       + Added NEC V850ES port and demo.\r
+       + Added NEC 78K0R port and demo.\r
+       + Added MCF52259 port and demo.\r
+       + Added the AT91SAM9XE port and demo.\r
+       + Updated the MCF52233 FEC driver to work around a silicon bug that\r
+         prevents the part auto negotiating some network parameters.\r
+       + Minor modifications to the MCF52233 makefile to permit it to be used\r
+         on Linux hosts.\r
+       + Updated the STM32 primer files to allow them to be built with the latest\r
+         version of the RIDE tools.\r
+       + Updated the threads.js Java script used for kernel aware debugging in\r
+         the Rowley CrossWorks IDE.\r
+\r
+\r
+Changes between V5.1.0 and V5.1.1 released November 20, 2008\r
+\r
+       + Added Coldfire MCF52233 WEB server demo using GCC and Eclipse.\r
+       + Added IAR MSP430 port and demo.\r
+       + Corrected several compiler time issues that had crept in as tool versions\r
+         change.\r
+       + Included FreeRTOS-uIP - a faster uIP.  This is not yet complete.\r
+\r
+Changes between V5.0.4 and V5.1.0 released October 24, 2008\r
+\r
+       + Added a new port and demo application for the ColdFire V2 core using the\r
+         CodeWarrior development tools.\r
+       + Replaced the ARM7 demo that used the old (and now no longer supported)\r
+         Keil compiler with a new port that uses the new Keil/RVDS combo.\r
+       + Stack overflow checking now works for stacks that grow up from low\r
+         memory (PIC24 and dsPIC).\r
+       + BUG FIX - set the PIC32 definition of portSTACK_GROWTH to the correct\r
+         value of -1.\r
+       + MSP430 port layers have been updated to permit tasks to place the\r
+         microcontroller into power down modes 1 to 3.  The demo applications have\r
+         likewise been updated to demonstrate the new feature.\r
+       + Replaced the two separate MSP430/Rowley port layers with a single and more\r
+         flexible version.\r
+       + Added more contributed ports, including ports for NEC and SAM9\r
+         microcontrollers.\r
+       + Changed the linker script used in the LPC2368 Eclipse demo.\r
+\r
+Changes between V5.0.3 and V5.0.4 released September 22, 2008\r
+\r
+       + Completely re-written port for ColdFire GCC.\r
+       + Bug fix:  All Cortex M3 ports have a minor change to the code that sets\r
+         the pending interrupt.\r
+       + Some header files require that FreeRTOS.h be included prior to their\r
+         inclusion.  #error message have been added to all such header file\r
+         informing users to the cause of the compilation error should the headers\r
+         not be included in the correct order.\r
+\r
+Changes between V5.0.2 and V5.0.3 released July 31, 2008\r
+\r
+       Changes relating to the Cortex M3:\r
+\r
+       + Added configMAX_SYSCALL_INTERRUPT_PRIORITY usage to all the Cortex M3\r
+         ports and demos.  See the port documentation pages on the FreeRTOS.org\r
+         WEB site for full usage information.\r
+       + Improved efficiency of Cortex M3 port even further.\r
+       + Ensure the Cortex M3 port works no matter where the vector table is\r
+         located.\r
+       + Added the IntQTimer demo/test tasks to a demo project for each CM3 port\r
+         (Keil, GCC and IAR) to test the new configMAX_SYSCALL_INTERRUPT_PRIORITY\r
+         functionality.\r
+       + Added the mainINCLUDE_WEB_SERVER definition to the LM3SXXXX IAR and Keil\r
+         projects to allow the WEB server to be conditionally excluded from the\r
+         build and therefore allow use of the KickStart (code size limited)\r
+         compiler version.\r
+\r
+       Other changes:\r
+\r
+       + Moved the PIC24 and dsPIC versions of vPortYield() from the C file to\r
+         an assembly file to allow use with all MPLAB compiler versions.  This also\r
+         allows the omit-frame-pointer optimisation to be turned off.\r
+\r
+Changes between V5.0.0 and V5.0.2 released May 30, 2008\r
+\r
+       + Updated the PIC32 port to allow queue API calls to be used from\r
+         interrupts above the kernel interrupt priority, and to allow full\r
+         interrupt nesting.  Task stack usages has also been reduced.\r
+       + Added a new PowerPC port that demonstrates how the trace macros can be\r
+         used to allow the use of a floating point co-processor.  The\r
+         traceTASK_SWITCHED_OUT() and traceTASK_SWITCHED_INT() macros are used to\r
+         save and restore the floating point context respectively for those tasks\r
+         that actually use floating point operations.\r
+       + BUG FIX:  The first PPC405 port contained a bug in that it did not leave\r
+         adequate space above the stack for the backchain to be saved when a task\r
+         started to execute for the first time.\r
+       + Updated queue.c to add in the means to allow interrupt nesting and for\r
+         queue API functions to be called from interrupts that have a priority\r
+         above the kernel priority.  This is only supported on PIC32 ports thus\r
+         far.\r
+       + Fixed the compiler warnings that were generated when the latest version\r
+         of WinAVR was used.\r
+       + Remove all inline usage of 'inline' from the core kernel code.\r
+       + Added the queue registry feature.  The queue registry is provided as a\r
+         means for kernel aware debuggers to locate queue definitions.  It has no\r
+         purpose unless you are using a kernel aware debugger.  The queue registry\r
+         will only be used when configQUEUE_REGISTRY_SIZE is greater than zero.\r
+       + Added the ST Cortex-M3 drivers into the Demo/Common/Drivers directory to\r
+         prevent them from having to be included in multiple demos.\r
+       + Added a Keil STM32 demo application.\r
+       + Changed the blocktim.c test files as it is no longer legitimate for all\r
+         ports to call queue API functions from within a critical section.\r
+       + Added the IntQueue.c test file to test the calling of queue API functions\r
+         from different interrupt priority levels, and test interrupt nesting.\r
+\r
+Changes between V5.0.0 and V5.0.1\r
+\r
+       + V5.0.1 was a customer specific release.\r
+\r
+Changes between V4.8.0 and V5.0.0 released April 15, 2008\r
+\r
+       *** VERY IMPORTANT INFORMATION ON UPGRADING TO FREERTOS.ORG V5.0.0 ***\r
+\r
+       The parameters to the functions xQueueSendFromISR(), xQueueSendToFrontFromISR(),\r
+       xQueueSendToBackFromISR() and xSemaphoreGiveFromISR() have changed.  You must\r
+       update all calls to these functions to use the new calling convention!  Your\r
+       compiler might not issue any type mismatch warnings!\r
+\r
+\r
+       See http://www.FreeRTOS.org/upgrading.html for full information.\r
+\r
+\r
+       Other changes:\r
+\r
+       + Support added for the new Luminary Micro LM3S3768 and LM3S3748 Cortex-M3\r
+         microcontrollers.\r
+       + New task hook feature added.\r
+       + PowerPC demo updated to use version 10.1 of the Xilinx EDK.\r
+       + Efficiency gains within the PIC32 port layer.\r
+\r
+Changes between V4.7.2 and V4.8.0 released March 26 2008\r
+\r
+       + Added a Virtex4 PowerPC 405 port and demo application.\r
+       + Added optional stack overflow checking and new\r
+         uxTaskGetStackHighWaterMark() function.\r
+       + Added new xQueueIsQueueEmptyFromISR(), xQueueIsQueueFullFromISR() and\r
+         uxQueueMessagesWaitingFromISR() API functions.\r
+       + Efficiency improvements to the Cortex-M3 port layer.  NOTE: This\r
+         requires that an SVC handler be installed in the application.\r
+       + Efficiency improvements to the queue send and receive functions.\r
+       + Added new trace macros.  These are application definable to provide\r
+         a flexible trace facility.\r
+       + Implemented the configKERNEL_INTERRUPT_PRIORITY within the Keil Cortex\r
+         M3 port layer (bringing it up to the same standard as the IAR and GCC\r
+         versions).\r
+       + Ports that used the arm-stellaris-eabi-gcc tools have been converted to\r
+         use the arm-non-eabi-gcc tools.\r
+\r
+Changes between V4.7.1 and V4.7.2 released February 21, 2008\r
+\r
+       + Added Fujitsu MB91460 port and demo.\r
+       + Added Fujitsu MB96340 port and demo.\r
+       + Tidied up the capitalisation of include files to facilitate builds on\r
+         Linux hosts.\r
+       + Removed some redundant casting that was generating warnings - but was\r
+         included to remove warnings on other compilers.\r
+\r
+Changes between V4.7.0 and V4.7.1 released February 3, 2008\r
+\r
+       + Updated all IAR ARM projects to use V5.11 of the IAR Embedded Workbench\r
+         for ARM.\r
+       + Introduced recursive semaphore feature.\r
+       + Updated LPC2368 demos to take into account silicon bugs in old chip\r
+         revisions.\r
+       + Updated STR9 uIP port to manually set the net mask and gateway addresses.\r
+       + Updating demos to allow more to run with the co-operative scheduler.\r
+       + Fixed co-operative scheduler behaviour upon the occurrence of a tick\r
+         interrupt while the scheduler was suspended.\r
+       + Updated documentation contained within semphr.h.\r
+       + ARM7 GCC ports no longer use the IRQ attribute.\r
+\r
+Changes between V4.6.1 and V4.7.0 released December 6, 2007\r
+\r
+       + Introduced the counting semaphore macros and demo source files.  The\r
+          Open Watcom PC project has been updated to include the new demo.  See\r
+          the online documentation for more information.\r
+       + Introduced the 'alternative' queue handling API and demo source files.\r
+         The Open Watcom PC project has been updated to include the new demo\r
+         source files.  See the online documentation for more information.\r
+       + Added AT91SAM7X Eclipse demo project.\r
+       + Added the STM32 primer demo project for the GCC compiler and Ride IDE.\r
+       + Removed the .lock files that were mistakenly included in the V4.6.1\r
+         eclipse workspaces.\r
+\r
+Changes between V4.6.0 and V4.6.1 released November 5 2007\r
+\r
+       + Added support for the MIPS M4K based PIC32.\r
+       + Added 'extern "C"' to all the header files to facilitate use with C++.\r
+\r
+Changes between V4.5.0 and V4.6.0 released October 28 2007\r
+\r
+       + Changed the method used to force a context switch within an ISR for the\r
+         ARM7/9 GCC ports only.  The portENTER_SWITCHING_ISR() and\r
+         portEXIT_SWITCHING_ISR() macros are no longer supported.  This is to\r
+         ensure correct behaviour no matter which GCC version is used, with or\r
+         without the -fomit-frame-pointer option, and at all optimisation levels.\r
+       + Corrected the prototype for xQueueGenericSend() within queue.h.\r
+\r
+Changes between V4.4.0 and V4.5.0 released September 17 2007\r
+\r
+       + Added the xQueueSendToFront(), xQueueSendToBack() and xQueuePeek()\r
+         functionality.  These should now be used in preference to the old\r
+         xQueueSend() function - which is maintained for backward compatibility.\r
+       + Added Mutex functionality.  The behaviour of mutexes is subtly different\r
+         to the already existing binary semaphores as mutexes automatically\r
+         include a priority inheritance mechanism.\r
+       + Added the GenQTest.c and QPeek.c to test and demonstrate the behaviour\r
+         of the new functionality.\r
+       + Updated the LM3Sxxxx and PC ports to include the new GenQTest.c and\r
+         QPeek.c files.\r
+       + Updated the GCC port for the Cortex M3 to include the\r
+         configKERNEL_INTERRUPT_PRIORITY functionality.  This was previously only\r
+         included in the IAR port.\r
+       + Optimised the GCC and IAR port layer code - specifically the context\r
+         switch code.\r
+       + Consolidated the LM3Sxxxx EK demos for all development tools into a\r
+         single project that automatically detects which version of the EK the\r
+         application is executing on.\r
+       + Added Eclipse support for LM3Sxxxx evaluation kits.\r
+       + Added Eclipse support for the Keil LPC2368 evaluation kit.\r
+       + Added the Demo/Drivers directory to hold code that is common to multiple\r
+         demo application projects.\r
+       + Included some minor bug fixes in the uIP 1.0 code.\r
+       + Added an lwIP demo for the STR9 - thanks ST for assistance.\r
+       + Updated the AVR32 port to ensure correct behaviour with full compiler\r
+         optimisation.\r
+       + Included binaries for OpenOCD FTDI and parallel port interfaces.\r
+\r
+Changes between V4.4.0 and V4.3.1 released July 31, 2007\r
+\r
+       + Added AVR32 UC3B demo application.\r
+       + Updated AVR32 UC3A port and demo applications.\r
+       + Added IAR lwIP demo for AVR32 UC3A.\r
+       + Updated listGET_OWNER_OF_NEXT_ENTRY() to assist compiler optimisation\r
+         (thanks Niu Yong for making the suggestion).\r
+       + Added xTaskGetSchedulerState() API function.\r
+       + BUG FIX:  Corrected behaviour when tasks that are blocked indefinitely\r
+         have their block time adjusted (within xQueueSend() and xQueueReceive()),\r
+         and are the subject of a call the vTaskResume() when they are not\r
+         actually in the Suspended state (thanks Dan Searles for reporting the\r
+         issues).\r
+\r
+\r
+Changes between V4.3.0 and V4.3.1 released June 11, 2007\r
+\r
+       + Added STMicroelectronics STM32 Cortex-M3 demo application.\r
+       + Updated ustdlib.c for the GCC LM3S6965 demo.\r
+\r
+Changes between V4.2.1 and V4.3.0 released June 5, 2007\r
+\r
+       + Introduced configKERNEL_INTERRUPT_PRIORITY to the IAR Cortex-M3, PIC24\r
+         and dsPIC ports.  See the LM3S6965 and PIC24 demo application\r
+         documentation pages for more information.\r
+       + Updated the PIC24 and dsPIC demos to build with V3.0 of the PIC30 GCC\r
+         tools, and changed the demo applications.\r
+       + Added demos for the new Ethernet and CAN enabled Luminary Micro Stellaris\r
+         microcontrollers.\r
+       + Corrected bug in uIP the demos that prevented frames of approximately 1480\r
+         bytes and over from being transmitted.\r
+       + Included the LPC2368/uIP/Rowley demo into the main FreeRTOS.org\r
+         download.\r
+       + Update to WizC PIC18 port to permit its use with version 14 of the\r
+         compiler.  Thanks Marcel!\r
+\r
+Changes between V4.2.1 and V4.2.0 released April 2, 2007\r
+\r
+       + Added AVR32 AT32UC3A ports for GCC and IAR.\r
+       + Added -fomit-frame-pointer option to lwIP SAM7X demo makefile.\r
+       + Moved location of call to LCD_Init() in STR9 demo to ensure it is only\r
+         called after the scheduler has been started.\r
+\r
+Changes between V4.1.3 and V4.2.0 released February 8, 2007\r
+\r
+       + Changes to both task.c and queue.c as a result of testing performed on\r
+         the SafeRTOS code base.\r
+       + Added Cortex-M3 LM3S811 demos for GCC and IAR tools.\r
+\r
+Changes between V4.1.2 and V4.1.3 released November 19, 2006\r
+\r
+       + Added STR750 ARM7 port using the Raisonance RIDE/GCC tools.\r
+       + Added -fomit-frame-pointer option to Rowley ARM7 demos as work around\r
+         to GCC bug at some optimisation levels.\r
+       + Altered the way the heap is defined in the LM3S811 Keil demo to prevent\r
+         the RAM usage from counting toward the code size limit calculation.\r
+       + CO-ROUTINE BUG FIX:  Removed the call to prvIsQueueEmpty from within\r
+         xQueueCRReceive as it exited with interrupts enabled.  Thanks Paul Katz.\r
+       + Tasks that block on events with a timeout of portMAX_DELAY are now\r
+         blocked indefinitely if configINCLUDE_vTaskSuspend is defined.\r
+         Previously portMAX_DELAY was just the longest block time possible. This\r
+         is still the case if configINCLUDE_vTaskSuspend is not defined.\r
+       + Minor changes to some demo application files.\r
+\r
+Changes between V4.1.1 and V4.1.2 released October 21, 2006\r
+\r
+       + Added 16bit PIC ports and demos.\r
+       + Added STR750 port and demo.\r
+\r
+\r
+Changes between V4.1.0 and V4.1.1 released September 24, 2006\r
+\r
+       + Added the Luminary Micro Stellaris LM3S811 demo application.\r
+\r
+Changes between V4.0.5 and V4.1.0 released August 28, 2006\r
+\r
+       + Prior to V4.1.0, under certain documented circumstances, it was possible\r
+         for xQueueSend() and xQueueReceive() to return without having completed\r
+         and without their block time expiring.  The block time effectively\r
+         stated a maximum block time, and the return value of the function needed\r
+         to be checked to determine the reason for returning.  This is no longer\r
+         the case as the functions will only return once the block time has\r
+         expired or they are able to complete their operation.  It is therefore no\r
+         longer necessary to wrap calls within loops.\r
+       + Changed the critical section handling in the IAR AVR port to correct the\r
+         behaviour when used with later compiler versions.\r
+       + Added the LPC2138 CrossWorks demo into the zip file.  Previously this was\r
+         only available as a separate download.\r
+       + Modified the AVR demo applications to demonstrate the use of co-routines.\r
+\r
+Changes between V4.0.4 and V4.0.5 released August 13, 2006\r
+\r
+       + Introduced API function xTaskResumeFromISR().  Same functionality as\r
+         xTaskResume(), but can be called from within an interrupt service routine.\r
+       + Optimised vListInsert() in the case when the wake time is the maximum\r
+         tick count value.\r
+       + Bug fix:  The 'value' of the event list item is updated when the priority\r
+         of a task is changed.  Previously only the priority of the TCB itself was\r
+         changed.\r
+       + vTaskPrioritySet() and vTaskResume() no longer use the event list item.\r
+         This has not been necessary since V4.0.1 when the xMissedYield handling\r
+         was added.\r
+       + Lowered the PCLK setting on the ARM9 STR9 demo from 96MHz to 48MHz.\r
+       + When ending the scheduler - do not try to attempt a context switch when\r
+         deleting the current task.\r
+       + SAM7X EMAC drivers:  Corrected the Rx frame length mask when obtaining\r
+         the length from the rx descriptor.\r
+\r
+\r
+Changes between V4.0.3 and V4.0.4 released June 22, 2006\r
+\r
+       + Added a port and demo application for the STR9 ARM9 based processors from\r
+         ST.\r
+       + Slight optimisation to the vTaskPrioritySet() function.\r
+       + Included the latest uIP version (1.0) in the demo/common/ethernet\r
+         directory.\r
+\r
+Changes between V4.0.2 and V4.0.3 released June 7, 2006\r
+\r
+       + Added a port and demo application for the Cortex-M3 target using the IAR\r
+         development tools.\r
+       + The ARM Cortex-m3 Rowley projects have been updated to use V1.6 of the\r
+         CrossStudio tools.\r
+       + The heap size defined for the lwIP Rowley demo has been reduced so that\r
+         the project will link correctly when using the command line GCC tools\r
+         also.  The makefile has also been modified to allow debugging.\r
+       + The lwIP Rowley demo not includes a 'kernel aware' debug window.\r
+       + The uIP Rowley project has been updated to build with V1.6 of CrossWorks.\r
+       + The second set of tasks in the blockQ demo were created the wrong way\r
+         around (inconsistent to the description in the file).  This has been\r
+         corrected.\r
+\r
+Changes between V4.0.1 and V4.0.2 released May 28, 2006\r
+\r
+       + Port and demo application added for the Tern Ethernet Engine controller.\r
+       + Port and demo application added for MC9S12 using GCC, thanks to\r
+         Jefferson "imajeff" Smith.\r
+       + The function vTaskList() now suspends the scheduler rather than disabling\r
+         interrupts during the creation of the task list.\r
+       + Allow a task to delete itself by passing in its own handle.  Previously\r
+         this could only be done by passing in NULL.\r
+       + Corrected the value passed to the WDG_PeriodValueConfig() library\r
+         function in the STR71x demo.\r
+       + The tick hook function is now called only within a tick isr.  Previously\r
+         it was also called when the tick function was called during the scheduler\r
+         unlocking process.\r
+       + The EMAC driver in the SAM7X lwIP demo has been made more robust as per\r
+         the thread: http://sourceforge.net/forum/message.php?msg_id=3714405\r
+       + In the PC ports:  Add function prvSetTickFrequencyDefault() to set the\r
+         DOS tick back to its proper value when the scheduler exits.  Thanks\r
+         Raynald!\r
+       + In the Borland x86 ports there was a mistake in the portFIRST_CONTEXT\r
+         macro where the BP register was not popped from the stack correctly.  The\r
+         BP value would never get used so this did not cause a problem, but it has\r
+         been corrected all the same.\r
+\r
+\r
+Changes between V4.0.0 and V4.0.1 released April 7 2006\r
+\r
+       + Improved the ARM CORTEX M3 ports so they now only have to service\r
+         pendSV interrupts.\r
+       + Added a Luminary Micro port and demo for use with Rowley CrossWorks.\r
+       + Added the xMissedYield handling to tasks.c.\r
+\r
+Changes between V3.2.4 and V4.0.0\r
+\r
+       Major changes:\r
+\r
+       + Added new RTOS port for Luminary Micros ARM CORTEX M3 microcontrollers.\r
+       + Added new co-routine functionality.\r
+\r
+       Other kernel changes:\r
+\r
+       + An optional tick hook call is now included in the tick function.\r
+       + Introduced the xMiniListItem structure and removed the list pxHead\r
+         member in order to reduce RAM usage.\r
+       + Added the following definitions to the FreeRTOSConfig.h file included\r
+         with every port:\r
+               configUSE_TICK_HOOK\r
+               configUSE_CO_ROUTINES\r
+               configMAX_CO_ROUTINE_PRIORITIES\r
+       + The volatile qualification has been changed on the list members to allow\r
+         the task.c code to be tidied up a bit.\r
+       + The scheduler can now be started even if no tasks have been created!\r
+         This is to allow co-routines to run when there are no tasks.\r
+       + A task being woken by an event will now preempt the currently running task\r
+         even if its priority is only equal to the currently running task.\r
+\r
+       Port and demo application changes:\r
+\r
+       + Updated the WinAVR demo to compile with the latest version of WinAVR\r
+         with no warnings generated.\r
+       + Changed the WinAVR makefile to make chars signed - needed for the\r
+         co-routine code if BaseType_t is set to char.\r
+       + Added new demo application file crflash.c.  This demonstrates co-routine\r
+         functionality including passing data between co-routines.\r
+       + Added new demo application file crhook.c.  This demonstrates co-routine\r
+         and tick hook functionality including passing data between and ISR and\r
+         a co-routine.\r
+       + Some NOP's were missing following stmdb{}^ instructions in various ARM7\r
+         ports.  These have been added.\r
+       + Updated the Open Watcom PC demo project to include the crflash and crhook\r
+         demo co-routines as an example of their use.\r
+       + Updated the H8S demo to compile with the latest version of GCC.\r
+       + Updated the SAM7X EMAC drivers to take into account the hardware errata\r
+         regarding lost packets.\r
+       + Changed the default MAC address used by some WEB server demos as the\r
+         original addresses used was not liked by some routers.\r
+       + Modified the SAM7X/IAR startup code slightly to prevent it hanging on\r
+         some systems when the code is executed using a j-link debugger.  The\r
+         j-link macro file configures the PLL before the code executes so\r
+         attempting to configure it again in the startup code was causing a\r
+         problem for some user.  Now a check is performed first to see if the\r
+         PLL is already set up.\r
+       + GCC port now contain all assembler code in a single asm block rather than\r
+         individual blocks as before.\r
+       + GCC LPC2000 code now explicitly uses R0 rather than letting the assembler\r
+         choose the register to use as a temporary register during the context\r
+         switch.\r
+       + Added portNOP() macro.\r
+       + The compare match load value on LPC2000 ports now has 1 added to correct\r
+         the value used.\r
+       + The minimal stack depth has been increased slightly on the WIZC PIC18\r
+         port.\r
+\r
+Changes between V3.2.3 and V3.2.4\r
+\r
+       + Modified the GCC ARM7 port layer to allow use with GCC V4.0.0 and above.\r
+         Many thanks to Glen Biagioni for the provided update.\r
+       + Added a new Microblaze port and demo application.\r
+       + Modified the SAM7X EMAC demo to default to use the MII interface rather\r
+         than the RMII interface.\r
+       + Modified the startup sequence of the SAM7X demo slightly to allow the\r
+         EMAC longer to auto negotiate.\r
+\r
+Changes between V3.2.2 and V3.2.3\r
+\r
+       + Added MII interface support to the SAM7X EMAC peripheral driver.\r
+         Previously versions worked with the RMII interface only.\r
+       + Added command line GCC support to the SAM7X lwIP demo.  Previously the\r
+         project could only be built using the CrossWorks IDE.  Modifications to\r
+         this end include the addition of a standard makefile and linker script to\r
+         the download, and some adjustments to the stacks allocated to each task.\r
+       + Changed the page returned by the lwIP WEB server demo to display the\r
+         task status table rather than the TCP/IP statistics.\r
+       + Corrected the capitalisation of some header file includes and makefile\r
+         dependencies to facilitate use on Linux host computers.\r
+       + The various LPC2000 ports had a mistake in the timer setup where the\r
+         prescale value was written to T0_PC instead of T0_PR.  This would have\r
+         no effect unless a prescale value was actually required.  This has been\r
+         corrected.\r
+\r
+Changes between V3.2.1 and V3.2.2 - Released 23 September, 2005\r
+\r
+       + Added an IAR port for the Philips LPC2129\r
+       + The Atmel ARM7 IAR demo project files are now saved in the IAR Embedded\r
+         Workbench V4.30a format.\r
+       + Updated the J-Link macro file included with the SAM7X uIP demo project\r
+         to allow the demo board to be reset over the J-Link.\r
+\r
+Changes between V3.2.0 and V3.2.1 - Released 1 September, 2005\r
+\r
+       + Added lwIP demo for AT91SAM7X using Rowley tools.\r
+       + Added uIP demo for AT91SAM7X using IAR tools.\r
+       + Added function xTaskGetCurrentTaskHandle().\r
+       + Renamed events.h to mevents.h to prevent it conflicting with the events.h\r
+         generated automatically by the HCS12 processor expert utility.  events.h\r
+         is only used by the PC demo application.\r
+       + Both PIC18 ports now initialise the TBLPTRU to 0 as this is the value\r
+         expected by the compiler, and the compilers do not write to this\r
+         register.\r
+       + The HCS12 banked model demo now creates the 'suicide' tasks immediately\r
+         prior to starting the scheduler.  These tasks should be the last tasks to\r
+         get started in order for the test to function correctly.\r
+\r
+Changes between V3.1.1 and V3.2.0 - Released 29 June, 2005\r
+\r
+       V3.2.0 introduces two new MSP430 ports and corrects a minor kernel\r
+       issues.  Thanks to Ares.qi for his input.\r
+\r
+       + Added two MSP430 ports that use the Rowley CrossWorks development tools.\r
+         One port just mirrors the existing GCC port.  The other port was provided\r
+         by Milos Prokic.  Thanks!\r
+       + V3.2.0 corrects the behavior when vTaskPrioritySet() or vTaskResume()\r
+         are called while the scheduler is locked (by a call to\r
+         vTaskSuspendAll()).  When this is done the subject task now starts to\r
+         execute immediately when the scheduler is unlocked if it has the highest\r
+         priority that is ready to run.  Previously there was a possibility that\r
+         the task would not run until the next RTOS tick or call to portYIELD().\r
+       + Another similar small correction ensures that in the case where more than\r
+         one task is blocked on a semaphore or queue, the task with the highest\r
+         priority is guaranteed to be unblocked first.\r
+       + Added a couple of more test tasks to the PC demo which cover the points\r
+         above.\r
+\r
+Changes between V3.1.0 and V3.1.1 - Released 21st June, 2005\r
+\r
+       This release updates the HCS12 port.  The common kernel code\r
+       remains unchanged.\r
+\r
+       + Updated the HCS12 port to support banking and introduced a demo\r
+         application for the MC9S12DP256.  The new demo application is\r
+         located in the Demo/HCS12_CodeWarrior_banked directory.\r
+       + The name of the directory containing the MC9S12F32 demo application\r
+         has been changed to Demo/HCS12_CodeWarrior_small (as in 'small'\r
+         memory model).\r
+       + MC9S12F32 demo updated slightly to use the PLL.  The CPU speed for the\r
+         demo application is now 24MHz.  Previously it was 8MHz.\r
+       + The demo application file Demo/Common/Minimal/death.c has a slight\r
+         alteration to prevent it using floating point variables.\r
+\r
+\r
+Changes between V3.0.0 and V3.1.0 - Released 11th June, 2005\r
+\r
+       + Added new ports for ST Microsystems STR71x, and Freescale HCS12\r
+         microcontrollers.  Currently the HCS12 port is limited to the small\r
+         memory model.  Large memory models will be supported in the next\r
+         release.\r
+       + PIC18 wizC port updated.  Thanks to Marcel van Lieshout for his\r
+         continuing contribution.\r
+       + The accuracy of the AVR port timer setup has been improved.  Thanks to\r
+         Thomas Krutmann for this contribution.\r
+       + Added a new conditional compilation macro configIDLE_SHOULD_YIELD.\r
+         See the WEB documentation for details.\r
+       + Updated the CrossWorks uIP demo to build with V1.4 of CrossWorks.\r
+       + Slight modification to the SAM7 release build configuration to correct\r
+         an include path definition.\r
+       + Updated the MPLAB PIC18 documentation to provide extra details on linker\r
+         file configuration.\r
+\r
+Changes between V3.0.0 and V2.6.1 - Released 23rd April, 2005\r
+\r
+       V3.0.0 includes many enhancements, so this history list is broken into\r
+       subsections as follows:\r
+\r
+               API changes\r
+               New ports\r
+               Directory name changes\r
+               Kernel and miscellaneous changes changes\r
+\r
+       - API changes\r
+\r
+               + Each port now defines BaseType_t as the data type that is most\r
+                 efficient for that architecture.  The type BaseType_t is used\r
+                 extensively in API calls necessitating the following changes to the\r
+                 FreeRTOS API function prototypes.\r
+\r
+                 See the "New for V3.0.0" section of the FreeRTOS online\r
+                 documentation for full details of API changes.\r
+\r
+       - New ports\r
+\r
+               + The AT91FR40008 ARM7 port contributed by John Feller is now included\r
+                 in the download (thanks John!).\r
+               + The PIC18 port for the wizC/fedC compiler contributed by Marcel van\r
+                 Lieshout is now included in the download (thanks Marcel!).\r
+               + The IAR port for the AVR microcontroller has been upgraded to V3.0.0\r
+                 and is now a supported port.\r
+\r
+       - Directory name changes\r
+\r
+               For consistency, and to allow integration of the new ports, the\r
+               following directory names have been changed.\r
+\r
+               + The source/portable/GCC/ARM7 directory has been renamed\r
+                 source/portable/GCC/ARM7_LPC2000 so it is compatible with the naming\r
+                 of other GCC ARM7 ports.\r
+               + The Demo/PIC directory has been renamed Demo/PIC18_MPLAB to\r
+                 accommodate the wizC/fedC PIC port.\r
+               + The demo applications for the two AVR ports no longer share the same\r
+                 directory.  The WinAVR demo is in the Demo/AVR_ATMega323_WinAVR\r
+                 directory and the IAR port in the Demo/AVR_ATMega323_IAR directory.\r
+\r
+\r
+       - Kernel and miscellaneous changes changes\r
+\r
+                 See the "New for V3.0.0" section of the FreeRTOS online\r
+                 documentation for more information.\r
+\r
+               + Previously 'portmacro.h' contained some user editable definitions\r
+                 relating to the user application, and some fixed definitions relating\r
+                 specifically to the port being used.  The application specific\r
+                 definitions have been removed from 'portmacro.h' and placed inside a\r
+                 new header file called 'FreeRTOSConfig.h'.  'portmacro.h' should now\r
+                 never be modified by the user.  A 'FreeRTOSConfig.h' is now included\r
+                 in each of FreeRTOS/Demo subdirectories - as it's settings relate to\r
+                 the demo application rather than being specific to the port.\r
+               + Introduced configUSE_IDLE_HOOK in idle task.\r
+               + The idle task will yield when another idle priority task is ready to\r
+                 run. Previously the idle task would run to the end of its time slice\r
+                 regardless.\r
+               + The idle task is now created when the scheduler is started.  This\r
+                 requires less stack than the previous scheme where it was created upon\r
+                 creation of the first application task.\r
+               + The function usPortCheckFreeStackSpace() has been renamed\r
+                 usTaskCheckFreeStackSpace() and moved from the portable layer to\r
+                 tasks.c.\r
+               + Corrected spelling of portMINMAL_STACK_SIZE to portMINIMAL_STACK_SIZE.\r
+               + The portheap.c file included with the AVR port has been deleted.  The\r
+                 AVR demo now uses the standard heap1 sample memory allocator.\r
+               + The GCC AVR port is now build using the standard make utility.  The\r
+                 batch files used previously have been deleted.  This means a recent\r
+                 version of WinAVR is required in order to create a binary suitable for\r
+                 source level debugging.\r
+               + vTaskStartScheduler() no longer takes the configUSE_PREEMPTION\r
+                 constant as a parameter.  Instead the constant is used directly within\r
+                 tasks.c  and no parameter is required.\r
+               + The header file 'FreeRTOS.h' has been created and is used to include\r
+                 'projdefs.h', 'FreeRTOSConfig.h' and 'portable.h' in the necessary\r
+                 order.  FreeRTOS.h can now be included in place of these other\r
+                 headers.\r
+               + The header file 'errors.h' has been deleted.  The definitions it\r
+                 contained are now located within 'projdefs.h'.\r
+               + pvPortMalloc() now takes a size_t parameter as per the ANSI malloc().\r
+                 Previously an unsigned short was used.\r
+               + When resuming the scheduler a yield is performed if either a tick has\r
+                 been missed, or a task is moved from the pending ready list into a\r
+                 ready list.  Previously a yield was not performed on this second\r
+                 condition.\r
+               + In heap1.c an overflow check has been added to ensure the next free\r
+                 byte variable does not wrap around.\r
+               + Introduced the portTASK_FUNCTION() and portTASK_FUNCTION_PROTO()\r
+                 macros.\r
+               + The MPLAB PIC port now saved the TABLAT register in interrupt service\r
+                 routines.\r
+\r
+Changes between V2.6.0 and V2.6.1 - Released Feb 22, 2005\r
+\r
+       This version adds support for the H8 processor.\r
+\r
+       Other changes:\r
+\r
+       + tskMAX_TASK_NAME_LEN removed from the task.h header and added to each\r
+         individual portmacro.h file as portMAX_TASK_NAME_LEN.  This allows RAM\r
+         limited ports to allocate fewer characters to the task name.\r
+       + AVR port - Replaced the inb() and outb() functions with direct memory\r
+         access.  This allows the port to be built with the 20050414 build of\r
+         WinAVR.\r
+       + GCC LPC2106 port - removed the 'static' from the definition of\r
+         vNonPreemptiveTick() to allow the demo to link when using the cooperative\r
+         scheduler.\r
+       + GCC LPC2106 port - Corrected the optimisation options in the batch files\r
+         ROM_THUMB.bat, RAM_THUMB.bat, ROM_ARM.bat and RAM_ARM.bat.  The lower case\r
+         -o is replaced by an uppercase -O.\r
+       + Tasks.c - The strcpy call has been removed when copying across the task\r
+         name into the TCB.\r
+       + Updated the trace visualisation to always be 4 byte aligned so it can be\r
+         used on ARM architectures.\r
+       + There are now two tracecon executables (that convert the trace file binary\r
+         into an ASCII file).  One for big endian targets and one for little endian\r
+         targets.\r
+       + Added ucTasksDeleted variable to prevent vTaskSuspendAll() being called\r
+         too often in the idle task.\r
+       + SAM7 USB driver - Replaced the duplicated RX_DATA_BK0 in the interrupt\r
+         mask with the RX_DATA_BK1.\r
+\r
+\r
+Changes between V2.5.5 and V2.6.0 - Released January 16, 2005\r
+\r
+       + Added the API function vTaskDelayUntil().  The demo app file\r
+         Demo/Common/Minimal/flash.c has been updated to demonstrate its use.\r
+       + Added INCLUDE_vTaskDelay conditional compilation.\r
+       + Changed the name of the Demo/ARM7_AtmelSAM7S64_IAR directory to\r
+         Demo/ARM7_AT91SAM7S64_IAR for consistency.\r
+       + Modified the AT91SAM7S USB driver to allow descriptors that have\r
+         a length that is an exact multiple of the FIFO to be transmitted.\r
+\r
+Changes between V2.5.4 and V2.5.5 - Released January 3, 2005\r
+\r
+       This version adds support for the Atmel SAM7 ARM7 microcontrollers\r
+       along with the IAR development tools.\r
+\r
+       Other changes:\r
+\r
+       + Renamed the Demo/ARM7 directory to Demo/ARM7_LPC2106_GCC.\r
+       + Renamed the Demo/ARM7_Keil directory to Demo/ARM7_LPC2129_Keil.\r
+       + Modified the Philips ARM7 serial interrupt service routines to only\r
+         process one interrupt per call.  This seems to enable the ISR to\r
+         operate more quickly.\r
+       + Removed the 'far' keyword from the Open Watcom portable layer source\r
+         files.  This allows their use with V1.3 of Open Watcom.\r
+       + Minor modifications to the SDCC build files to allow their use under\r
+         Linux.  Thanks to Frieder Ferlemann for this contribution.\r
+       + Small change to sTaskCreate() to allow a context switch even when\r
+         pxCreatedTask is NULL.  Thanks to Kamil for this contribution.\r
+       + inline keyword removed from vTaskSwitchContext() and VTaskIncrementTick()\r
+         definitions.\r
+\r
+Changes between V2.5.3 and V2.5.4 - Released Dec 1, 2004\r
+\r
+       This is an important maintenance release.\r
+\r
+       The function cTaskResumeAll() has been modified so it can be used safely\r
+       prior to the kernel being initialised.  This was an issue as\r
+       cTaskResumeAll() is called from pvPortMalloc().  Thanks to Daniel Braun\r
+       for highlighting this issue.\r
+\r
+Changes between V2.5.2 and V2.5.3 - Released Nov 2, 2004\r
+\r
+       The critical section handling functions have been changed for the GCC ARM7\r
+       port.   Some optimisation levels use the stack differently to others.  This\r
+       means the interrupt flags cannot always be stored on the stack and are\r
+       instead now stored in a variable, which is then saved as part of the\r
+       tasks context.  This allows the GCC ARM7 port to be used at all\r
+       optimisation levels - including -Os.\r
+\r
+       Other minor changes:\r
+\r
+       + MSP430 definition of usCriticalNesting now uses the volatile qualifier.\r
+         This is probably not required but added just in case.\r
+\r
+Changes between V2.5.1 and V2.5.2 - Released Oct 26, 2004\r
+\r
+       + Added the Keil ARM7 port.\r
+       + Slight modification to comtest.c to make the delay periods more random.\r
+         This creates a better test condition.\r
+\r
+Changes between V2.5.0 and V2.5.1 - Released Oct 9, 2004\r
+\r
+       + Added the MSP430 port.\r
+       + Extra comments added to the GCC ARM7 port.c and portISR.c files.\r
+       + The memory pool allocated within heap_1.c has been placed within a\r
+         structure to ensure correct memory alignment on 32bit systems.\r
+       + Within the GCC ARM7 serial drivers an extra check is made to ensure\r
+         the post to the queue was successful if then attempting immediately\r
+         retrieve the posted character.\r
+       + Changed the name of the constant portTICKS_PER_MS to portTICK_PERIOD_MS\r
+         as the old name was misleading.\r
+\r
+\r
+Changes between V2.4.2 and V2.5.0 - Released Aug 12, 2004\r
+\r
+       The RTOS source code download now includes three separate memory allocation\r
+       schemes - so you can choose the most appropriate for your application.\r
+       These are found in the Source/Portable/MemMang directory.  The demo\r
+       application projects have also been updated to demonstrate the new schemes.\r
+       See the "Memory Management" page of the API documentation for more details.\r
+\r
+       + Added heap_1.c, heap_2.c and heap_3.c in the Source/Portable/MemMang\r
+         directory.\r
+       + Replaced the portheap.c files for each demo application with one of the\r
+         new memory allocation files.\r
+       + Updated the portmacro.h file for each demo application to include the\r
+         constants required for the new memory allocators: portTOTAL_HEAP_SIZE and\r
+         portBYTE_ALIGNMENT.\r
+       + Added a new test to the ARM7 demo application that tests the operation\r
+         of the heap_2 memory allocator.\r
+\r
+\r
+Changes between V2.4.1 and V2.4.2 - Released July 14, 2004\r
+\r
+       + The ARM7 port now supports THUMB mode.\r
+       + Modification to the ARM7 demo application serial port driver.\r
+\r
+Changes between V2.4.0 and V2.4.1 - Released July 2, 2004\r
+\r
+       + Rationalised the ARM7 port version of portEXIT_CRITICAL() -\r
+         improvements provided by Bill Knight.\r
+       + Made demo serial driver more complete and robust.\r
+\r
+\r
+Changes between V2.4.0 and V2.3.1 - Released June 30, 2004\r
+\r
+       + Added the first ARM7 port - thanks to Bill Knight for the assistance\r
+         provided.\r
+       + Added extra files to the Demo/Common/Minimal directory.  These are\r
+         equivalent to their Demo/Common/Full counterparts but with the\r
+         calls to the functions defined in print.c removed.\r
+       + Added TABLAT to the list of registers saved as part of a PIC18 context.\r
+\r
+Changes between V2.3.0 and V2.3.1 - Released June 25, 2004\r
+\r
+       + Changed the way the vector table is defined to be more portable.\r
+       + Corrected the definitions of SPH and SPL in portmacro.s90.\r
+         The previous definitions prevented V2.3.0 operating if the iom323.h\r
+         header file was included in portmacro.s90.\r
+\r
+Changes between V2.2.0 and V2.3.0 - Released June 19, 2004\r
+\r
+       + Added an AVR port that uses the IAR compiler.\r
+       + Explicit use of 'signed' qualifier on plain char types.\r
+       + Modified the Open Watcom project files to use 'signed' as the\r
+         default char type.\r
+       + Changed odd calculation of initial pxTopOfStack value when\r
+         portSTACK_GROWTH < 0.\r
+       + Added inline qualifier to context switch functions within task.c.\r
+         Ports that do not support the (non ANSI) inline keyword have the\r
+         inline #define'd away in  their respective portmacro.h files.\r
+\r
+Changes between V2.1.1 and V2.2.0 - Released May 18, 2004\r
+\r
+       + Added Cygnal 8051 port.\r
+       + PCLATU and PCLATH are now saved as part of the PIC18 context.  This\r
+         allows function pointers to be used within tasks.  Thanks to Javier\r
+         Espeche for the enhancement.\r
+       + Minor changes to demo application files to reduce stack usage.\r
+       + Minor changes to prevent compiler warnings when compiling the new port.\r
+\r
+Changes between V2.1.0 and V2.1.1 - Released March 12, 2004\r
+\r
+       + Bug fix - pxCurrentTCB is now initialised before the call to\r
+         prvInitialiseTaskLists().  Previously pxCurrentTCB could be accessed\r
+         while null during the initialisation sequence.  Thanks to Giuseppe\r
+         Franco for the correction.\r
+\r
+Changes between V2.0.0 and V2.1.0 - Released Feb 29, 2004\r
+\r
+       V2.1.0 has significant reworks that greatly reduce the amount of time\r
+       the kernel has interrupts disabled.  The first section of modifications\r
+       listed here must be taken into account by users.  The second section\r
+       are related to the kernel implementation and as such are transparent.\r
+\r
+       Section1 :\r
+\r
+       + The typedef TickType_t has been introduced.  All delay times should\r
+         now use a variable of type TickType_t in place of the unsigned long's\r
+         used previously.  API function prototypes have been updated\r
+         appropriately.\r
+       + The configuration macro USE_16_BIT_TICKS has been introduced.  If set\r
+         to 1 TickType_t is defined as an unsigned short.  If set to 0\r
+         TickType_t is defined as an unsigned long.  See the configuration\r
+         section of the API documentation for more details.\r
+       + The configuration macro INCLUDE_vTaskSuspendAll is now obsolete.\r
+       + vTaskResumeAll() has been renamed cTaskResumeAll() as it now returns a\r
+         value (see the API documentation).\r
+       + ulTaskGetTickCount() has been renamed xTaskGetTickCount() as the type\r
+         it returns now depends on the USE_16_BIT_TICKS definition.\r
+       + cQueueReceive() must now >never< be used from within an ISR.  Use the new\r
+         cQueueReceiveFromISR() function instead.\r
+\r
+       Section 2:\r
+\r
+       + A mechanism has been introduced that allows a queue to be accessed by\r
+         a task and ISR simultaneously.\r
+       + A "pending ready" queue has been introduced that enables interrupts to\r
+         be processed when the scheduler is suspended.\r
+       + The list implementation has been improved to provide faster item\r
+         removal.\r
+       + The scheduler now makes use of the scheduler suspend mechanism in places\r
+         where previously interrupts were disabled.\r
+\r
+Changes between V1.2.6 and V2.0.0 - Released Jan 31, 2004\r
+\r
+       + Introduced new API functions:\r
+               vTaskPriorityGet ()\r
+               vTaskPrioritySet ()\r
+               vTaskSuspend ()\r
+               vTaskResume ()\r
+               vTaskSuspendAll ()\r
+               vTaskResumeAll ()\r
+       + Added conditional compilation options that allow the components of the\r
+         kernel that are unused by an application to be excluded from the build.\r
+         See the Configuration section on the WEB site for more information (on\r
+         the API pages).  The macros have been added to each portmacro.h file (\r
+         sometimes called prtmacro.h).\r
+       + Rearranged tasks.c.\r
+       + Added demo application file dynamic.c.\r
+       + Updated the PC demo application to make use of dynamic.c.\r
+       + Updated the documentation contained in the kernel header files.\r
+       + Creating a task now causes a context switch if the task being created\r
+         has a higher priority than the calling task - assuming the kernel is\r
+         running.\r
+       + vTaskDelete() now only causes a context switch if the calling task is\r
+         the task being deleted.\r
+\r
+Changes between V1.2.5 and V1.2.6 - Released December 31, 2003\r
+\r
+       Barring the change to the interrupt vector (PIC port) these are minor\r
+       enhancements.\r
+\r
+       + The interrupt vector used for the PIC master ISR has been changed from\r
+         0x18 to 0x08 - where it should have always been.  The incorrect address\r
+         still works but probably executes a number of NOP's before getting to the\r
+         ISR.\r
+       + Changed the baud rate used by the AVR demo application to 38400.  This\r
+         has an error percentage of less than one percent with an 8MHz clock.\r
+       + Raised the priority of the Rx task in demo\full\comtest.c.  This only\r
+         affects the Flashlite and PC ports.  This was done to prevent the Rx\r
+         buffer becoming full.\r
+       + Reverted the Flashlite COM port driver back so it does not use the DMA.\r
+         The DMA appears to miss characters under stress.  The Borland Flashlite\r
+         port was also calculating a register value incorrectly resulting in the\r
+         wrong DMA source address being used.  The same code worked fine when\r
+         compiling with Open Watcom.  Other minor enhancements were made to the\r
+         interrupt handling.\r
+       + Modified the PIC serial Rx ISR to check for and clear overrun errors.\r
+         Overrun errors seem to prevent any further characters being received.\r
+       + The PIC demo projects now have some optimisation switched on.\r
+\r
+\r
+Changes between V1.2.4 and V1.2.5\r
+\r
+       Small fix made to the PIC specific port.c file described below.\r
+\r
+       + Introduced portGLOBAL_INTERRUPT_FLAG definition to test the global\r
+         interrupt flag setting.  Using the two bits defined within\r
+         portINITAL_INTERRUPT_STATE was causing the w register to get clobbered\r
+         before the test was performed.\r
+\r
+Changes between V1.2.3 and V1.2.4\r
+\r
+       V1.2.4 contains a release version of the PIC18 port.\r
+       An optional exception has been included with the GPL.  See the licensing\r
+       section of www.FreeRTOS.org for details.\r
+\r
+       + The function xPortInitMinimal() has been renamed to\r
+         xSerialPortInitMinimal() and the function xPortInit() has been renamed\r
+         to xSerialPortInit().\r
+       + The function sSerialPutChar() has been renamed cSerialPutChar() and\r
+         the function return type chaned to portCHAR.\r
+       + The integer and flop tasks now include calls to tskYIELD(), allowing\r
+         them to be used with the cooperative scheduler.\r
+       + All the demo applications now use the integer and comtest tasks when the\r
+         cooperative scheduler is being used.  Previously they were only used with\r
+         the preemptive scheduler.\r
+       + Minor changes made to operation of minimal versions of comtest.c and\r
+         integer.c.\r
+       + The ATMega port definition of portCPU_CLOSK_HZ definition changed to\r
+         8MHz base 10, previously it base 16.\r
+\r
+\r
+\r
+Changes between V1.2.2a and V1.2.3\r
+\r
+       The only change of any significance is to the license, which has changed\r
+       from the Open Software License to the GNU GPL.\r
+\r
+       The zip file also contains a pre-release version of the PIC18 port.  This\r
+       has not yet completed testing and as such does not constitute part of the\r
+       V1.2.3 release.  It is still however covered by the GNU GPL.\r
+\r
+       There are minor source code changes to accommodate the PIC C compiler.\r
+       These mainly involve more explicit casting.\r
+\r
+       + sTaskCreate() has been modified slightly to make use of the\r
+         portSTACK_GROWTH macro.  This is required for the PIC port where the\r
+         stack grows in the opposite direction to the other existing ports.\r
+       + prvCheckTasksWaitingTermination() has been modified slightly to bring\r
+         the decrementing of usCurrentNumberOfTasks within the critical section,\r
+         where it should have been since the creation of an eight bit port.\r
+\r
+Changes between V1.2.2 and V1.2.2a\r
+\r
+       The makefile and buildcoff.bat files included with the AVR demo application\r
+       have been modified for use with the September 2003 build of WinAVR.  No\r
+       source files have changed.\r
+\r
+Changes between V1.2.1 and V1.2.2\r
+\r
+       There are only minor changes here to allow the PC and Flashlite 186 ports\r
+       to use the Borland V4.52 compiler, as supplied with the Flashlite 186\r
+       development kit.\r
+\r
+       + Introduced a BCC directory under source\portable.  This contains all the\r
+         files specific to the Borland compiler port.\r
+       + Corrected the macro naming of portMS_PER_TICK to portTICKS_PER_MS.\r
+       + Modified comtest.c to increase the rate at which the string is\r
+         transmitted and received on the serial port.  The Flashlite 186 demo\r
+         app baud rate has also been increased.\r
+       + The values of the constants used in both integer.c files have been\r
+          increased to force the Borland compiler to use 32 bit values.  The\r
+          Borland optimiser placed the previous values in 16 bit registers, and in\r
+          So doing invalidated the test.\r
+\r
+Changes between V1.2.0 and V1.2.1\r
+\r
+       This version includes some minor changes to the list implementation aimed\r
+       at improving the context switch time - with is now approximately 10% faster.\r
+       Changes include the removal of some null pointer assignment checks.  These\r
+       were redundant where the scheduler uses the list functions, but means any\r
+       user application choosing to use the same list functions must now check\r
+       that no NULL pointers are passed as a parameter.\r
+\r
+       The Flashlite 186 serial port driver has also been modified to use a DMA\r
+       channel for transmissions.  The serial driver is fully functional but still\r
+       under development.  Flashlite users may prefer to use V1.2.0 for now.\r
+\r
+       Details:\r
+\r
+       + Changed the baud rate for the ATMega323 serial test from 19200 to 57600.\r
+       + Use vSerialPutString() instead of single character puts in\r
+         Demo\Full\Comtest.c.  This allows the use of the flashlite DMA serial\r
+         driver.  Also the check variable only stops incrementing after two\r
+         consecutive failures.\r
+       + semtest.c creates four tasks, two of which operate at the idle priority.\r
+         The tasks that operate at the idle priority now use a lower expected\r
+         count than those running at a higher priority.  This prevents the low\r
+         priority tasks from signalling an error because they have not been\r
+         scheduled enough time for each of them to count the shared variable to\r
+         the higher original value.\r
+       + The flashlite 186 serial driver now uses a DMA channel for transmissions.\r
+       + Removed the volatile modifier from the list function parameters.  This was\r
+         only ever included to prevent compiler warnings.  Now warnings are\r
+         removed by casting parameters where the calls are made.\r
+       + prvListGetOwnerOfNextEntry() and prvListGetOwnerOfHeadEntry() have been\r
+         removed from list.c and added as macros in list.h.\r
+       + usNumberOfItems has been added to the list structure.  This removes the\r
+         need for a pointer comparison when checking if a list is empty, and so\r
+         is slightly faster.\r
+       + Removed the NULL check in vListRemove().  This makes the call faster but\r
+         necessitates any application code utilising the list implementation to\r
+         ensure NULL pointers are not passed.\r
+       + Renamed portTICKS_PER_MS definition to portMS_PER_TICK (milli seconds\r
+         per tick).  This is what it always should have been.\r
+\r
+Changes between V1.01 and V1.2.0\r
+\r
+       The majority of these changes were made to accommodate the 8bit AVR port.\r
+       The scheduler workings have not changed, but some of the data types used\r
+       have been made more friendly to an eight bit environment.\r
+\r
+       Details:\r
+\r
+       + Changed the version numbering format.\r
+       + Added AVR port.\r
+       + Split the directory demo\common into demo\common\minimal and\r
+         demo\common\full.  The files in the full directory are for systems with\r
+         a display (currently PC and Flashlite 186 demo's).  The files in the\r
+         minimal directory are for systems with limited RAM and no display\r
+         (currently MegaAVR).\r
+       + Minor changes to demo application function prototypes to make more use\r
+         of 8bit data types.\r
+       + Within the scheduler itself the following functions have slightly\r
+         modified declarations to make use of 8bit data types where possible:\r
+               xQueueCreate(),\r
+               sQueueReceive(),\r
+               sQUeueReceive(),\r
+               usQueueMessageWaiting(),\r
+               sQueueSendFromISR(),\r
+               sSemaphoreTake(),\r
+               sSemaphoreGive(),\r
+               sSemaphoreGiveFromISR(),\r
+               sTaskCreate(),\r
+               sTaskMoveFromEventList().\r
+\r
+         Where the return type has changed the function name has also changed in\r
+         accordance with the naming convention.  For example\r
+         usQueueMessageWaiting() has become ucQueueMessageWaiting().\r
+       + The definition tskMAX_PRIORITIES has been moved from task.h to\r
+         portmacro.h and renamed portMAX_PRIORITIES.  This allows different\r
+         ports to allocate a different maximum number of priorities.\r
+       + By default the trace facility is off, previously USE_TRACE_FACILITY\r
+         was defined.\r
+       + comtest.c now uses a psuedo random delay between sends.  This allows for\r
+         better testing as the interrupts do not arrive at regular intervals.\r
+       + Minor change to the Flashlite serial port driver.  The driver is written\r
+         to demonstrate the scheduler and is not written to be efficient.\r
+\r
+\r
+\r
+Changes between V1.00 and V1.01\r
+\r
+       These changes improve the ports.  The scheduler itself has not changed.\r
+\r
+       Improved context switch mechanism used when performing a context\r
+       switch from an ISR (both the tick ISR and the serial comms ISR's within\r
+       the demo application).  The new mechanism is faster and uses less stack.\r
+\r
+       The assembler file portasm.asm has been replaced by a header file\r
+       portasm.h.  This includes a few assembler macro definitions.\r
+\r
+       All saving and restoring of registers onto/off of the stack is now handled\r
+       by the compiler.  This means the initial stack setup for a task has to\r
+       mimic the stack used by the compiler, which is different for debug and\r
+       release builds.\r
+\r
+       Slightly changed the operation of the demo application, details below.\r
+\r
+       Details:\r
+\r
+       + portSWITCH_CONTEXT() replaced by vPortFirstContext().\r
+       + pxPortInitialiseStack() modified to replicate the stack used by the\r
+         compiler.\r
+       + portasm.asm file removed.\r
+       + portasm.h introduced.  This contains macro definitions for\r
+         portSWITCH_CONTEXT() and portFIRST_CONTEXT().\r
+       + Context switch from ISR now uses the compiler generated interrupt\r
+         mechanism.  This is done simply by calling portSWITCH_CONTEXT and leaving\r
+         the save/restore to compiler generated code.\r
+       + Calls to taskYIELD() during ISR's have been replaced by calling the\r
+         simpler and faster portSWITCH_CONTEXT().\r
+       + The Flashlite 186 port now uses 186 instruction set (used to use 80x86\r
+         instructions only).\r
+       + The blocking queue tasks within the demo application did not operate\r
+         quite as described.  This has been corrected.\r
+       + The priority of the comtest Rx task within the demo application has been\r
+         lowered.  Received characters are now processed (read from the queue) at\r
+         the idle priority, allowing low priority tasks to run evenly at times of\r
+         a high communications overhead.\r
+       + Prevent the call to kbhit() in main.c for debug builds as the debugger\r
+         seems to have problems stepping over the call.  This if for the PC port\r
+         only.\r
+\r
+\r
+\r
index f0b3337aecfbce1a8d2089e44f23f7de9c00b128..766197ab11c91adf47f8b133dda8e4bcbf4ab24c 100644 (file)
@@ -69,7 +69,7 @@ void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseTy
 BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) FREERTOS_SYSTEM_CALL;\r
 TaskHandle_t MPU_xTaskGetIdleTaskHandle( void ) FREERTOS_SYSTEM_CALL;\r
 UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) FREERTOS_SYSTEM_CALL;\r
-TickType_t MPU_xTaskGetIdleRunTimeCounter( void ) FREERTOS_SYSTEM_CALL;\r
+uint32_t MPU_ulTaskGetIdleRunTimeCounter( void ) FREERTOS_SYSTEM_CALL;\r
 void MPU_vTaskList( char * pcWriteBuffer ) FREERTOS_SYSTEM_CALL;\r
 void MPU_vTaskGetRunTimeStats( char *pcWriteBuffer ) FREERTOS_SYSTEM_CALL;\r
 BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) FREERTOS_SYSTEM_CALL;\r
@@ -82,6 +82,7 @@ void MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) FREERTOS_SYSTEM_CAL
 BaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) FREERTOS_SYSTEM_CALL;\r
 void MPU_vTaskMissedYield( void ) FREERTOS_SYSTEM_CALL;\r
 BaseType_t MPU_xTaskGetSchedulerState( void ) FREERTOS_SYSTEM_CALL;\r
+BaseType_t MPU_xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) FREERTOS_SYSTEM_CALL;\r
 \r
 /* MPU versions of queue.h API functions. */\r
 BaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) FREERTOS_SYSTEM_CALL;\r
index 56d9c7ef40f055aa7eb2d1b31bc0d44a09fbc8ac..2c0ee75492d700db427b71dda490afe23d3bc20d 100644 (file)
@@ -77,11 +77,12 @@ only for ports that are using the MPU. */
                #define uxTaskGetSystemState                                    MPU_uxTaskGetSystemState\r
                #define vTaskList                                                               MPU_vTaskList\r
                #define vTaskGetRunTimeStats                                    MPU_vTaskGetRunTimeStats\r
-               #define xTaskGetIdleRunTimeCounter                              MPU_xTaskGetIdleRunTimeCounter\r
+               #define ulTaskGetIdleRunTimeCounter                             MPU_ulTaskGetIdleRunTimeCounter\r
                #define xTaskGenericNotify                                              MPU_xTaskGenericNotify\r
                #define xTaskNotifyWait                                                 MPU_xTaskNotifyWait\r
                #define ulTaskNotifyTake                                                MPU_ulTaskNotifyTake\r
                #define xTaskNotifyStateClear                                   MPU_xTaskNotifyStateClear\r
+               #define xTaskCatchUpTicks                                               MPU_xTaskCatchUpTicks\r
 \r
                #define xTaskGetCurrentTaskHandle                               MPU_xTaskGetCurrentTaskHandle\r
                #define vTaskSetTimeOutState                                    MPU_vTaskSetTimeOutState\r
index 3a57726526fd22f41c2e59ea5560b1800b39b26f..b4e246fb9bddcfbbe0ea9e034d35325b65601aa7 100644 (file)
@@ -1738,7 +1738,7 @@ void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e9
 \r
 /**\r
 * task. h\r
-* <PRE>TickType_t xTaskGetIdleRunTimeCounter( void );</PRE>\r
+* <PRE>uint32_t ulTaskGetIdleRunTimeCounter( void );</PRE>\r
 *\r
 * configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS\r
 * must both be defined as 1 for this function to be available.  The application\r
@@ -1753,7 +1753,7 @@ void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e9
 * of the accumulated time value depends on the frequency of the timer\r
 * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.\r
 * While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total\r
-* execution time of each task into a buffer, xTaskGetIdleRunTimeCounter()\r
+* execution time of each task into a buffer, ulTaskGetIdleRunTimeCounter()\r
 * returns the total execution time of just the idle task.\r
 *\r
 * @return The total run time of the idle task.  This is the amount of time the\r
@@ -1761,10 +1761,10 @@ void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e9
 * frequency configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and\r
 * portGET_RUN_TIME_COUNTER_VALUE() macros.\r
 *\r
-* \defgroup xTaskGetIdleRunTimeCounter xTaskGetIdleRunTimeCounter\r
+* \defgroup ulTaskGetIdleRunTimeCounter ulTaskGetIdleRunTimeCounter\r
 * \ingroup TaskUtils\r
 */\r
-TickType_t xTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;\r
+uint32_t ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * task. h\r
@@ -2383,6 +2383,19 @@ void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVIL
  */\r
 void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;\r
 \r
+/* Correct the tick count value after the application code has held\r
+interrupts disabled for an extended period.  xTicksToCatchUp is the number\r
+of tick interrupts that have been missed due to interrupts being disabled.\r
+Its value is not computed automatically, so must be computed by the\r
+application writer.\r
+\r
+This function is similar to vTaskStepTick(), however, unlike\r
+vTaskStepTick(), xTaskCatchUpTicks() may move the tick count forward past a\r
+time at which a task should be removed from the blocked state.  That means\r
+tasks may have to be removed from the blocked state as the tick count is\r
+moved. */\r
+BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) PRIVILEGED_FUNCTION;\r
+\r
 /*\r
  * Only available when configUSE_TICKLESS_IDLE is set to 1.\r
  * Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port\r
index a159ab28f006ef6d018db85022bfb1111adc8957..57bc6d128f72c3885aa91f0215a1e91d3dd8891d 100644 (file)
@@ -505,7 +505,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __asm( "        cpsie i" );\r
                }\r
        }\r
index 452aafc256aa54d56e24efbc728a93eb0803dff8..fb0f72774e8717d01a0cd6e39c2ea84bfb3d683e 100644 (file)
@@ -528,7 +528,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __asm( "        cpsie i" );\r
                }\r
        }\r
index 762a02a2bfe64a453daa737a61612550032a6f40..abab6c0492608d92e5aca149b1a287edd449a37b 100644 (file)
@@ -602,7 +602,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __asm volatile( "cpsie i" ::: "memory" );\r
                }\r
        }\r
index e84e9bafe75897eca52db57c673c7bd3b7a5eadb..15e28df5744de658614de859bdd439b3c385efc0 100644 (file)
@@ -664,7 +664,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __asm volatile( "cpsie i" ::: "memory" );\r
                }\r
        }\r
index 4851012bac4babe33f3e97a5096b6b8bceb155ec..9806a879a9e49a46ea21b2fb495a578137acff12 100644 (file)
@@ -654,7 +654,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __asm volatile( "cpsie i" ::: "memory" );\r
                }\r
        }\r
index 33303c382914d00b82ed2aef04e931172e7635fb..486f61447cc2f46b80703fecd508d274042b5eef 100644 (file)
@@ -504,7 +504,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __enable_interrupt();\r
                }\r
        }\r
index cf89048503251ee580d7378a09adb311739c7f19..2a2b66e6602c67542875a347176cbb624e345531 100644 (file)
@@ -541,7 +541,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __enable_interrupt();\r
                }\r
        }\r
index 4b3e628d4da09c6a6a3393e2665c17f131686bf9..9bff8ed7da2c9dc2703331ef372029e76d4401e4 100644 (file)
@@ -529,7 +529,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __enable_interrupt();\r
                }\r
        }\r
index 8b38a726e06d20d19d8d6b2e2cce6bd742230e36..bd9e1e5745482f5b666ad14871a3bcdb886dea29 100644 (file)
@@ -648,7 +648,7 @@ void xPortSysTickHandler( void ) iv IVT_INT_SysTick ics ICS_AUTO
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __asm { "cpsie i" };\r
                }\r
        }\r
index 4a6fc128f92b1213e9bfb65f916c0ea2464da5b9..42d48157a864667f3adc0935dd1d60a74ac35f87 100644 (file)
@@ -588,7 +588,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __enable_irq();\r
                }\r
        }\r
index c5e47a5bffb8566fb744b474d4442ddc068be1a3..d3d42cfc810e4e5185010e3a9ac507aeb26b369a 100644 (file)
@@ -678,7 +678,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __enable_irq();\r
                }\r
        }\r
index 2c00cf58ff541a5092d0e74489da39929e56a726..967f5f10e25db16ad6e4cade9fe1c95ce851cffe 100644 (file)
@@ -664,7 +664,7 @@ void xPortSysTickHandler( void )
                        vTaskStepTick( ulCompleteTickPeriods );\r
                        portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r
 \r
-                       /* Exit with interrpts enabled. */\r
+                       /* Exit with interrupts enabled. */\r
                        __enable_irq();\r
                }\r
        }\r
index 6cecac0e260efad315aefea5ecef3ccef016a2c8..cf28a7184eaa5f879166a0a60ce21e664c9f59be 100644 (file)
@@ -368,7 +368,7 @@ PRIVILEGED_DATA static volatile UBaseType_t uxCurrentNumberOfTasks  = ( UBaseTyp
 PRIVILEGED_DATA static volatile TickType_t xTickCount                          = ( TickType_t ) configINITIAL_TICK_COUNT;\r
 PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority                 = tskIDLE_PRIORITY;\r
 PRIVILEGED_DATA static volatile BaseType_t xSchedulerRunning           = pdFALSE;\r
-PRIVILEGED_DATA static volatile UBaseType_t uxPendedTicks                      = ( UBaseType_t ) 0U;\r
+PRIVILEGED_DATA static volatile TickType_t xPendedTicks                        = ( TickType_t ) 0U;\r
 PRIVILEGED_DATA static volatile BaseType_t xYieldPending                       = pdFALSE;\r
 PRIVILEGED_DATA static volatile BaseType_t xNumOfOverflows                     = ( BaseType_t ) 0;\r
 PRIVILEGED_DATA static UBaseType_t uxTaskNumber                                        = ( UBaseType_t ) 0U;\r
@@ -2175,6 +2175,7 @@ BaseType_t xTaskResumeAll( void )
 {\r
 TCB_t *pxTCB = NULL;\r
 BaseType_t xAlreadyYielded = pdFALSE;\r
+TickType_t xTicksToNextUnblockTime;\r
 \r
        /* If uxSchedulerSuspended is zero then this function does not match a\r
        previous call to vTaskSuspendAll(). */\r
@@ -2229,30 +2230,51 @@ BaseType_t xAlreadyYielded = pdFALSE;
                                they should be processed now.  This ensures the tick count does\r
                                not     slip, and that any delayed tasks are resumed at the correct\r
                                time. */\r
+                               while( xPendedTicks > ( TickType_t ) 0 )\r
                                {\r
-                                       UBaseType_t uxPendedCounts = uxPendedTicks; /* Non-volatile copy. */\r
+                                       /* Calculate how far into the future the next task will\r
+                                       leave the Blocked state because its timeout expired.  If\r
+                                       there are no tasks due to leave the blocked state between\r
+                                       the time now and the time at which the tick count overflows\r
+                                       then xNextTaskUnblockTime will the tick overflow time.\r
+                                       This means xNextTaskUnblockTime can never be less than\r
+                                       xTickCount, and the following can therefore not\r
+                                       underflow. */\r
+                                       configASSERT( xNextTaskUnblockTime >= xTickCount );\r
+                                       xTicksToNextUnblockTime = xNextTaskUnblockTime - xTickCount;\r
 \r
-                                       if( uxPendedCounts > ( UBaseType_t ) 0U )\r
+                                       /* Don't want to move the tick count more than the number\r
+                                       of ticks that are pending, so cap if necessary. */\r
+                                       if( xTicksToNextUnblockTime > xPendedTicks )\r
                                        {\r
-                                               do\r
-                                               {\r
-                                                       if( xTaskIncrementTick() != pdFALSE )\r
-                                                       {\r
-                                                               xYieldPending = pdTRUE;\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               mtCOVERAGE_TEST_MARKER();\r
-                                                       }\r
-                                                       --uxPendedCounts;\r
-                                               } while( uxPendedCounts > ( UBaseType_t ) 0U );\r
+                                               xTicksToNextUnblockTime = xPendedTicks;\r
+                                       }\r
 \r
-                                               uxPendedTicks = 0;\r
+                                       if( xTicksToNextUnblockTime == 0 )\r
+                                       {\r
+                                               /* xTicksToNextUnblockTime could be zero if the tick\r
+                                               count is about to overflow and xTicksToNetUnblockTime\r
+                                               holds the time at which the tick count will overflow\r
+                                               (rather than the time at which the next task will\r
+                                               unblock).  Set to 1 otherwise xPendedTicks won't be\r
+                                               decremented below. */\r
+                                               xTicksToNextUnblockTime = ( TickType_t ) 1;\r
                                        }\r
-                                       else\r
+                                       else if( xTicksToNextUnblockTime > ( TickType_t ) 1 )\r
                                        {\r
-                                               mtCOVERAGE_TEST_MARKER();\r
+                                               /* Move the tick count one short of the next unblock\r
+                                               time, then call xTaskIncrementTick() to move the tick\r
+                                               count up to the next unblock time to unblock the task,\r
+                                               if any.  This will also swap the blocked task and\r
+                                               overflow blocked task lists if necessary. */\r
+                                               xTickCount += ( xTicksToNextUnblockTime - ( TickType_t ) 1 );\r
                                        }\r
+                                       xYieldPending |= xTaskIncrementTick();\r
+\r
+                                       /* Adjust for the number of ticks just added to\r
+                                       xTickCount and go around the loop again if\r
+                                       xTicksToCatchUp is still greater than 0. */\r
+                                       xPendedTicks -= xTicksToNextUnblockTime;\r
                                }\r
 \r
                                if( xYieldPending != pdFALSE )\r
@@ -2586,6 +2608,24 @@ implementations require configUSE_TICKLESS_IDLE to be set to a value other than
 #endif /* configUSE_TICKLESS_IDLE */\r
 /*----------------------------------------------------------*/\r
 \r
+BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp )\r
+{\r
+BaseType_t xYieldRequired = pdFALSE;\r
+\r
+       /* Must not be called with the scheduler suspended as the implementation\r
+       relies on xPendedTicks being wound down to 0 in xTaskResumeAll(). */\r
+       configASSERT( uxSchedulerSuspended == 0 );\r
+\r
+       /* Use xPendedTicks to mimic xTicksToCatchUp number of ticks occuring when\r
+       the scheduler is suspended so the ticks are executed in xTaskResumeAll(). */\r
+       vTaskSuspendAll();\r
+       xPendedTicks += xTicksToCatchUp;\r
+       xYieldRequired = xTaskResumeAll();\r
+\r
+       return xYieldRequired;\r
+}\r
+/*----------------------------------------------------------*/\r
+\r
 #if ( INCLUDE_xTaskAbortDelay == 1 )\r
 \r
        BaseType_t xTaskAbortDelay( TaskHandle_t xTask )\r
@@ -2793,7 +2833,7 @@ BaseType_t xSwitchRequired = pdFALSE;
                {\r
                        /* Guard against the tick hook being called when the pended tick\r
                        count is being unwound (when the scheduler is being unlocked). */\r
-                       if( uxPendedTicks == ( UBaseType_t ) 0U )\r
+                       if( xPendedTicks == ( TickType_t ) 0 )\r
                        {\r
                                vApplicationTickHook();\r
                        }\r
@@ -2806,7 +2846,7 @@ BaseType_t xSwitchRequired = pdFALSE;
        }\r
        else\r
        {\r
-               ++uxPendedTicks;\r
+               ++xPendedTicks;\r
 \r
                /* The tick hook gets called at regular intervals, even if the\r
                scheduler is locked. */\r
@@ -5078,7 +5118,7 @@ TickType_t uxReturn;
 \r
 #if( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )\r
 \r
-       TickType_t xTaskGetIdleRunTimeCounter( void )\r
+       uint32_t ulTaskGetIdleRunTimeCounter( void )\r
        {\r
                return xIdleTaskHandle->ulRunTimeCounter;\r
        }\r