Documentation and download available at https://www.FreeRTOS.org/

Changes between FreeRTOS V10.5.0 and FreeRTOS V10.5.1 released November 16 2022
	
	+ Updating the version in the manifest.yml file to be accurate. 

Changes between FreeRTOS V10.4.6 and FreeRTOS V10.5.0 released September 16 2022

	+ ARMv7-M and ARMv8-M MPU ports: It was possible for a third party that
	  already independently gained the ability to execute injected code to
	  read from or write to arbitrary addresses by passing a negative argument
	  as the xIndex parameter to pvTaskGetThreadLocalStoragePointer() or
	  vTaskSetThreadLocalStoragePointer respectively. A check has been added to
	  ensure that passing a negative argument as the xIndex parameter does not
	  cause arbitrary read or write.
	  We thank Certibit Consulting, LLC for reporting this issue.
	+ ARMv7-M and ARMv8-M MPU ports: It was possible for an unprivileged task
	  to invoke any function with privilege by passing it as a parameter to
	  MPU_xTaskCreate, MPU_xTaskCreateStatic, MPU_xTimerCreate,
	  MPU_xTimerCreateStatic, or MPU_xTimerPendFunctionCall. MPU_xTaskCreate
	  and MPU_xTaskCreateStatic have been updated to only allow creation of
	  unprivileged tasks. MPU_xTimerCreate, MPU_xTimerCreateStatic and
	  MPU_xTimerPendFunctionCall APIs have been removed.
	  We thank Huazhong University of Science and Technology for reporting
	  this issue.
	+ ARMv7-M and ARMv8-M MPU ports: It was possible for a third party that
	  already independently gained the ability to execute injected code to
	  achieve further privilege escalation by branching directly inside a
	  FreeRTOS MPU API wrapper function with a manually crafted stack frame.
	  The local stack variable `xRunningPrivileged` has been removed so that
	  a manually crafted stack frame cannot be used for privilege escalation
	  by branching directly inside a FreeRTOS MPU API wrapper.
	  We thank Certibit Consulting, LLC, Huazhong University of Science and
	  Technology and the SecLab team at Northeastern University for reporting
	  this issue.
	+ ARMv7-M MPU ports: It was possible to configure overlapping memory
	  protection unit (MPU) regions such that an unprivileged task could access
	  privileged data. The kernel now uses highest numbered MPU regions for
	  kernel protections to prevent such MPU configurations.
	  We thank the SecLab team at Northeastern University for reporting this
	  issue.
	+ Add support for ARM Cortex-M55.
	+ Add support for ARM Cortex-M85. Contributed by @gbrtth.
	+ Add vectored mode interrupt support to the RISC-V port.
	+ Add support for RV32E extension (Embedded Profile) in RISC-V GCC port.
	  Contributed by @Limoto.
	+ Heap improvements:
	  - Add a check to heap_2 to track if a memory block is allocated to
	    the application or not. The MSB of the size field is used for this
	    purpose. The same check already exists in heap_4 and heap_5. This
	    check prevents double free errors.
	  - Add a new flag configHEAP_CLEAR_MEMORY_ON_FREE to heap_2, heap_4
	    and heap_5. If the flag is set in FreeRTOSConfig.h then memory freed using
	    vPortFree() is automatically cleared to zero.
	  - Add a new API pvPortCalloc to heap_2, heap_4 and heap_5 which has the same
	    signature as the standard library calloc function.
	  - Update the pointer types to portPOINTER_SIZE_TYPE. Contributed by
	    @Octaviarius.
	+ Add the ability to override send and receive completed callbacks for each
	  instance of a stream buffer or message buffer. Earlier there could be
	  one send and one receive callback for all instances of stream and message
	  buffers. Having separate callbacks per instance allows different message
	  and stream buffers to be used differently - for example, some for inter core
	  communication and others for same core communication.
	  The feature can be controlled by setting  the configuration option
	  configUSE_SB_COMPLETED_CALLBACK in FreeRTOSConfig.h. When the option is set to 1,
	  APIs xStreamBufferCreateWithCallback() or xStreamBufferCreateStaticWithCallback()
	  (and likewise APIs for message buffer) can be used to create a stream buffer 
	  or message buffer instance with application provided callback overrides. When
	  the option is set to 0, then the default callbacks as defined by
	  sbSEND_COMPLETED() and sbRECEIVE_COMPLETED() macros are invoked. To maintain 
	  backwards compatibility, configUSE_SB_COMPLETED_CALLBACK defaults to 0. The 
	  functionality is currently not supported for MPU enabled ports.
	+ Generalize the FreeRTOS's Thread Local Storage (TLS) support so that it
	  is not tied to newlib and can be used with other c-runtime libraries also.
	  The default behavior for newlib support is kept same for backward
	  compatibility.
	+ Add support to build and link FreeRTOS using CMake build system. Contributed
	  by @yhsb2k.
	+ Add support to generate Software Bill of Materials (SBOM) for every release.
	+ Add support for 16 MPU regions to the GCC Cortex-M33 ports.
	+ Add ARM Cortex-M7 r0p0/r0p1 Errata 837070 workaround to ARM CM4 MPU ports.
	  The application writer needs to define configENABLE_ERRATA_837070_WORKAROUND
	  when using CM4 MPU ports on a Cortex-M7 r0p0/r0p1 core.
	+ Add configSYSTICK_CLOCK_HZ to Cortex-M0 ports. This is needed to support
	  the case when the SysTick timer is not clocked from the same source as the CPU.
	+ Add hardware stack protection support to MicroBlazeV9 port. This ensures that
	  the CPU immediately raises Stack Protection Violation exception as soon as any
	  task violates its stack limits. Contributed by @uecasm.
	+ Introduce the configUSE_MINI_LIST_ITEM configuration option. When this
	  option is set to 1, ListItem_t and MiniLitItem_t remain separate types.
	  However, when configUSE_MINI_LIST_ITEM == 0, MiniLitItem_t and ListItem_t
	  are both typedefs of the same struct xLIST_ITEM. This addresses some issues
	  observed when strict-aliasing and link time optimization are enabled.
	  To maintain backwards compatibility, configUSE_MINI_LIST_ITEM defaults to 1.
	+ Simplify prvInitialiseNewTask to memset newly allocated TCB structures
	  to zero, and remove code that set individual structure members to zero.
	+ Add prototype for prvPortYieldFromISR to the POSIX port so that it builds
	  without any warning with -Wmissing-prototypes compiler option.
	+ Add top of stack and end of stack to the task info report obtained using
	  vTaskGetInfo(). Contributed by @shreyasbharath.
	+ Add a cap to the cRxLock and cTxLock members of the queue data structure.
	  These locks count the number items received and sent to the queue while
	  the queue was locked. These are later used to unblock tasks waiting on
	  the queue when the queue is unlocked. This PR caps the values of the
	  cRxLock and cTxLock to the number of tasks in the system because we cannot
	  unblock more tasks than there are in the system. Note that the same assert
	  could still be triggered is the application creates more than 127 tasks.
	+ Changed uxAutoReload parameter in timer functions to xAutoReload.  The
	  type is now BaseType_t.  This matches the type of pdTRUE and pdFALSE.
	  The new function xTimerGetAutoReload() provides the auto-reload state as
	  a BaseType_t.  The legacy function uxTimerGetAutoReload is retained with the
	  original UBaseType_t return value.
	+ Fix support for user implementations of tickless idle that call
	  vTaskStepTick() with xExpectedIdleTime ticks to step. The new code
	  ensures xTickCount reaches xNextTaskUnblockTime inside xTaskIncrementTick()
	  instead of inside vTaskStepTick(). This fixes the typical case where a task
	  wakes up one tick late and a rare case assertion failure when xTickCount\
	  rolls over. Contributed by @jefftenney.
	+ Fix deadlock in event groups when pvPortMalloc and vPortFree functions
	  are protected with a mutex. Contributed by @clemenskresser.
	+ Fix a warning in tasks.c when compiled with -Wduplicated-branches
	  GCC option. Contributed by @pierrenoel-bouteville-act.
	+ Fix compilation error in tasks.c when configSUPPORT_DYNAMIC_ALLOCATION
	  is set to zero. Contributed by @rdpoor.
	+ Fix prvWriteMessageToBuffer() function in stream_buffer.c so that it correctly
	  copies length on big endian platforms too.
	+ Remove the need for  INCLUDE_vTaskSuspend to be set to 1
	  when configUSE_TICKLESS_IDLE is enabled. Contributed by @pramithkv.
	+ Update the RL78 IAR port to the latest version of IAR which uses the
	  industry standard ELF format as opposed to earlier UBROF object format.
	  Contributed by @felipe-iar.
	+ Add tick type is atomic flag when tick count is 16-bit to PIC24 port. This
	  allows the PIC24 family of 16 bit processors to read the tick count without
	  a critical section when the tick count is also 16 bits.
	+ Fix offset-out-of-range errors for GCC CM3/CM4 mpu ports when
	  Link Time Optimization is enabled. Contributed by @niniemann.
	+ Remove #error when RISC-V port is compiled on a 64-bit RISC-V platform.
	  Contributed by @cmdrf.
	+ Fix ullPortInterruptNesting alignment in Cortex-A53 port so that it is
	  8-byte aligned. This fixes the unaligned access exception. Contributed
	  by @Atomar25.
	+ Fix  Interrupt Handler Register Function and Exception Process in NiosII
	  Port. Contributed by @ghost.
	+ Change FreeRTOS IRQ Handler for Cortex-A53 SRE port to store and restore
	  interrupt acknowledge register. This ensures that the SRE port behavior
	  matches the Memory Mapped IO port. Contributed by @sviaunxp.
	+ Update the uncrustify config file to match the version of the uncrustify
	  used in the CI Action. Also, pin the version of uncrustify in CI. Contributed
	  by @swaldhoer.

Changes between FreeRTOS V10.4.5 and FreeRTOS V10.4.6 released November 12 2021

	+ ARMv7-M and ARMv8-M MPU ports – prevent non-kernel code from calling the
	  internal functions xPortRaisePrivilege and vPortResetPrivilege by changing
	  them to macros.
	+ Introduce a new config configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS which
	  enables developers to prevent critical sections from unprivileged tasks.
	  It defaults to 1 for backward compatibility. Application should set it to
	  0 to disable critical sections from unprivileged tasks.

Changes between FreeRTOS V10.4.4 and FreeRTOS V10.4.5 released September 10 2021

	See https://www.FreeRTOS.org/FreeRTOS-V10.4.5.html

	+ Introduce configRUN_TIME_COUNTER_TYPE which enables developers to define
	  the type used to hold run time statistic counters. Defaults to uint32_t
	  for backward compatibility. #define configRUN_TIME_COUNTER_TYPE to a type
	  (for example, uint64_t) in FreeRTOSConfig.h to override the default.
	+ Introduce ulTaskGetIdleRunTimePercent() to complement the pre-existing
	  ulTaskGetIdleRunTimeCounter(). Whereas the pre-existing function returns
	  the raw run time counter value, the new function returns the percentage of
	  the entire run time consumed by the idle task. Note the amount of idle
	  time is only a good measure of the slack time in a system if there are no
	  other tasks executing at the idle priority, tickless idle is not used, and
	  configIDLE_SHOULD_YIELD is set to 0.
	+ ARMv8-M secure-side port:  Tasks that call secure functions from the
	  non-secure side of an ARMv8-M MCU (ARM Cortex-M23 and Cortex-M33) have two
	  contexts - one on the non-secure side and one on the secure-side. Previous
	  versions of the FreeRTOS ARMv8-M secure-side ports allocated the structures
	  that reference secure-side contexts at run time.  Now the structures are
	  allocated statically at compile time.  The change necessitates the
	  introduction of the secureconfigMAX_SECURE_CONTEXTS configuration constant,
	  which sets the number of statically allocated secure contexts.
	  secureconfigMAX_SECURE_CONTEXTS defaults to 8 if left undefined.
	  Applications that only use FreeRTOS code on the non-secure side, such as
	  those running third-party code on the secure side, are not affected by
	  this change.

Changes between FreeRTOS V10.4.3 and FreeRTOS V10.4.4 released May 28 2021
	+ Minor performance improvements to xTaskIncrementTick() achieved by providing
	  macro versions of uxListRemove() and vListInsertEnd().
	+ Minor refactor of timers.c that obsoletes the need for the
	  tmrCOMMAND_START_DONT_TRACE macro and removes the need for timers.c to
	  post to its own event queue.  A consequence of this change is that auto-
	  reload timers that miss their intended next execution time will execute
	  again immediately rather than executing again the next time the command
	  queue is processed.  (thanks Jeff Tenney).
	+ Fix a race condition in the message buffer implementation.  The
	  underlying cause was that length and data bytes are written and read as
	  two distinct operations, which both modify the size of the buffer. If a
	  context switch occurs after adding or removing the length bytes, but
	  before adding or removing the data bytes, then another task may observe
	  the message buffer in an invalid state.
	+ The xTaskCreate() and xTaskCreateStatic() functions accept a task priority
	  as an input parameter.  The priority has always been silently capped to
	  (configMAX_PRIORITIES - 1) should it be set to a value above that priority.
	  Now values above that priority will also trigger a configASSERT() failure.
	+ Replace configASSERT( pcQueueName ) in vQueueAddToRegistry with a NULL
	  pointer check.
	+ Introduce the configSTACK_ALLOCATION_FROM_SEPARATE_HEAP configuration
	  constant that enables the stack allocated to tasks to come from a heap other
	  than the heap used by other memory allocations.  This enables stacks to be
	  placed within special regions, such as fast tightly coupled memory.
	+ If there is an attempt to add the same queue or semaphore handle to the
	  queue registry more than once then prior versions would create two separate
	  entries.  Now if this is done the first entry is overwritten rather than
	  duplicated.
	+ Update the ESP32 port and TF-M (Trusted Firmware M)code to the latest from
	  their respective repositories.
	+ Correct a build error in the POSIX port.
	+ Additional minor formatting updates, including replacing tabs with spaces
	  in more files.
	+ Other minor updates include adding additional configASSERT() checks and
	  correcting and improving code comments.
	+ Go look at the smp branch to see the progress towards the Symetric
	  Multiprocessing Kernel. https://github.com/FreeRTOS/FreeRTOS-Kernel/tree/smp

Changes between FreeRTOS V10.4.2 and FreeRTOS V10.4.3 released December 14 2020

	V10.4.3 is included in the 202012.00 LTS release.  Learn more at https:/freertos.org/lts-libraries.html

	See https://www.FreeRTOS.org/FreeRTOS-V10.4.x.html

	+ Changes to improve robustness and consistency for buffer allocation in
	  the heap, queue and stream buffer.
	+ The following functions can no longer be called from unprivileged code.
	  - xTaskCreateRestricted
	  - xTaskCreateRestrictedStatic
	  - vTaskAllocateMPURegions


Changes between FreeRTOS V10.4.1 and FreeRTOS V10.4.2 released November 10 2020

	See https://www.FreeRTOS.org/FreeRTOS-V10.4.x.html

	+ Fix an issue in the ARMv8-M ports that caused BASEPRI to be masked
	  between the first task starting to execute and that task making
	  a FreeRTOS API call.
	+ Introduced xTaskDelayUntil(), which is functionally equivalent to
	  vTaskDelayUntil(), with the addition of returning a value to
	  indicating whether or not the function placed the calling task into
	  the Blocked state or not.
	+ Update WolfSSL to 4.5.0 and add the FIPS ready demo.
	+ Add support for ESP IDF 4.2 to ThirdParty Xtensa port.
	+ Re-introduce uxTopUsedPriority to support OpenOCD debugging.
	+ Convert most dependent libraries in FreeRTOS/FreeRTOS to submodules.
	+ Various general maintenance and improvements to MISRA compliance.


Changes between FreeRTOS V10.4.0 and FreeRTOS V10.4.1 released September 17 2020

	See https://www.FreeRTOS.org/FreeRTOS-V10.4.x.html

	+ Fixed an incorrectly named parameter that prevented the
	  ulTaskNotifyTakeIndexed macro compiling, and the name space clash in the
	  test code that prevented this error causing test failures.


Changes between FreeRTOS V10.3.1 and FreeRTOS V10.4.0 released September 10 2020

	See https://www.FreeRTOS.org/FreeRTOS-V10.4.x.html

	Major enhancements:

	+ Task notifications:  Prior to FreeRTOS V10.4.0 each created task had a
	  single direct to task notification.  From FreeRTOS V10.4.0 each task has
	  an array of notifications.  The direct to task notification API has been
	  extended with API functions postfixed with "Indexed" to enable the API to
	  operate on a task notification at any array index.  See
	  https://www.freertos.org/RTOS-task-notifications.html for more information.
	+ Kernel ports that support memory protection units (MPUs): The ARMv7-M and
	  ARMv8-M MPU ports now support a privilege access only heap. The ARMv7-M
	  MPU ports now support devices that have 16 MPU regions, have the ability
	  to override default memory attributes for privileged code and data
	  regions, and have the ability to place the FreeRTOS kernel code outside of
	  the Flash memory. The ARMv8-M MPU ports now support tickless idle mode.
	  See https://www.freertos.org/FreeRTOS-MPU-memory-protection-unit.html
	  for more information.

	Additional noteworthy updates:

	+ Code formatting is now automated to facilitate the increase in
	  collaborative development in Git.  The auto-formated code is not identical
	  to the original formatting conventions.  Most notably spaces are now used
	  in place of tabs.
	+ The prototypes for callback functions (those that start with "Application",
	  such as vApplicationStackOverflowHook()) are now in the FreeRTOS header
	  files, removing the need for application writers to add prototypes into
	  the C files in which they define the functions.
	+ New Renesas RXv3 port layer.
	+ Updates to the Synopsys ARC code, including support for EM and HS cores,
	  and updated BSP.
	+ Added new POSIX port layer that allows FreeRTOS to run on Linux hosts in
	  the same way the Windows port layer enables FreeRTOS to run on Windows
	  hosts.
	+ Many other minor optimisations and enhancements. For full details
	  see https://github.com/FreeRTOS/FreeRTOS-Kernel/commits/main


Changes between FreeRTOS V10.3.0 and FreeRTOS V10.3.1 released February 18 2020

	See https://www.FreeRTOS.org/FreeRTOS-V10.3.x.html

	+ ./FreeRTOS-Labs directory was removed from this file. The libraries it
	contained are now available as a separate download.

Changes between FreeRTOS V10.2.1 and FreeRTOS V10.3.0 released February 7 2020

	See https://www.FreeRTOS.org/FreeRTOS-V10.3.x.html

	New and updated kernel ports:

	+ Added RISC-V port for the IAR compiler.
	+ Update the Windows simulator port to use a synchronous object to prevent
	  a user reported error whereby a task continues to run for a short time
	  after being moved to the Blocked state.  Note we were not able to
	  replicate the reported issue and it likely depends on your CPU model.
	+ Correct alignment of stack top in RISC-V port when
	  configISR_STACK_SIZE_WORDS is defined to a non zero value, which causes
	  the interrupt stack to be statically allocated.
	+ The RISC-V machine timer compare register can now be for any HART, whereas
	  previously it was always assumed FreeRTOS was running on HART 0.
	+ Update the sequence used to update the 64-bit machine timer
	  compare register on 32-bit cores to match that suggested in RISC-V
	  documentation.
	+ Added tickless low power modes into the ARM, IAR and GCC Cortex-M0 compiler
	  ports.
	+ Updated the behaviour of the ARMv7-M MPU (Memory Protection Unit) ports to
	  match that of the ARMv8-M ports whereby privilege escalations can only
	  originate from within the kernel's own memory segment.  Added
	  configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY configuration constant.
	+ Update existing MPU ports to correctly disable the MPU before it is
	  updated.
	+ Added contributed port and demo application for a T-Head (formally C-SKY)
	  microcontroller.

	New API functions:

	+ Added the vPortGetHeapStats() API function which returns information on
	  the heap_4 and heap_5 state.
	+ Added xTaskCatchUpTicks(), which corrects the tick count value after the
	  application code has held interrupts disabled for an extended period.
	+ Added xTaskNotifyValueClear() API function.
	+ Added uxTimerGetReloadMode() API function.

	Other miscellaneous changes:
	+ Change type of uxPendedTicks from UBaseType_t to TickType_t to ensure it
	  has the same type as variables with which it is compared to, and therefore
	  also renamed the variable xPendingTicks.
	+ Update Keil projects that use the MPU so memory regions come from linker
	  script (scatter file) variables instead of being hard coded.
	+ Added LPC51U68 Cortex-M0+ demos for GCC (MCUXpresso), Keil and IAR
	  compilers.
	+ Added CORTEX_MPU_STM32L4_Discovery_Keil_STM32Cube demo.
	+ Added LPC54018 MPU demo.
	+ Rename xTaskGetIdleRunTimeCounter() to ulTaskGetIdleRunTimeCounter().


Changes between FreeRTOS V10.2.1 and FreeRTOS V10.2.0 released May 13 2019:

	+ Added ARM Cortex-M23 port layer to complement the pre-existing ARM
	  Cortex-M33 port layer.
	+ The RISC-V port now automatically switches between 32-bit and 64-bit
	  cores.
	+ Introduced the portMEMORY_BARRIER macro to prevent instruction re-ordering
	  when GCC link time optimisation is used.
	+ Introduced the portDONT_DISCARD macro to the ARMv8-M ports to try and
	  prevent the secure side builds from removing symbols required by the
	  non secure side build.
	+ Introduced the portARCH_NAME to provide additional data to select semi-
	  automated build environments.
	+ Cortex-M33 and Cortex-M23 ports now correctly disable the MPU before
	  updating the MPU registers.

	+ Added Nuvoton NuMaker-PFM-M2351 ARM Cortex-M23 demo.
	+ Added LPC55S69 ARM Cortex-M33 demo.
	+ Added an STM32 dual core AMP stress test demo.


Changes between FreeRTOS V10.1.1 and FreeRTOS V10.2.0 released February 25 2019:

	+ Added GCC RISC-V MCU port with three separate demo applications.
	+ Included pre-existing ARM Cortex-M33 (ARMv8-M) GCC/ARMclang and IAR ports
	  with Keil simulator demo.
	+ Update the method used to detect if a timer is active.  Previously the
	  timer was deemed to be inactive if it was not referenced from a list.
	  However, when a timer is updated it is temporarily removed from, then
	  re-added to a list, so now the timer's active status is stored separately.
	+ Add vTimerSetReloadMode(), xTaskGetIdleRunTimeCounter(), and
	  xTaskGetApplicationTaskTagFromISR() API functions.
	+ Updated third party Xtensa port so it is MIT licensed.
	+ Added configINCLUDE_PLATFORM_H_INSTEAD_OF_IODEFINE_H to the Renesas
	  compiler RX600v2 port to enable switching between platform.h and
	  iodefine.h includes within that port's port.c file.
	+ Removed the 'FromISR' functions from the MPU ports as ISRs run privileged
	  anyway.
	+ Added uxTaskGetStackHighWaterMark2() function to enable the return type to
	  be changed without breaking backward compatibility.
	  uxTaskGetStackHighWaterMark() returns a UBaseType_t as always,
	  uxTaskGetStackHighWaterMark2() returns configSTACK_DEPTH_TYPE to allow the
	  user to determine the return type.
	+ Fixed issues in memory protected ports related to different combinations
	  of static memory only and dynamic memory only builds.  As a result the
	  definition of tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE became more
	  complex and was moved to FreeRTOS.h with a table explaining its definition.
	+ Added a 'get task tag from ISR' function.
	+ Change the method used to determine if a timer is active or not from just
	  seeing if it is referenced from the active timer list to storing its
	  active state explicitly.  The change prevents the timer reporting that it
	  is inactive while it is being moved from one list to another.
	+ The pcName parameter passed into the task create functions can be NULL,
	  previously a name had to be provided.
	+ When using tickless idle, prvResetNextTaskUnblockTime() is now only called
	  in xTaskRemoveFromEventList() if the scheduler is not suspended.
	+ Introduced portHAS_STACK_OVERFLOW_CHECKING, which should be set to 1 for
	  FreeRTOS ports that run on architectures that have stack limit registers.


Changes between FreeRTOS V10.1.0 and FreeRTOS V10.1.1 released 7 September 2018

	+ Reverted a few structure name changes that broke several kernel aware
	  debugger plug-ins.
	+ Updated to the latest trace recorder code.
	+ Fixed some formatting in the FreeRTOS+TCP TCP/IP stack code.
	+ Reverted moving some variables from file to function scope as doing so
	  broke debug scenarios that require the static qualifier to be removed.

Changes between FreeRTOS V10.0.1 and FreeRTOS V10.1.0 released 22 August 2018

	FreeRTOS Kernel Changes:

	+ Update lint checked MISRA compliance to use the latest MISRA standard, was
	  previously using the original MISRA standard.
	+ Updated all object handles (TaskHandle_t, QueueHandle_t, etc.) to be
	  unique types instead of void pointers, improving type safety.  (this was
	  attempted some years back but had to be backed out due to bugs in some
	  debuggers).  Note this required the pvContainer member of a ListItem_t
	  struct to be renamed - set configENABLE_BACKWARD_COMPATIBILITY to 1 if
	  this causes an issue.
	+ Added configUSE_POSIX_ERRNO to enable per task POSIX style errno
	  functionality in a more user friendly way - previously the generic thread
	  local storage feature was used for this purpose.
	+ Added Xtensa port and demo application for the XCC compiler.
	+ Changed the implementation of vPortEndScheduler() for the Win32 port to
	  simply call exit( 0 ).
	+ Bug fix in vPortEnableInterrupt() for the GCC Microblaze port to protect
	  the read modify write access to an internal Microblaze register.
	+ Fix minor niggles when the MPU is used with regards to prototype
	  differences, static struct size differences, etc.
	+ The usStackHighWaterMark member of the TaskStatus_t structure now has type
	  configSTACK_DEPTH_TYPE in place of uint16_t - that change should have been
	  made when the configSTACK_DEPTH_TYPE type (which gets around the previous
	  16-bit limit on stack size specifications) was introduced.
	+ Added the xMessageBufferNextLengthBytes() API function and likewise stream
	  buffer equivalent.
	+ Introduce configMESSAGE_BUFFER_LENGTH_TYPE to allow the number of bytes
	  used to hold the length of a message in the message buffer to be reduced.
	  configMESSAGE_BUFFER_LENGTH_TYPE default to size_t, but if, for example,
	  messages can never be more than 255 bytes it could be set to uint8_t,
	  saving 3 bytes each time a message is written into the message buffer
	  (assuming sizeof( size_t ) is 4).
	+ Updated the StaticTimer_t structure to ensure it matches the size of the
	  Timer_t structure when the size of TaskFunction_t does not equal the size
	  of void *.
	+ Update various Xilinx demos to use 2018.1 version of the SDK tools.
	+ Various updates to demo tasks to maintain test coverage.
	+ FreeRTOS+UDP was removed in FreeRTOS V10.1.0 as it was replaced by
	  FreeRTOS+TCP, which was brought into the main download in FreeRTOS
	  V10.0.0.  FreeRTOS+TCP can be configured as a UDP only stack, and
	  FreeRTOS+UDP does not contain the patches applied to FreeRTOS+TCP.

	FreeRTOS+TCP Changes:

	+ Multiple security improvements and fixes in packet parsing routines, DNS
	  caching, and TCP sequence number and ID generation.
	+ Disable NBNS and LLMNR by default.
	+ Add TCP hang protection by default.

	We thank Ori Karliner of Zimperium zLabs Team for reporting these issues.


Changes between FreeRTOS V10.0.0 and FreeRTOS V10.0.1, released December 20 2017

	+ Fix position of "#if defined( __cplusplus )" in stream_buffer.h.
	+ Correct declarations of MPU_xQueuePeek() and MPU_xQueueSemaphoreTake() in
	  mpu_prototypes.h.
	+ Correct formatting in vTaskList() helper function when it prints the state
	  of the currently executing task.
	+ Introduce #error if stream_buffer.c is built without
	  configUSE_TASK_NOTIFICATIONS set to 1.
	+ Update FreeRTOS+TCP to V2.0.0
		- Improve the formatting of text that displays the available netword
		  interfaces when FreeRTOS+TCP is used on Windows with WinPCap.
		- Introduce ipconfigSOCKET_HAS_USER_WAKE_CALLBACK option to enable a user
		  definable callback to execute when data arrives on a socket.

Changes between FreeRTOS V9.0.1 and FreeRTOS V10.0.0:

	The FreeRTOS kernel is now MIT licensed: https://www.FreeRTOS.org/license

	New Features and components:

	+ Stream Buffers - see https://www.FreeRTOS.org/RTOS-stream-buffer-example.html
	+ Message Buffers - see https://www.FreeRTOS.org//RTOS-message-buffer-example.html
	+ Move FreeRTOS+TCP into the main repository, along with the basic Win32
	  TCP demo FreeRTOS_Plus_TCP_Minimal_Windows_Simulator.

	New ports or demos:

	+ Added demo for TI SimpleLink CC3220 MCU.
	+ Added MPU and non MPU projects for Microchip CEC and MEC 17xx and 51xx
	  MCUs.
	+ Added CORTEX_MPU_Static_Simulator_Keil_GCC demo to test static allocation
	  in the MPU port.

	Fixes or enhancements:

	+ Cortex-M ports push additional register prior to calling
	  vTaskSwitchContext to ensure 8-byte alignment is maintained.  Only
	  important if a user defined tick hook function performs an operation that
	  requires 8-byte alignment.
	+ Optimisations to the implementation of the standard tickless idle mode on
	  Cortex-M devices.
	+ Improvements to the Win32 port including using higher priority threads.
	+ Ensure interrupt stack alignment on PIC32 ports.
	+ Updated GCC TriCore port to build with later compiler versions.
	+ Update mpu_wrappers.c to support static allocation.
	+ The uxNumberOfItems member of List_t is now volatile - solving an issue
	  when the IAR compiler was used with maximum optimization.
	+ Introduced configRECORD_STACK_HIGH_ADDRESS.  When set to 1 the stack start
	  address is saved into each task's TCB (assuming stack grows down).
	+ Introduced configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H to allow user defined
	  functionality, and user defined initialisation, to be added to FreeRTOS's
	  tasks.c source file.  When configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H is
	  set to 1 a user provided header file called freertos_task_c_additions.h
	  will be included at the bottom of tasks.c.  Functions defined in that
	  header file can call freertos_tasks_c_additions_init(), which in turn
	  calls a macro called FREERTOS_TASKS_C_ADDITIONS_INIT(), if it is defined.
	  FREERTOS_TASKS_C_ADDITIONS_INIT() can be defined in FreeRTOSConfig.h.
	+ Introduced configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( x ) which can be
	  defined by a user in FreeRTOSConfig.h.  The macro is called before
	  assessing whether to enter tickless idle mode or not.  If the macro sets
	  x to zero then tickless idle mode will not be entered.  This allows users
	  to abort tickless idle mode entry before the tickless idle function is
	  even called - previously it was only possible to abort from within the
	  tickless idle function itself.
	+ Added configPRINTF(), which can be defined by users to allow all libraries
	  to use the same print formatter.
	+ Introduced configMAX() and configMIN() macros which default to standard
	  max( x, y ) and min( x, y ) macro behaviour, but can be overridden if the
	  application writer defines the same macros in FreeRTOSConfig.h.
	+ Corrected the definition of StaticTask_t in the case where
	  INCLUDE_xTaskAbortDelay is set to 1.
	+ Introduced configTIMER_SERVICE_TASK_NAME and configIDLE_TASK_NAME, both of
	  which can be defined to strings in FreeRTOSConfig.h to change the default
	  names of the timer service and idle tasks respectively.
	+ Only fill the stack of a newly created task with a known value if stack
	  checking, or high water mark checking/viewing, is in use - removing the
	  dependency on memset() in other cases.
	+ Introduced xTaskCreateRestrictedStatic() so static allocation can be used
	  with the MPU.
	+ Ensure suspended tasks cannot be unsuspended by a received task
	  notification.
	+ Fix race condition in vTaskSetTimeOutState().
	+ Updated trace recorder files to the latest version.

Changes since FreeRTOS V9.0.0:

	+ Priority dis-inheritance behaviour has been enhanced in the case where a
	  task that attempted to take a mutex that was held by a lower priority task
	  timed out before it was able to obtain the mutex (causing the task that
	  holds the mutex to have its priority raised, then lowered again, in
	  accordance with the priority inheritance protocol).
	+ Split the overloaded xQueueGenericReceive() function into three separate
	  dedicated functions.
	+ Allow the default human readable text names given to the Idle and Timer
	  tasks to be overridden by defining the configIDLE_TASK_NAME and
	  configTIMER_SERVICE_TASK_NAME definitions respectively in FreeRTOSConfig.h.
	+ Introduced configINITIAL_TICK_COUNT to allow the tick count to take a
	  value of than than 0 when the system boots.  This can be useful for
	  testing purposes - although setting configUSE_16_BIT_TICKS to 1 can also
	  be used to test frequent tick overflows.
	+ Ensure the Cortex-M SysTick count is cleared to zero before starting the
	  first task.
	+ Add configASSERT() into ARM Cortex-M ports to check the number of priority
	  bit settings.
	+ Clear the 'control' register before starting ARM Cortex-M4F ports in case
	  the FPU is used before the scheduler is started.  This just saves a few
	  bytes on the main stack as it prevents space being left for a later save
	  of FPU registers.
	+ Added xSemaphoreGetMutexHolderFromISR().
	+ Corrected use of portNVIC_PENDSVSET to portNVIC_PENDSVSET_BIT in MPU ports.
	+ Introduced configSTACK_DEPTH_TYPE to allow users to change the type used
	  to specify the stack size when using xTaskCreate().  For historic reasons,
	  when FreeRTOS was only used on small MCUs, the type was set to uint16_t,
	  but that can be too restrictive when FreeRTOS is used on larger
	  processors.  configSTACK_DEPTH_TYPE defaults to uint16_t.
	  xTaskCreateStatic(), being a newer function, used a uint32_t.
	+ Increase the priority of the Windows threads used by the Win32 port.  As
	  all the threads run on the same core, and the threads run with very high
	  priority, there is a risk that the host will become unresponsive, so also
	  prevent the Windows port executing on single core hosts.

Changes between FreeRTOS V9.0.0 and FreeRTOS V9.0.0rc2 released May 25 2016:

	See https://www.FreeRTOS.org/FreeRTOS-V9.html

	RTOS kernel updates:

	+ The prototype of the new xTaskCreateStatic() API function was modified to
	  remove a parameter and improve compatibility with other new
	  "CreateStatic()" API functions.  The stack size parameter in
	  xTaskCreateStatic() is now uint32_t, which changes the prototype of the
	  callback functions.  See the following URL:
	  https://www.FreeRTOS.org/xTaskCreateStatic.html
	+ GCC ARM Cortex-A port:  Introduced the configUSE_TASK_FPU_SUPPORT
	  constant.  When configUSE_TASK_FPU_SUPPORT is set to 2 every task is
	  automatically given a floating point (FPU) context.
	+ GCC ARM Cortex-A port:  It is now possible to automatically save and
	  restore all floating point (FPU) registers on entry to each potentially
	  nested interrupt by defining vApplicationFPUSafeIRQHandler() instead of
	  vApplicationIRQHandler().
	+ All ARM Cortex-M3/4F/7 ports:  Clear the least significant bit of the task
	  entry address placed onto the stack of a task when the task is created for
	  strict compliance with the ARM Cortex-M3/4/7 architecture documentation
	  (no noticeable effect unless using the QMEU emulator).
	+ Added GCC and Keil ARM Cortex-M4F MPU ports - previously the MPU was only
	  supported on ARM Cortex-M3.
	+ ARM Cortex-M3/4F MPU ports:  Update to fully support the FreeRTOS V9.0.0
	  API (other than static object creation) and added the
	  FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC demo application to
	  demonstrate how to use the updated MPU port.
	+ All ARM Cortex-M3/4F/7 ports:  Add additional barrier instructions to the
	  default low power tickless implementation.
	+ All ARM Cortex-M0 ports:  Prevent an item being left on the stack of the
	  first task that executes.
	+ Win32 ports:  Reduce the amount of stack used and change the way Windows
	  threads are deleted to increase the maximum execution time.
	+ Add an ARM Cortex-M4F port for the MikroC compiler.  Ensure to read the
	  documentation page for this port before use.
	+ MPS430X IAR port:  Update to be compatible with the latest EW430 tools
	  release.
	+ IAR32 GCC port:  Correct vPortExitCritical() when
	  configMAX_API_CALL_INTERRUPT_PRIORITY == portMAX_PRIORITY.
	+ For consistency vTaskGetTaskInfo() now has the alias vTaskGetInfo(),
	  xTaskGetTaskHandle() now has the alias xTaskGetHandle() and
	  pcQueueGetQueueName() now has an alias pcQueueGetName().
	+ Fix various errors in comments and compiler warnings.

	Demo application updates:

	+ Update Atmel Studio projects to use Atmel Studio 7.
	+ Update Xilinx SDK projects to use the 2016.1 version of the SDK.
	+ Remove dependency on legacy IO libraries from the PIC32 demos.
	+ Move the Xilinx UltraScale Cortex-R5 demo into the main distribution.
	+ Update the MSP432 libraries to the latest version.
	+ Add Microchip CEC1302 (ARM Cortex-M4F) demos for GCC, Keil and MikroC
	  compilers.
	+ Move the Atmel SAMA5D2 demo into the main distribution.

Changes between FreeRTOS V9.0.0rc1 and FreeRTOS V9.0.0rc2 (release candidate 2)
released March 30 2016:

	NOTE - See https://www.FreeRTOS.org/FreeRTOS-V9.html for details

	+ The functions that create RTOS objects using static memory allocation have
	  been simplified and will not revert to using dynamic allocation if a
	  buffer is passed into a function as NULL.
	+ Introduced the configSUPPORT_DYNAMIC_ALLOCATION configuration constant to
	  allow a FreeRTOS application to be built without a heap even being being
	  defined. The Win32 example located in the
	  /FreeRTOS/demo/WIN32-MSVC-Static-Allocation-Only directory is provided as
	  a reference for projects that do not include a FreeRTOS heap.
	+ Minor run-time optimisations.
	+ Two new low power tickless implementations that target Silicon Labs EFM32
	  microcontrollers.
	+ Addition of the xTimerGetPeriod() and xTimerGetExpireTime() API functions.

Changes between FreeRTOS V8.2.3 and FreeRTOS V9.0.0rc1 (release candidate 1)
released February 19 2016:

	RTOS Kernel Updates:

	+ Major new feature - tasks, semaphores, queues, timers and event groups can
	  now be created using statically allocated memory, so without any calls to
	  pvPortMalloc().
	+ Major new features - Added the xTaskAbortDelay() API function which allows
	  one task to force another task to immediately leave the Blocked state,
	  even if the event the blocked task is waiting for has not occurred, or the
	  blocked task's timeout has not expired.
	+ Updates necessary to allow FreeRTOS to run on 64-bit architectures.
	+ Added vApplicationDaemonTaskStartupHook() which executes when the RTOS
	  daemon task (which used to be called the timer service task) starts
	  running.  This is useful if the application includes initialisation code
	  that would benefit from executing after the scheduler has been started.
	+ Added the xTaskGetTaskHandle() API function, which obtains a task handle
	  from the task's name.  xTaskGetTaskHandle() uses multiple string compare
	  operations, so it is recommended that it is called only once per task.
	  The handle returned by xTaskGetTaskHandle() can then be stored locally for
	  later re-use.
	+ Added the pcQueueGetQueueName() API function, which obtains the name of
	  a queue from the queue's handle.
	+ Tickless idling (for low power applications) can now also be used when
	  configUSE_PREEMPTION is 0.
	+ If one task deletes another task, then the stack and TCB of the deleted
	  task is now freed immediately.  If a task deletes itself, then the stack
	  and TCB of the deleted task are freed by the Idle task as before.
	+ If a task notification is used to unblock a task from an ISR, but the
	  xHigherPriorityTaskWoken parameter is not used, then pend a context switch
	  that will then occur during the next tick interrupt.
	+ Heap_1.c and Heap_2.c now use the configAPPLICATION_ALLOCATED_HEAP
	  settings, which previously was only used by heap_4.c.
	  configAPPLICATION_ALLOCATED_HEAP allows the application writer to declare
	  the array that will be used as the FreeRTOS heap, and in-so-doing, place
	  the heap at a specific memory location.
	+ TaskStatus_t structures are used to obtain details of a task.
	  TaskStatus_t now includes the bae address of the task's stack.
	+ Added the vTaskGetTaskInfo() API function, which returns a TaskStatus_t
	  structure that contains information about a single task.  Previously this
	  information could only be obtained for all the tasks at once, as an array
	  of TaskStatus_t structures.
	+ Added the uxSemaphoreGetCount() API function.
	+ Replicate previous Cortex-M4F and Cortex-M7 optimisations in some
	  Cortex-M3 port layers.

	Demo Application Updates:

	Further demo applications will be added prior to the final FreeRTOS V9
	release.

	+ Updated SAM4L Atmel Studio project to use Atmel Studio 7.
	+ Added ARM Cortex-A53 64-bit port.
	+ Added a port and demo for the ARM Cortex-A53 64-bit cores on the Xilinx
	  Ultrascale MPSoC.
	+ Added Cortex-M7 SAME70 GCC demo.
	+ Added EFM32 Giant and Wonder Gecko demos.


Changes between V8.2.2 and V8.2.3 released October 16, 2015

	RTOS kernel updates:

	+ Fix bug identified in a modification made in V8.2.2 to the software timer
	  code that allows tickless low power applications to sleep indefinitely
	  when software timers are used.
	+ Simplify and improve efficiency of stack overflow checking.
	+ Add xTaskNotifyStateClear() API function.
	+ New IAR and GCC Cortex-R ports for microprocessors that do not use an ARM
	  generic interrupt controller (GIC).
	+ New PIC32MEC14xx port.
	+ Add support for PIC32MZ EF parts (with floating point) into the PIC32MZ
	  port.
	+ Zynq7000 port layer now declares the functions that setup and clear the
	  tick interrupt as weak symbols so they can be overridden by the
	  application, and uses a global XScuGic object so the same object can be
	  used by the application code.
	+ Introduced configUSE_TASK_FPU_SUPPORT, although the PIC32MZ EF port is
	  currently the only port that uses it.
	+ Updates to RL78 and 78K0 IAR port layers to improve support for
	  combinations of memory models.
	+ Minor updates to heap_5.c to remove compiler warnings generated by some
	  compilers.
	+ License simplifications.  See /FreeRTOS/License/license.txt in the
	  official distribution.

	FreeRTOS+ updates:

	+ Update directory names to use WolfSSL instead of CyaSSL, inline with
	  WolfSSL's re-branding.
	+ Update to latest WolfSSL code.
	+ Update to latest FreeRTOS+Trace recorder code.
	+ Add in the FreeRTOS+Trace recorder library required for streaming trace.

	Demo application changes:

	+ Add demo applications for Renesas RZ/T (Cortex-R), PIC32MZ EF (PIC32 with
	  floating point hardware), PIC32MEC14xx, RX71M, RX113 and RX231.
	+ General tidy up of spelling and compiler warnings.


Changes between V8.2.1 and V8.2.2 released August 12, 2015

	RTOS kernel updates:

	+ Added Intel IA32/x86 32-bit port.
	+ General maintenance.
	+ PRIVILEGED_FUNCTION and PRIVILEGED_DATA macros, which are used in memory
	  protected systems, have been added to the newer event group and software
	  timer functions.
	+ Add the errno definitions used by FreeRTOS+ components into projdefs.h.
	+ Remove the restriction that prevented tick-less idle implementations
	  waiting indefinitely when software timers were used in the same
	  application.
	+ Introduce xTaskNotifyAndQueryFromISR() as the interrupt safe version of
	  xTaskNotifyAndQuery().
	+ Add additional NOPs to the MSP430X port layers to ensure strict compliance
	  with the hardware documentation.
	+ Microblaze port: Added option for port optimised task selection.
	+ Microblaze port: Previously tasks inherited the exception enable state
	  at the time the task was created.  Now all tasks are created with
	  exceptions enabled if the Microblaze design supports exceptions.
	+ Windows port: Add additional safe guards to ensure the correct start up
	  sequence and thread switching timing.
	+ Windows port: Improve the implementation of the port optimised task
	  selection assembly code.
	+ Update heap_4 and heap_5 to allow use on 64-bit processors.
	+ Simplify the code that creates a queue.
	+ General improved tick-less idle behaviour.
	+ Ensure none of the variables in the common kernel files are initialised to
	  anything other than zero.
	+ Correct calculation of xHeapStructSize in heap_4 and heap_5.

	Demo application updates:

	+ Added demo project for the new IA32/x86 port that targets the Galileo
	  hardware.
	+ Added MSP430FR5969 demos (previously provided as a separate download).
	+ Added FreeRTOS BSP repository for automatic creation of FreeRTOS
	  applications in the Xilinx SDK.
	+ Added Atmel Studio / GCC project for the SAMV71 (ARM Cortex-M7)
	+ Update Xilinx SDK projects to use version 2015.2 of the SDK.
	+ Remove Microblaze demos that were using obsolete tools.
	+ Add MSP43FR5969 IAR and CCS demos.

	FreeRTOS+ Updates:

	+ Updated FreeRTOS+Trace recorder library, which requires an update to the
	  FreeRTOS+Trace application.
	+ Added Reliance Edge source code and demo application.  Reliance edge is
	  a fail safe transactional file system ideal for applications that require
	  file storage, and especially when high reliability is essential.
	+ Introduce configAPPLICATION_PROVIDES_cOutputBuffer to allow FreeRTOS+CLI
	  users to place the output buffer at a fixed memory address.
	+ Improve the NetworkInterface.c file provided for the Windows port of
	  FreeRTOS+UDP.

Changes between V8.2.0 and V8.2.1 released 24th March 2015.

	RTOS kernel updates:

	+ Added user definable and flexible thread local storage facility.
	+ Added vTimerSetTimerID() API function to complement the pvTimerGetTimerID()
	  function to allow the timer's ID to be used as timer local storage.
	+ Fixed a potential issue related to the use of queue sets from an ISR.
	+ Some updates to the Xilinx Microblaze GCC port.
	+ Added ARM Cortex-M4F port for Texas Instruments Code Composer Studio.
	+ Added ARM Cortex-M7 r0p1 port layer for IAR, GCC and Keil which contains a
	  minor errata work around.  All other ARM Cortex-M7 core revisions should
	  use the ARM Cortex-M4F port.
	+ Exclude the whole of croutine.c if configUSE_CO_ROUTINES is set to 0.
	+ Change some data types from uint32_t to size_t in preparation for 64-bit
	  Windows port.
	+ Update the PIC32 port to remove deprecation warnings output by the latest
	  XC32 compilers.
	+ Fix bug when xQueueOverwrite() and xQueueOverwrite() from ISR are used to
	  overwrite items in two queues that are part of the same set.

	Demo application updates:

	+ Added demo application for TI's ARM Cortex-M4F based MSP432
	  microcontroller using IAR, Keil and CCS compilers.
	+ Added demo application for STM32F ARM Cortex-M7 based microcontroller
	  using IAR and Keil.
	+ Added demo application for Atmel SAMV71 ARM Cortex-M7 based
	  microcontroller using IAR and Keil.
	+ Added Microblaze demo that uses the 2014.4 version of the Xilinx SDK and
	  runs on the KC705 evaluation board (Kintex FPGA).

Changes between V8.1.2 and V8.2.0 released 16th January 2015

	Changes between release candidate 1 and the official release are restricted
	to maintenance only.

	Significant RTOS kernel updates:

	+ MAJOR NEW FEATURE!  Task notifications.  Please see the following URL for
	  details: https://www.FreeRTOS.org/RTOS-task-notifications.html
	+ NEW HEADER FILE REQUIRED!  Obsolete definitions have been separated into
	  a new header file called FreeRTOS/Source/include/deprecated_definitions.h.
	  This header file must be present to build.  Note some of the obsolete
	  definitions are still used by very old demo application projects.

	Other RTOS kernel updates:

	+ Made xSemaphoreGiveFromISR() a function rather than a macro that calls
	  xQueueGenericSendFromISR().  This allows for major performance
	  enhancements at the expense of some additional code size if both functions
	  are used in the same application.  NOTE:  In most uses cases such use of
	  a semaphore can now be replaced with a task notification which is smaller
	  and faster still.
	+ The TCB is now always allocated such that the task's stack grows away from
	  the TCB (improves debugging of stack overflows as the overflow will not
	  overwrite the task's name).
	+ GCC, IAR and Keil Cortex-M4F ports now use more inlining (performance
	  enhancements at the cost of a little additional code space).
	+ Queues are now allocated with a single call to pvPortMalloc() which
	  allocates both the queue structure and the queue storage area.
	+ Introduced a new critical section macro for reading the tick count that
	  defines away to nothing in cases where the width of the tick allows the
	  tick count to be read atomically (performance benefits - especially when
	  optimisation is on).
	+ Introduced configAPPLICATION_ALLOCATED_HEAP in heap_4.c to allow the
	  application writer to provide their own heap array - and in so doing
	  control the location of the heap.
	+ Introduced configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES which, when set, will
	  include known values in both list and list item structures.  The values
	  are intended to assist debugging.  If the values get overwritten then it
	  is likely application code has written over RAM used by the kernel.
	+ configASSERT()s in all Cortex-M ports used to test the lowest 5 bits of
	  the interrupt control register to detect taskENTER_CRITICAL() being called
	  from an interrupt.  This has been changed to test all 8 bits.
	+ Introduced uxTaskPriorityGetFromISR().
	+ Microblze V8 port now tests XPAR_MICROBLAZE_0_USE_FPU for inequality to 0
	  rather than equality to 1, and 2 and 3 are also valid values.
	+ Cortex-A5 GIC-less port no longer passes the address of the interrupting
	  peripheral into the interrupt handler.
	+ Fix an issue in FreeRTOS-MPU where an attempt was made to free the stack
	  belonging to a task when the task was deleted, even when the stack was
	  allocated statically.
	+ Utility (helper) functions that format task statistic information into
	  human readable tables now pad task names with spaces to ensure columns
	  line up correctly even where task name lengths vary greatly.
	+ Update FreeRTOS+Trace recorder library to version 2.7.0.

	Demo application updates:

	+ Added two new standard demo task sets:  IntSemTest and TaskNotify.
	+ Added port and demo application for Atmel SAMA5D4 Cortex-A5 MPU.
	+ Added demo application for Altera Cyclone V Cortex-A9 MPU.
	+ Updated Zynq demo to use version 2014.4 of Xilinx's SDK and added in
	  demo tasks for new RTOS features.
	+ Updated Atmel SAM4E and SAM4S demos to include a lot of additional test
	  and demo tasks.
	+ Fixed a corner case issue in Atmel SAM4L low power tickless
	  implementation, and added button interrupt handling.
	+ Make the interrupt queue tests more tolerant to heave CPU loads.
	+ Updated MSVC FreeRTOS simulator demo to include the latest standard test
	  and demo tasks.
	+ Updated MingW/Eclipse FreeRTOS simulator demo to match the FreeRTOS MSVC
	  simulator demo.
	+ Updated all demos that use FreeRTOS+Trace to work with the latest trace
	  recorder code.


Changes between V8.1.1 and V8.1.2 released September 2nd 2014

	Move the defaulting of configUSE_PORT_OPTIMISED_TASK_SELECTION into the
	individual port layers where necessary so it does not affect ports that do
	not support the definition.

Changes between V8.1.0 and V8.1.1 released August 29th 2014

	By popular requests - a minor patch to V8.1.0 to re-instate the ability to
	give a mutex type semaphore (with priority inheritance) from an interrupt
	handler.

Changes between V8.0.1 and V8.1.0 released August 26th 2014

	FreeRTOS scheduler, kernel, demo and test updates:

	+ Improved the priority inheritance algorithms to assist integration with
	  off the shelf middleware that may hold multiple mutexes simultaneously.
	+ Introduce heap_5.c, which is similar to heap_4.c but allows the heap to
	  span multiple non-contiguous memory regions.
	+ Updated all Cortex-A9 ports to help trap a couple of common usage errors -
	  the first being when a task incorrectly attempts to exit its implementing
	  function and the second being when a non interrupt safe API function is
	  called from an interrupt.
	+ Update all Cortex-A9 ports to remove obsolete mode switches prior to
	  restoring a task context.
	+ configUSE_PORT_OPTIMISED_TASK_SELECTION now defaults to 1 instead of 0.
	+ Update all Cortex-M3/4F ports to trap a non interrupt safe API function
	  being called from an interrupt handler.
	+ Simplify the alignment checks in heap_4.c.
	+ Update the MSVC Windows simulator demo to use heap_5.c in place of
	  heap_4.c to ensure end users have an example to refer to.
	+ Updated standard demo test code to test the new priority inheritance
	  algorithms.
	+ Updated the standard demo tasks to make use of stdint and the FreeRTOS
	  specific typedefs that were introduced in FreeRTOS V8.0.0.
	+ Introduce the pdMS_TO_TICKS() macro as a more user friendly and intuitive
	  alternative to pdTICKS_PER_MS - both of which can be used to convert a
	  time specified in milliseconds to a time specified in RTOS ticks.
	+ Fix a bug in the Tasking compiler's Cortex-M port that resulted in an
	  incorrect value being written to the basepri register.  This only effects
	  users of the Tasking compiler.
	+ Update the Zynq demo to use version 2014.2 of the SDK and add in an lwIP
	  example that demonstrates lwIP being used with both its raw and sockets
	  interfaces.
	+ Updated the CCS Cortex-R4 port to enable it to be built with the latest
	  CCS compiler.

	New ports and demo applications:

	+ Two Renesas RX64M ports (RXv2 core) and demos introduced, one for the GCC
	  compiler and one for the Renesas compiler.  Both demos use e2 studio.
	+ Generic IAR Cortex-A5 port (without any reliance on a GIC) introduced.
	  The new port is demonstrated on an Atmel SAMA5D3 XPlained board.

	FreeRTOS+ component updates:

	+ Update CyaSSL to the latest version.
	+ Updated the FreeRTOS+ components supplied directly by Real Time Engineers
	  Ltd. to make use of stdint and the FreeRTOS specific typedefs that were
	  introduced in FreeRTOS V8.0.0.
	+ Rework and simplify the FreeRTOS+FAT SL RAM disk driver.

	Miscellaneous updates and maintenance:

	+ Update the IAR and DS-5/ARM RZ demos to target the official RZ RSK
	  hardware in place of the previously targeted Renesas internal (not
	  publicly available) hardware.
	+ Various other maintenance tasks.


Changes between V8.0.0 and V8.0.1 released 2nd May 2014

	+ Minor fixes to the event group functionality that was released in V8.0.0.
	  The 'clear bits from ISR' functionality is now implemented using a
	  deferred interrupt callback instead of a function, and the 'wait bits' and
	  'task sync' functions now correctly clear internal control bits before
	  returning a value in every possible path through the respective functions.
	+ Ensure the updating of internal control data is protected by a critical
	  section after a task is deleted or suspended.
	+ Minor fixes to FreeRTOS+FAT SL - namely seeking beyond the end of a file
	  when the offset was not a multiple of the sector size.
	+ Ensure Cortex-A9 system registers are only ever accessed as 32-bit values,
	  even when only the lest significant byte of the register is implemented.

	Other updates:

	+ Updated the XMC4200 IAR project so it links with version 7.x of the IAR
	  tools.
	+ Add RL78L1C demo.
	+ Add pcTimerGetName() API function.
	+ Call _reclaim_reent() when a task is deleted if configUSE_NEWLIB_REENTRANT
	  is defined.

Changes between V7.6.0 and V8.0.0 released 19th Feb 2014

	https://www.FreeRTOS.org/upgrading-to-FreeRTOS-V8.html

	FreeRTOS V8.x.x is a drop-in compatible replacement for FreeRTOS V7.x.x,
	although a change to the type used to reference character strings may result
	in application code generating a few (easily clearable) compiler warnings
	after the upgrade, and an updated typedef naming convention means use of the
	old typedef names is now discouraged.
	See https://www.FreeRTOS.org/upgrading-to-FreeRTOS-V8.html for full
	information.

	New features and functionality:

	+ Event groups - see https://www.FreeRTOS.org/FreeRTOS-Event-Groups.html
	+ Centralised deferred interrupt processing - see
	  https://www.FreeRTOS.org/xTimerPendFunctionCallFromISR.html

	Other updates:

	+ Previously, when a task left the Blocked state, a context switch was
	  performed if the priority of the unblocked task was greater than or equal
	  to the priority of the Running task.  Now a context switch is only
	  performed if the priority of the unblocked task is greater than the
	  priority of the Running task.
	+ New low power tickless demonstration project that targets the ST STM32L
	  microcontroller - see
	  https://www.FreeRTOS.org/STM32L-discovery-low-power-tickless-RTOS-demo.html
	+ Add xPortGetMinimumEverFreeHeapSize() to heap_4.c.
	+ Small change to the tickless low power implementation on the SAM4L to
	  ensure the alarm value (compare match value) cannot be set to zero when a
	  tickless period is exited due to an interrupt originating from a source
	  other than the RTOS tick.
	+ Update the GCC/Eclipse Win32 simulator demo to make better use of Eclipse
	  resource filters and match the functionality of the MSVC equivalent.
	+ xTaskIsTaskSuspended() is no longer a public function.  Use
	  eTaskGetState() in its place.
	+ Improved trace macros, including tracing of heap usage.
	+ Remove one level of indirection when accepting interrupts on the PIC32MZ.
	+ Add Cortex-A9 GCC port layer.
	+ Add Xilinx Zynq demo application.


Changes between V7.5.3 and V7.6.0 released 18th November 2013

	V7.6.0 changes some behaviour when the co-operative scheduler is used (when
	configUSE_PREEMPTION is set to 0).  It is important to note that the
	behaviour of the pre-emptive scheduler is unchanged - the following
	description only applies when configUSE_PREEMPTION is set to 0:

	WHEN configUSE_PREEMPTION IS SET TO 0 (which is in a small minority of
	cases) a context switch will now only occur when a task places itself into
	the Blocked state, or explicitly calls taskYIELD().  This differs from
	previous versions, where a context switch would also occur when implicitly
	moving a higher priority task out of the Blocked state.  For example,
	previously, WHEN PREEMPTION WAS TURNED OFF, if task A unblocks task B by
	writing to a queue, then the scheduler would switch to the higher priority
	task.  Now, WHEN PREEMPTION IS TURNED OFF, if task A unblocks task B by
	writing to a queue, task B will not start running until task A enters the
	Blocked state or task A calls taskYIELD().  [If configUSE_PREEMPTION is not
	set to 0, so the normal pre-emptive scheduler is being used, then task B
	will start running immediately that it is moved out of the Blocked state].

	Other changes:

	+ Added a port layer and a demo project for the new PIC32MZ architecture.
	+ Update the PIC32MX port layer to re-introduce some ehb instructions that
	  were previously removed, add the ability to catch interrupt stack
	  overflows (previously only task stack overflows were trapped), and also
	  add the ability to catch an application task incorrectly attempting to
	  return from its implementing function.
	+ Make dramatic improvements to the performance of the Win32 simulator port
	  layer.
	+ Ensure tasks that are blocked indefinitely report their state as Blocked
	  instead of Suspended.
	+ Slight improvement to the Cortex-M4F port layers where previously one
	  register was inadvertently being saved twice.
	+ Introduce the xSemaphoreCreateBinary() API function to ensure consistency
	  in the semantics of how each semaphore type is created.  It is no longer
	  recommended to use vSemaphoreCreateBinary() (the version prefixed with a
	  'v'), although it will remain in the code for backward compatibility.
	+ Update the Cortex-M0 port layers to allow the scheduler to be started
	  without using the SVC handler.
	+ Added a build configuration to the PIC32MX MPLAB X demo project that
	  targets the PIC32 USB II starter kit.  Previously all the build
	  configurations required the Explorer 16 hardware.
	+ Some of the standard demo tasks have been updated to ensure they execute
	  correctly with the updated co-operative scheduling behaviour.
	+ Added comprehensive demo for the Atmel SAM4E, including use of
	  FreeRTOS+UDP, FreeRTOS+FAT SL and FreeRTOS+CLI.

	FreeRTOS+ Changes:

	+ Minor maintenance on FreeRTOS+UDP.

Changes between V7.5.2 and V7.5.3 released October 14 2013

	Kernel changes:

	+ Prior to V7.5.x yields requested from the tick hook would occur in the
	  same tick interrupt - revert to that original behaviour.
	+ New API function uxQueueSpacesAvailable().
	+ Introduced the prvTaskExitError() function to Cortex-M0, Cortex-M3/4
	  and Cortex-M4F ports.  prvTaskExitError() is used to trap tasks that
	  attempt to return from their implementing functions (tasks should call
	  vTaskDelete( NULL ); if they want to exit).
	+ The Cortex-M0 version of portSET_INTERRUPT_MASK_FROM_ISR and
	  portCLEAR_INTERRUPT_MASK_FROM_ISR are now fully nestable.
	+ Improved behaviour and robustness of the default Cortex-M tickless idle
	  behaviour.
	+ Add workaround for silicon errata PMU_CM001 in Infineon XMC4000 devices to
	  all Cortex-M4F ports.
	+ Add Cortex-M0 port for Keil.
	+ Updated Cortus port.
	+ Ensure _impure_ptr is initialised before the scheduler is started.
	  Previously it was not set until the first context switch.

	FreeRTOS+ changes:

	+ Update FreeRTOS+UDP to V1.0.1 - including direct integration of the
	  FreeRTOS+Nabto task, improvements to the DHCP behaviour, and a correction
	  to the test that prevents the network event hook being called on the first
	  network down event.  The FreeRTOS+UDP change history is maintained
	  separately.
	+ Correct the __NVIC_PRIO_BITS setting in the LPC18xx.h header files
	  provided in the NXP CMSIS library, then update the interrupts used by the
	  LPC18xx demos accordingly.
	+ Replace double quotes (") with single quotes (') in FreeRTOS+CLI help
	  strings to ensure the strings can be used with the JSON descriptions used
	  in the FreeRTOS+Nabto demos.

	Demo and miscellaneous changes:

	+ Added demo for the Atmel SAMD20 Cortex-M0+.  The demo includes
	  FreeRTOS+CLI
	+ Added a demo for the Infineon Cortex-M0 that can be built with the IAR
	  Keil and GCC tools.
	+ Updated the Infineon XMC4000 demos for IAR, Keil, GCC and Tasking tools,
	  with additional build configurations to directly support the XMC4200 and
	  XMC4400 devices, in addition to the previously supported XMC4500.
	+ Updated the demo application.
	+ Added additional trace macros traceMALLOC and traceFREE to track heap
	  usage.

Changes between V7.5.0 and V7.5.2 released July 24 2013

	V7.5.2 makes the new Cortex-M vPortCheckInterruptPriority() function
	compatible with the STM32 standard peripheral driver library, and adds
	an extra critical section to the default low power tickless mode
	implementation.  Only users of the STM32 peripheral library or the default
	tickless implementation need update from version 7.5.0.

Changes between V7.4.2 and V7.5.0 released July 19 2013

	V7.5.0 is a major upgrade that includes multiple scheduling and efficiency
	improvements, and some new API functions.

	Compatibility information for FreeRTOS users:
	  FreeRTOS V7.5.0 is backward compatible with FreeRTOS V7.4.0 with one
	  exception; the vTaskList() and vTaskGetRunTimeStats() functions are now
	  considered legacy, having been replaced by the single uxTaskGetSystemState()
	  function.  configUSE_STATS_FORMATTING_FUNCTIONS must be set to 1 in
	  FreeRTOSConfig.h for vTaskList() and vTaskGetRunTimeStats() to be
	  available.

	Compatibility information for FreeRTOS port writers:
	  vTaskIncrementTick() is now called xTaskIncrementTick() (because it now
	  returns a value).

	Headline changes:

	+ Multiple scheduling and efficiency improvements.
	+ Core kernel files now pass PC-Lint V8 static checking without outputting
	  any warnings (information on the test conditions will follow).

	New API functions:

	+ uxTaskGetSystemState() https://www.FreeRTOS.org/uxTaskGetSystemState.html
	+ xQueueOverwrite() https://www.FreeRTOS.org/xQueueOverwrite.html
	+ xQueueOverwriteFromISR()
	+ xQueuePeekFromISR()

	The following ports and demos, which were previously available separately,
	are now incorporated into the main FreeRTOS zip file download:

	+ ARM Cortex-A9 IAR
	+ ARM Cortex-A9 ARM compiler
	+ Renesas RZ
	+ Microsemi SmartFusion2

	New FreeRTOSConfig.h settings
	https://freertos.org/a00110.html

	+ configUSE_TIME_SLICING
	+ configUSE_NEWLIB_REENTRANT
	+ configUSE_STATS_FORMATTING_FUNCTIONS
	+ configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS

	Other changes:

	+ (MPU port only) The configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS
	  options provides a mechanism that allows application writers to execute
	  certain functions in privileged mode even when a task is running in user
	  mode.
	+ Ports that support interrupt nesting now include a configASSERT() that
	  will trigger if an interrupt safe FreeRTOS function is called from an
	  interrupt that has a priority designated as above the maximum system/API
	  call interrupt priority.
	+ The included FreeRTOS+Trace recorder code has been updated to the latest
	  version, and the demo applications that use the trace recorder code have
	  been updated accordingly.
	+ The FreeRTOS Windows Simulator (MSVC version only) has been updated to
	  include a new basic 'blinky' build option in addition to the original
	  comprehensive build option.
	+ Improve RAM usage efficiency of heap_4.c and heap_2.c.
	+ Prevent heap_4.c from attempting to free memory blocks that were not
	  allocated by heap_4.c, or have already been freed.
	+ As FreeRTOS now comes with FreeRTOS+FAT SL (donated by HCC) the Chan FATfs
	  files have been removed from FreeRTOS/Demo/Common.
	+ Fix build error when R4 port is build in co-operative mode.
	+ Multiple port and demo application maintenance activities.

Changes between V7.4.1 and V7.4.2 released May 1 2013

	NOTE: There are no changes in the FreeRTOS kernel between V7.4.1 and V7.4.2

	+ Added FreeRTOS+FAT SL source code and demo project.  The demo project
	  runs in the FreeRTOS Windows simulator for easy and hardware independent
	  experimentation and evaluation.  See https://www.FreeRTOS.org/fat_sl

Changes between V7.4.0 and V7.4.1 released April 18 2013

	+ To ensure strict conformance with the spec and ensure compatibility with
	  future chips data and instruction barrier instructions have been added to
	  the yield macros of Cortex-M and Cortex-R port layers.  For efficiency
	  the Cortex-M port layer "yield" and "yield" from ISR are now implemented
	  separately as the barrier instructions are not required in the ISR case.
	+ Added FreeRTOS+UDP into main download.
	+ Reorganised the FreeRTOS+ directory so it now matches the FreeRTOS
	  directory with Source and Demo subdirectories.
	+ Implemented the Berkeley sockets select() function in FreeRTOS+UDP.
	+ Changed (unsigned) casting in calls to standard library functions with
	  (size_t) casting.
	+ Added the Atmel SAM4L and Renesas RX100 demos that demonstrates the
	  tickless (tick suppression) low power FreeRTOS features.
	+ Add a new RL78 IAR demo that targets numerous new RL78 chips and
	  evaluation boards.
	+ Adjusted stack alignment on RX200 ports to ensure an assert was not
	  falsely triggered when configASSERT() is defined.
	+ Updated the Cortex_M4F_Infineon_XMC4500_IAR demo to build with the latest
	  version of EWARM.
	+ Corrected header comments in the het.c and het.h files (RM48/TMS570 demo).


Changes between V7.3.0 and V7.4.0 released February 20 2013

	+ New feature:  Queue sets.  See:
	  https://www.FreeRTOS.org/Pend-on-multiple-rtos-objects.html
	+ Overhauled the default tickless idle mode implementation provided with the
	  ARM Cortex-M3 port layers.
	+ Enhanced tickless support in the core kernel code with the introduction of
	  the configEXPECTED_IDLE_TIME_BEFORE_SLEEP macro and the
	  eTaskConfirmSleepModeStatus() function.
	+ Added the QueueSet.c common demo/test file.  Several demo applications
	  have been updated to use the new demo/test tasks.
	+ Removed reliance on the PLIB libraries from the MPLAB PIC32 port layer and
	  demo applications.
	+ Added the FreeRTOS+Trace recorder code to the MSVC Win32 demo.
	+ Renamed eTaskStateGet() to eTaskGetState() for consistency, and added a
	  pre-processor macro for backward compatibility with the previous name.
	+ Updated functions implemented in the core queue.c source file to allow
	  queue.h to be included from the .c file directly (this prevents compiler
	  warnings that were generated by some compilers).
	+ Updated the CCS Cortex-R4 port layer to replace the CLZ assembler function
	  with the CLZ compiler intrinsic that is provided by the latest versions of
	  the CCS ARM compiler.
	+ Updated all heap_x.c implementations to replace the structure that was
	  used to ensure the start of the heap was aligned with a more portable
	  direct C code implementation.
	+ Added support for PIC24 devices that include EDS.
	+ Minor optimisations to the PIC32 port layer.
	+ Minor changes to tasks.c that allow the state viewer plug-ins to display
	  additional information.
	+ Bug fix:  Update prvProcessReceivedCommands() in timers.c to remove an
	  issue that could occur if the priority of the timer daemon task was set
	  below the priority of tasks that used timer services.
	+ Update the FreeRTOS+Trace recorder code to the latest version.

Changes between V7.2.0 and V7.3.0 released October 31 2012

	+ Added ability to override the default scheduler task selection mechanism
	  with implementations that make use of architecture specific instructions.
	+ Added ability to suppress tick interrupts during idle time, and in so
	  doing, provide the ability to make use of architecture specific low power
	  functionality.
	+ Added the portSUPPRESS_TICKS_AND_SLEEP() macro and vTaskStepTick() helper
	  function.
	+ Added the configSYSTICK_CLOCK_HZ configuration constant.
	+ Reworked the Cortex-M3 and Cortex-M4F port layers for GCC, Keil and IAR to
	  directly support basic power saving functionality.
	+ Added hooks to allow basic power saving to be augmented in the application
	  by making use of chip specific functionality.
	+ Minor change to allow mutex type semaphores to be used from interrupts
	  (which would not be a normal usage model for a mutex).
	+ Change the behaviour of the interrupt safe interrupt mask save and restore
	  macros in the Cortex-M ports.  The save macro now returns the previous
	  mask value.  The restore macro now uses the previous mask value.  These
	  changes are not necessary for the kernel's own implementation, and are
	  made purely because the macros were being used by application writers.
	+ Added eTaskStateGet() API function.
	+ Added port specific optimisations to the PIC32 port layer, and updated the
	  PIC32 demo applications to make use of this new feature.
	+ Added port specific optimisations to the Win32 simulator port.
	+ Added new ports and demo applications for the TI Hercules RM48 and TMS570
	  safety microcontrollers.
	+ Added SAM3 demos targeting the ATSAM3S-EK2 and ATSAM3X-EK evaluation
	  boards.
	+ Updated the PIC32 MPLAB X project to manually set the compiler include
	  paths instead of using the IDE entry box following reports that the
	  include paths were somehow being deleted.
	+ Improved character handling in FreeRTOS+CLI.

Changes between V7.1.1 and V7.2.0 released 14 August 2012

	FreeRTOS V7.2.0 is backward compatible with FreeRTOS V7.1.2.

	+ Added a FreeRTOS+ sub-directory.  The directory contains some FreeRTOS+
	  source code, and example projects that use the FreeRTOS Win32 simulator.
	+ Added a new example heap allocation implementation (heap_4.c) that
	  includes memory block coalescence.
	+ Added a demo that targets the Atmel SAM4S Cortex-M4 based microcontroller.
	  The demo is preconfigured to build using the free Atmel Studio 6 IDE and
	  GCC compiler.
	+ Added xSemaphoreTakeFromISR() implementation.
	+ The last parameter in ISR safe FreeRTOS queue and semaphore functions
	  (xHigherPriorityTaskWoken) is now optional and can be set to NULL if it
	  is not required.
	+ Update the IAR and MSP430X ports to clear all lower power mode bits before
	  exiting the tick interrupt [bug fix].
	+ Allow xQueueReset() to be used, even when the queues event lists are not
	  empty.
	+ Added a vQueueDelete() handler for the FreeRTOS MPU port (this was
	  previously missing).
	+ Updated the vPortSVCHandler() functions in the FreeRTOS MPU port layer to
	  ensure it compiles with the latest ARM GCC compilers from Linaro.
	+ Updated the prvReadGP() function in the NIOS II port to ensure the compiler
	  can choose any register for the functions parameter (required at high
	  compiler optimisation levels).
	+ Add #error macros into the Keil and IAR Cortex-M ports to ensure they
	  cannot be built if the user has set configMAX_SYSCALL_INTERRUPT_PRIORITY
	  to 0.
	+ Added comments in the FreeRTOSConfig.h files associated with Cortex-M3 and
	  Cortex-M4 demos stating that the configMAX_SYSCALL_INTERRUPT_PRIORITY
	  parameter must not be set to 0.
	+ Introduce new INCLUDE_xQueueGetMutexHolder configuration constant
	  (defaulted to 0).
	+ Added two new list handling macros - for internal use only in upcoming new
	  products.
	+ Removed all mention of the legacy vTaskStartTrace and ulTaskEndTrace
	  macros.  FreeRTOS+Trace supersedes the legacy trace.
	+ Added a configASSERT() into the vPortFree() function in heap_1.c as it is
	  invalid for the function to be called.
	+ Made the xRxLock and xTxLock members of the queue structure volatile.
	  This is probably not necessary, and is included as a precautionary
	  measure.
	+ Modify the assert() that checks to see if the priority passed into an
	  xTaskCreate() function is within valid bounds to permit the assert to be
	  used in the FreeRTOS MPU port.
	+ The software timer service (daemon) task is now created in a way that
	  to ensure compatibility with FreeRTOS MPU.

Changes between V7.1.0 and V7.1.1 released May 1 2012

	New ports:

	The following ports are brand new:
	+ Cortex-M3 Tasking

	The following ports have been available as separate downloads for a number
	of months, but are now included in the main FreeRTOS download.
	+ Cortex-M0 IAR
	+ Cortex-M0 GCC
	+ Cortex-M4F GCC (with full floating point support)


	New demos:

	The following demos are brand new:
	+ Renesas RX63N RDK (Renesas compiler)

	The following demos have been available as separate downloads for a number
	of months, but are now included in the main FreeRTOS download.
	+ NXP LPC1114 GCC/LPCXpresso
	+ ST STM32F0518 IAR
	+ Infineon XMC4500 GCC/Atollic
	+ Infineon XMC4500 IAR
	+ Infineon XMC4500 Keil
	+ Infineon XMC4500 Tasking


	Kernel miscellaneous / maintenance:

	+ Introduced the portSETUP_TCB() macro to remove the requirement for the
	  Windows simulator to use the traceTASK_CREATE() macro, leaving the trace
	  macro available for use by FreeRTOS+Trace (https://www.FreeRTOS.org/trace).
	+ Added a new trace macro, traceMOVE_TASK_TO_READY_STATE(), to allow future
	  FreeRTOS+Trace versions to provide even more information to users.
	+ Updated the FreeRTOS MPU port to be correct for changes that were
	  introduced in FreeRTOS V7.1.0.
	+ Introduced the xQueueReset() API function.
	+ Introduced the xSemaphoreGetMutexHolder() API function.
	+ Tidy up various port implementations to add the static key word where
	  appropriate, and remove obsolete code.
	+ Slight change to the initial stack frame given to the RX600 ports to allow
	  them to be used in the Eclipse based E2Studio IDE without confusing GDB.
	+ Correct the alignment given to the initial stack of Cortex-M4F tasks.
	+ Added a NOP following each DINT instruction on MSP430 devices for strict
	  conformance with the instructions on using DINT.
	+ Changed the implementation of thread deletes in the Win32 port to prevent
	  the port making use of the traceTASK_DELETE() trace macros - leaving this
	  macro free for use by FreeRTOS+Trace.
	+ Made some benign changes to the RX600 Renesas compiler port layer to
	  ensure the code can be built to a library without essential code being
	  removed by the linker.
	+ Reverted the change in the name of the uxTaskNumber variable made in
	  V7.1.0 as it broke the IAR plug-in.


	Demo miscellaneous / maintenance:

	+ The command interpreter has now been formally released as FreeRTOS+CLI,
	  and been moved out of the main FreeRTOS download, to instead be available
	  from the FreeRTOS+ Ecosystem site https://www.FreeRTOS.org/plus.
	+ flash_timer.c/h has been added to the list of standard demo tasks.  This
	  performs the same functionality as the flash.c tasks, but using software
	  timers in place of tasks.
	+ Upgraded the PIC32 demo as follows:  Changes to how the library functions
	  are called necessitated by the new compiler version, addition of MPLAB X
	  project with PIC32MX360, PIC32MX460 and PIC32MX795 configurations,
	  addition of simply blinky demo, updated FreeRTOSConfig.h to include more
	  parameters, addition of hook function stubs.
	+ The MSP430X IAR and CCS demos have been updated to ensure the power
	  settings are correct for the configured CPU frequency.
	+ Rowley CrossWorks projects have been updated to correct the "multiple
	  definition of ..." warnings introduced when the toolchain was updated.
	+ Updated various FreeRTOSConfig.h header files associated with projects
	  that build with Eclipse to include a #error statement informing the user
	  that the CreateProjectDirectoryStructure.bat batch file needs to be
	  executed before the projects can be opened.
	+ Renamed directories that included "CCS4" in their name to remove the '4'
	  and instead just be "CCS".  This is because the demo was updated and
	  tested to also work with later Code Composer Studio versions.
	+ Updated the TCP/IP periodic timer frequency in numerous uIP demos to be
	  50ms instead of 500ms.

Changes between V7.0.2 and V7.1.0 released December 13 2011

	New ports:

	+ Cortex-M4F IAR port.
	+ Cortex-M4F Keil/RVDS port.
	+ TriCore GCC port.

	New demos:

	+ NXP LPC4350 using the Keil MDK, and demonstrated on a Hitex development
	  board.
	+ ST STM32F407 using the IAR Embedded Workbench for ARM, and demonstrated on
	  the IAR STM32F407ZG-SK starter kit.
	+ Infineon TriCore TC1782, using the GCC compiler, demonstrated on the
	  TriBoard TC1782 evaluation board.
	+ Renesas RX630, using the Renesas compiler and HEW, demonstrated on an
	  RX630 RSK (Renesas Starter Kit).

	Miscellaneous / maintenance:

	+ Removed all calls to printf() from the K60/IAR Kinetis demo so the project
	  can execute stand alone - without being connected to the debugger.
	+ Completed the command interpreter framework.  Command handlers now receive
	  the entire command string, giving them direct access to parameters.
	  Utility functions are provided to check the number of parameters, and
	  return parameter sub-strings.
	+ The previously documented fix for the bug in xTaskResumeFromISR() that
	  effected (only) ports supporting interrupt nesting has now been
	  incorporated into the main release.
	+ The portALIGNMENT_ASSERT_pxCurrentTCB() definition has been added to allow
	  specific ports to skip the second stack alignment check when a task is
	  created.  This is because the second check is not appropriate for some
	  ports - including the new TriCore port where the checked pointer does not
	  actually point to a stack.
	+ The portCLEAN_UP_TCB() macro has been added to allow port specific clean
	  up when a task is deleted - again this is required by the TriCore port.
	+ Various other minor changes to ensure warning free builds on a growing
	  number of microcontroller and toolchain platforms.  This includes a
	  (benign) correction to the prototype of the
	  vApplicationStackOverflowHook() definition found in lots of recent demos.

	Trace system:

	+ The legacy trace mechanism has been completely removed - it has been
	  obsolete for the years since the trace macros were introduced.  The
	  configuration constant configUSE_TRACE_FACILITY is now used to optionally
	  include additional queue and task information.  The additional information
	  is intended to make the trace mechanism more generic, and allow the trace
	  output to provide more information.  When configUSE_TRACE_FACILITY is set
	  to 1:
		- the queue structure includes an additional member to hold the queue
		  type, which can be base, mutex, counting semaphore, binary semaphore
		  or recursive mutex.
		- the queue structure includes an additional member to hold a queue
		  number.  A trace tool can set and query the queue number for its own
		  purposes.  The kernel does not use the queue number itself.
		- the TCB structure includes an additional member to hold a task number
		  number.  A trace tool can set and query the task number for its own
		  purposes.  The kernel does not use the task number itself.
	+ Queues and all types of semaphores are now automatically allocated their
	  type as they are created.
	+ Added two new trace macros - traceTASK_PRIORITY_INHERIT() and
	  traskTASK_PRIORITY_DISINHERIT().
	+ Updated the traceQUEUE_CREATE_FAILED() macro to take a parameter that
	  indicates the type of queue, mutex, or semaphore that failed to be
	  created.
	+ The position from which traceCREATE_MUTEX() is called has been moved from
	  after the call to xQueueGenericSend() [within the same function] to before
	  the call.  This ensures the trace events occur in the correct order.
	+ The value passed into tracePRIORITY_SET() has been corrected for the case
	  where vTaskPrioritySet() is called with a null parameter.

Changes between V7.0.1 and V7.0.2 released September 20 2011

	New ports:

	+ The official FreeRTOS Renesas RX200 port and demo application have been
	  incorporated into the main FreeRTOS zip file download.
	+ The official FreeRTOS Renesas RL78 port and demo application have been
	  incorporated into the main FreeRTOS zip file download.
	+ The official FreeRTOS Freescale Kinetis K60 tower demo application has
	  been incorporated into the main FreeRTOS zip file download.  This includes
	  an embedded web server example.
	+ A new Microblaze V8 port layer has been created to replace the older, now
	  deprecated, port layer.  The V8 port supports V8.x of the Microblaze IP,
	  including exceptions, caches, and the floating point unit.  A new
	  Microblaze demo has also been added to demonstrate the new Microblaze V8
	  port layer.  The demo application was created using V13.1 of the Xilinx
	  EDK, and includes a basic embedded web server that uses lwIP V1.4.0.
	+ The official FreeRTOS Fujitsu FM3 MB9A310 demo application has been
	  incorporated into the main FreeRTOS zip file download.  Projects are
	  provided for both the IAR and Keil toolchains.


	API additions:

	+ xTaskGetIdleTaskHandle() has been added.
	+ xTaskGetTimerDaemonTaskHandle() has been added.
	+ pcTaskGetTaskName() has been added.
	+ vSemaphoreDelete() macro has been added to make it obvious how to delete
	  a semaphore.  In previous versions vQueueDelete() had to be used.
	+ vTaskCleanUpResources() has been removed.  It has been obsolete for a
	  while.
	+ portPOINTER_SIZE_TYPE has been introduced to prevent compiler warnings
	  being generated when the size of a pointer does not match the size of
	  the stack type.  This will (has already) be used in new ports, but will
	  not be retrofitted to existing ports until the existing port itself is
	  updated.

	Other updates and news:

	+ The core files have all been modified to tighten the coding standard even
	  further.  These are style, not functional changes.
	+ All ARM7 port layers have been slightly modified to prevent erroneous
	  assert() failures when tasks are created and configASSERT() is defined.
	+ All ARM IAR projects have been updated to build with the latest V6.2.x
	  versions of the IAR Embedded Workbench for ARM tools (EWARM).  This was
	  necessary due to a change in the way EWARM uses the CMSIS libraries.
	+ The PIC32 port layer has been updated in preparation for V2 of the C32
	  compiler.
	+ The old Virtex-4 Microblaze demo has been marked as deprecated.  Please
	  use the brand new Spartan-6 port and demo in its place.
	+ The bones of a new generic command interpreter is located in
	  FreeRTOS/Demo/Common/Utils/CommandInterpreter.c.  This is still a work in
	  progress, and not documented.  It is however already in use.  It will be
	  documented in full when the projects that are already using it are
	  completed.
	+ A couple of new standard demos have been included.  First, a version of
	  flop.c called sp_flop.c.  This is similar to flop.c, but uses single
	  precision floats in place of double precision doubles.  This allows the
	  for testing ports to processors that have only single precision floating
	  point units, and revert to using emulated calculations whenever a double
	  is used.  Second, comtest_strings.c has been included to allow the test
	  of UART drivers when an entire string is transmitted at once.  The
	  previous comtest.c only used single character transmission and reception.
	+ lwIP V1.4.0 is now included in the FreeRTOS/Demo/Common directory, and
	  used by a couple of new demos.

Changes between V7.0.0 and V7.0.1 released May 13 2011

	+ Added a Fujitsu FM3 demo application for both the IAR and Keil tool
	  chains.
	+ Added a SmartFusion demo application for all of the IAR, Keil and
	  SoftConsole (GCC/Eclipse) tool chains.
	+ Updated the RX600 port and demo applications to take into account the
	  different semantics required when using the latest (V1.0.2.0) version of
	  the Renesas compiler.
	+ Modified the RX600 Ethernet driver slightly to make it more robust under
	  heavy load, and updated the uIP handling task to make use of the FreeRTOS
	  software timers.
	+ Slightly changed the PIC32 port layer to move an ehb instruction in line
	  with the recommendations of the MIPS core manual, and ensure 8 byte stack
	  alignment is truly always obtained.
	+ Changed the behaviour when tasks are suspended before the scheduler has
	  been started.  Before, there needed to be at least one task that was not
	  in the suspended state.  This is no longer the case.

Changes between V6.1.1 and V7.0.0 released April 8 2011

	FreeRTOS V7.0.0 is backward compatible with FreeRTOS V6.x.x

	Main changes:

	+ Introduced a new software timer implementation.
	+ Introduced a new common demo application file to exercise the new timer
	  implementation.
	+ Updated the Win32/MSVC simulator project to include the new software timer
	  demo tasks and software timer tick hook test.  Much simpler software timer
	  demonstrations are included in the demo projects for both of the new ports
	  (MSP430X with CCS4 and STM32 with TrueStudio).
	+ Various enhancements to the kernel implementation in tasks.c.  These are
	  transparent to users and do not effect the pre-existing API.
	+ Added calls to configASSERT() within the kernel code.  configASSERT() is
	  functionally equivalent to the standard C assert() macro, but does not
	  rely on the compiler providing assert.h.

	Other changes:

	+ Updated the MSP430X IAR port and demo project to include support for the
	  medium memory model.
	+ Added a demo project for the MSP430X that targets the MSP430X Discovery
	  board and uses the Code Composer Studio 4 tools.  This demo includes use
	  of the new software timer implementation.
	+ Added an STM32F100RB demo project that targets the STM32 Discovery Board
	  and uses the TrueStudio Eclipse based IDE from Atollic.
	+ Removed some compiler warnings from the PSoC demo application.
	+ Updated the PIC32 port layer to ensure the
	  configMAX_SYSCALL_INTERRUPT_PRIORITY constant works as expected no matter
	  what its value is (within the valid range set by the microcontroller
	  kernel).
	+ Updated the PIC24, dsPIC and PIC32 projects so they work with the latest
	  MPLAB compiler versions from Microchip.
	+ Various cosmetic changes to prepare for a standards compliance statement
	  that will be published after the software release.


Changes between V6.1.0 and V6.1.1 released January 14 2011

	+ Added two new Windows simulator ports.  One uses the free Microsoft Visual
	  Studio 2010 express edition, and the other the free MingW/Eclipse
	  environment.  Demo projects are provided for both.
	+ Added three demo projects for the PSoC 5 (CYAC5588).  These are for the
	  GCC, Keil, and RVDS build tools, and all use the PSoC Creator IDE.
	+ Added a demo for the low power STM32L152 microcontroller using the IAR
	  Embedded Workbench.
	+ Added a new port for the MSP430X core using the IAR Embedded Workbench.
	+ Updated all the RX62N demo projects that target the Renesas Demonstration
	  Kit (RDK) to take into account the revered LED wiring on later hardware
	  revisions, and the new J-Link debug interface DLL.
	+ Updated all the RX62N demo projects so the IO page served by the example
	  embedded web server works with all web browsers.
	+ Updated the Red Suite projects to work with the up coming Red Suite
	  release, and to use a more recent version of the CMSIS libraries.
	+ Added the traceTAKE_MUTEX_RECURSIVE_FAILED() trace macro.
	+ Removed the (pointless) parameter from the traceTASK_CREATE_FAILED()
	  trace macro.
	+ Introduced the portALT_GET_RUN_TIME_COUNTER_VALUE() macro to compliment
	  the already existing portGET_RUN_TIME_COUNTER_VALUE().  This allows for
	  more flexibility in how the time base for the run time statistics feature
	  can be implemented.
	+ Added a "cpsie i" instruction before the "svc 0" instruction used to start
	  the scheduler in each of the Cortex M3 ports.  This is to ensure that
	  interrupts are globally enabled prior to the "svc 0" instruction being
	  executed in cases where interrupts are left disabled by the C start up
	  code.
	+ Slight optimisation in the run time stats calculation.

Changes between V6.0.5 and V6.1.0 released October 6 2010

	+ Added xTaskGetTickCountFromISR() function.
	+ Modified vTaskSuspend() to allow tasks that have just been created to be
	  immediately suspended even when the kernel has not been started.  This
	  allows them to effectively start in the Suspended state - a feature that
	  has been asked for on numerous occasions to assist with initialisation
	  procedures.
	+ Added ports for the Renesas RX62N using IAR, GCC and Renesas tool suites.
	+ Added a STM32F103 demo application that uses the Rowley tools.
	+ Under specific conditions xFreeBytesRemaining within heap_2.c could end up
	  with an incorrect	value.  This has been fixed.
	+ xTaskCreateGeneric() has a parameter that can be used to pass the handle
	  of the task just created out to the calling task.  The assignment to this
	  parameter has been moved to ensure it is assigned prior to the newly
	  created having any possibility of executing.  This takes into account the
	  case where the assignment is made to a global variable that is accessed by
	  the newly created task.
	+ Fixed some build time compiler warnings in various FreeTCPIP (based on
	  uIP) files.
	+ Fixed some build time compiler warnings in Demo/Common/Minimal/IntQueue.c.

Changes between V6.0.4 and V6.0.5 released May 17 2010

	+ Added port and demo application for the Cortus APS3 processor.

Changes between V6.0.3 and V6.0.4 released March 14 2010

	+ All the contributed files that were located in the Demo/Unsupported_Demos
	  directory have been removed.  These files are instead now available in the
	  new  Community Contributions section of the FreeRTOS website.  See
	  https://www.FreeRTOS.org/RTOS-contributed-ports.html
	+ The project file located in the Demo/CORTEX_STM32F107_GCC_Rowley directory
	  has been upgraded to use V2.x of the Rowley Crossworks STM32 support
	  package.
	+ An initial Energy Micro EFM32 demo has been included.  This will be
	  updated over the coming months to make better use of the low power modes
	  the EFM32 provides.

Changes between V6.0.2 and V6.0.3 released February 26 2010

	+ SuperH SH7216 (SH2A-FPU) port and demo application added.
	+ Slight modification made to the default implementation of
	  pvPortMallocAligned() and vPortFreeAligned() macros so by default they
	  just call pvPortMalloc() and vPortFree().  The macros are only needed to
	  be defined when a memory protection unit (MPU) is being used - and then
	  only depending on other configuration settings.

Changes between V6.0.1 and V6.0.2 released January 9th 2010

	+ Changed all GCC ARM 7 ports to use 0 as the SWI instruction parameter.
	  Previously the parameter was blank and therefore only an implicit 0 but
	  newer GCC releases do not permit this.
	+ Updated IAR SAM7S and SAM7X ports to work with IAR V5.40.
	+ Changed the stack alignment requirement for PIC32 from 4 bytes to 8 bytes.
	+ Updated prvListTaskWithinSingleList() is it works on processors where the
	  stack grows up from low memory.
	+ Corrected some comments.
	+ Updated the startup file for the RVDS LPC21xx demo.

Changes between V6.0.0 and V6.0.1 released November 15th 2009

	+ Altered pxPortInitialiseStack() for all Cortex-M3 ports to ensure the
	  stack pointer is where the compiler expects it to be when a task first
	  starts executing.

	  The following minor changes only effect the Cortex-M3 MPU port:

	+ portRESET_PRIVILEGE() assembly macro updated to include a clobber list.
	+ Added prototypes for all the privileged function wrappers to ensure no
	  compile time warnings are generated no matter what the warning level
	  setting.
	+ Corrected the name of portSVC_prvRaisePrivilege to
	  portSVC_RAISE_PRIVILEGE.
	+ Added conditional compilation into xTaskGenericCreate() to prevent some
	  compilers issuing warnings when portPRIVILEGE_BIT is defined as zero.


Changes between V5.4.2 and V6.0.0 released October 16th 2009

	FreeRTOS V6 is backward compatible with FreeRTOS V5.x.

	Main changes:

	+ FreeRTOS V6 is the first version to include memory protection unit (MPU)
	  support.  Two ports now exist for the Cortex M3, the standard FreeRTOS
	  which does not include MPU support, and FreeRTOS-MPU which does.
	+ xTaskCreateRestricted() and vTaskAllocateMPURegions() API functions added
	  in support of FreeRTOS-MPU.
	+ Wording for the GPL exception has been (hopefully) clarified.  Also the
	  license.txt file included in the download has been fixed (the previous
	  version contained some corruption).

	Other changes:

	+ New API function xPortGetFreeHeapSize() added to heap_1.c and heap_2.c.
	+ ARM7 GCC demo interrupt service routines wrappers have been modified to
	  call the C portion using an __asm statement.  This prevents the function
	  call being inlined at higher optimisation levels.
	+ ARM7 ports now automatically set the THUMB bit if necessary when
	  setting up the initial stack of a task - removing the need for
	  THUMB_INTERWORK to be defined.  This also allows THUMB mode and ARM mode
	  tasks to be mixed more easily.
	+ All ARM7/9 ports now have portBYTE_ALIGNMENT set to 8 by default.
	+ Various demo application project files have been updated to be up to date
	  with the latest IDE versions.
	+ The linker scripts used with command line GCC demos have been updated to
	  include an eh_frame section to allow their use with the latest Yagarto
	  release.  Likewise the demo makefiles have been updated to include
	  command line options to reduce or eliminate the eh_frame section all
	  together.
	+ The definition of portBYTE_ALIGNMENT_MASK has been moved out of the
	  various memory allocation files and into the common portable.h header
	  file.
	+ Removed unnecessary use of portLONG, portSHORT and portCHAR.
	+ Added LM3Sxxxx demo for Rowley CrossWorks.
	+ Posix simulator has been upgraded - see the corresponding WEB page on the
	  FreeRTOS.org site.


Changes between V5.4.1 and V5.4.2 released August 9th 2009

	+ Added a new port and demo app for the Altera Nios2 soft core.
	+ Added LPC1768 demo for IAR.
	+ Added a USB CDC demo to all LPC1768 demos (Code Red, CrossWorks and IAR).
	+ Changed clock frequency of LPC1768 demos to 99MHz.

Changes between V5.4.0 and V5.4.1 released July 25th 2009

	+ New hook function added.  vApplicationMallocFailedHook() is (optionally)
	  called if pvPortMalloc() returns NULL.
	+ Additional casting added to xTaskCheckForTimeOut().  This prevents
	  problems that can arise should configUSE_16_BIT_TICKS be set to 1 on a
	  32 bit architecture (which would probably be a mistake, anyway).
	+ Corrected the parameter passed to NVIC_SetPriority() to set the MAC
	  interrupt priority in both LPC1768 demos.
	+ Decreased the default setting of configMINIMAL_STACK_SIZE in the PIC32
	  demo application to ensure the heap space was not completely consumed
	  before the scheduler was started.

Changes between V5.3.1 and V5.4.0 released July 13th 2009

	+ Added Virtex5 / PPC440 port and demos.
	+ Replaced the LPC1766 Red Suite demo with an LPC1768 Red Suite demo.  The
	  original demo was configured to use engineering samples of the CPU.  The
	  new demo has an improved Ethernet driver.
	+ Added LPC1768 Rowley demo with zero copy Ethernet driver.
	+ Reworked byte alignment code to ensure 8 byte alignment works correctly.
	+ Set configUSE_16_BIT_TICKS to 0 in the PPC405 demo projects.
	+ Changed the initial stack setup for the PPC405 to ensure the small data
	  area pointers are setup correctly.

Changes between V5.3.0 and V5.3.1 released June 21st 2009

	+ Added ColdFire V1 MCF51CN128 port and WEB server demo.
	+ Added STM32 Connectivity Line STM32107 Cortex M3 WEB server demo.
	+ Changed the Cortex M3 port.c asm statements to __asm so it can be
	  compiled using Rowley CrossWorks V2 in its default configuration.
	+ Updated the Posix/Linux simulator contributed port.

Changes between V5.2.0 and V5.3.0 released June 1st 2009

	Main changes:

	+ Added new (optional) feature that gathers statistics on the amount of CPU
	  time used by each task.
	+ Added a new demo application for the Atmel AT91SAM3U Cortex-M3 based
	  microcontroller.
	+ Added a new demo application for the NXP LPC1766 Cortex-M3 based
	  microcontroller.
	+ Added a contributed port/demo that allows FreeRTOS to be 'simulated' in a
	  Linux environment.

	Minor changes:
	+ Updated the Stellaris uIP WEB server demos to include the new run time
	  statistics gathering feature - and include a served WEB page that
	  presents the information in a tabular format.
	+ Added in the lwIP port layer for the Coldfire MCF52259.
	+ Updated the CrossWorks LPC2368 WEB server to include an image in the
	  served content.
	+ Changed some of the timing in the initialisation of the LPC2368 MAC to
	  permit its use on all part revisions.
	+ Minor modifications to the core uIP code to remove some compiler warnings.
	+ Added xTaskGetApplicationTaskTag() function and updated the OpenWatcom
	  demo to make use of the new function.
	+ Added contributed demos for AVR32 AP7000, STM32 Primer 2 and STM32 using
	  Rowley Crossworks.
	+ Heap_1.c and Heap_2.c used to define structures for the purpose of data
	  alignment.  These have been converted to unions to save a few bytes of
	  RAM that would otherwise be wasted.
	+ Remove the call to strncpy() used to copy the task name into the TCB when
	  the maximum task name is configured to be 1 byte long.

Changes between V5.1.2 and V5.2.0 released March 14th 2009

	+ Optimised the queue send and receive functions (also used by semaphores).
	+ Replaced the standard critical sections used to protect BIOS calls in the
	  PC port to instead use scheduler locks.  This is because the BIOS calls
	  always return with interrupts enabled.
	+ Corrected unclosed comments in boot.s.

Changes between V5.1.1 and V5.1.2 released February 9th 2009

	+ Added NEC V850ES port and demo.
	+ Added NEC 78K0R port and demo.
	+ Added MCF52259 port and demo.
	+ Added the AT91SAM9XE port and demo.
	+ Updated the MCF52233 FEC driver to work around a silicon bug that
	  prevents the part auto negotiating some network parameters.
	+ Minor modifications to the MCF52233 makefile to permit it to be used
	  on Linux hosts.
	+ Updated the STM32 primer files to allow them to be built with the latest
	  version of the RIDE tools.
	+ Updated the threads.js Java script used for kernel aware debugging in
	  the Rowley CrossWorks IDE.


Changes between V5.1.0 and V5.1.1 released November 20, 2008

	+ Added Coldfire MCF52233 WEB server demo using GCC and Eclipse.
	+ Added IAR MSP430 port and demo.
	+ Corrected several compiler time issues that had crept in as tool versions
	  change.
	+ Included FreeRTOS-uIP - a faster uIP.  This is not yet complete.

Changes between V5.0.4 and V5.1.0 released October 24, 2008

	+ Added a new port and demo application for the ColdFire V2 core using the
	  CodeWarrior development tools.
	+ Replaced the ARM7 demo that used the old (and now no longer supported)
	  Keil compiler with a new port that uses the new Keil/RVDS combo.
	+ Stack overflow checking now works for stacks that grow up from low
	  memory (PIC24 and dsPIC).
	+ BUG FIX - set the PIC32 definition of portSTACK_GROWTH to the correct
	  value of -1.
	+ MSP430 port layers have been updated to permit tasks to place the
	  microcontroller into power down modes 1 to 3.  The demo applications have
	  likewise been updated to demonstrate the new feature.
	+ Replaced the two separate MSP430/Rowley port layers with a single and more
	  flexible version.
	+ Added more contributed ports, including ports for NEC and SAM9
	  microcontrollers.
	+ Changed the linker script used in the LPC2368 Eclipse demo.

Changes between V5.0.3 and V5.0.4 released September 22, 2008

	+ Completely re-written port for ColdFire GCC.
	+ Bug fix:  All Cortex M3 ports have a minor change to the code that sets
	  the pending interrupt.
	+ Some header files require that FreeRTOS.h be included prior to their
	  inclusion.  #error message have been added to all such header file
	  informing users to the cause of the compilation error should the headers
	  not be included in the correct order.

Changes between V5.0.2 and V5.0.3 released July 31, 2008

	Changes relating to the Cortex M3:

	+ Added configMAX_SYSCALL_INTERRUPT_PRIORITY usage to all the Cortex M3
	  ports and demos.  See the port documentation pages on the FreeRTOS.org
	  WEB site for full usage information.
	+ Improved efficiency of Cortex M3 port even further.
	+ Ensure the Cortex M3 port works no matter where the vector table is
	  located.
	+ Added the IntQTimer demo/test tasks to a demo project for each CM3 port
	  (Keil, GCC and IAR) to test the new configMAX_SYSCALL_INTERRUPT_PRIORITY
	  functionality.
	+ Added the mainINCLUDE_WEB_SERVER definition to the LM3SXXXX IAR and Keil
	  projects to allow the WEB server to be conditionally excluded from the
	  build and therefore allow use of the KickStart (code size limited)
	  compiler version.

	Other changes:

	+ Moved the PIC24 and dsPIC versions of vPortYield() from the C file to
	  an assembly file to allow use with all MPLAB compiler versions.  This also
	  allows the omit-frame-pointer optimisation to be turned off.

Changes between V5.0.0 and V5.0.2 released May 30, 2008

	+ Updated the PIC32 port to allow queue API calls to be used from
	  interrupts above the kernel interrupt priority, and to allow full
	  interrupt nesting.  Task stack usages has also been reduced.
	+ Added a new PowerPC port that demonstrates how the trace macros can be
	  used to allow the use of a floating point co-processor.  The
	  traceTASK_SWITCHED_OUT() and traceTASK_SWITCHED_INT() macros are used to
	  save and restore the floating point context respectively for those tasks
	  that actually use floating point operations.
	+ BUG FIX:  The first PPC405 port contained a bug in that it did not leave
	  adequate space above the stack for the backchain to be saved when a task
	  started to execute for the first time.
	+ Updated queue.c to add in the means to allow interrupt nesting and for
	  queue API functions to be called from interrupts that have a priority
	  above the kernel priority.  This is only supported on PIC32 ports thus
	  far.
	+ Fixed the compiler warnings that were generated when the latest version
	  of WinAVR was used.
	+ Remove all inline usage of 'inline' from the core kernel code.
	+ Added the queue registry feature.  The queue registry is provided as a
	  means for kernel aware debuggers to locate queue definitions.  It has no
	  purpose unless you are using a kernel aware debugger.  The queue registry
	  will only be used when configQUEUE_REGISTRY_SIZE is greater than zero.
	+ Added the ST Cortex-M3 drivers into the Demo/Common/Drivers directory to
	  prevent them from having to be included in multiple demos.
	+ Added a Keil STM32 demo application.
	+ Changed the blocktim.c test files as it is no longer legitimate for all
	  ports to call queue API functions from within a critical section.
	+ Added the IntQueue.c test file to test the calling of queue API functions
	  from different interrupt priority levels, and test interrupt nesting.

Changes between V5.0.0 and V5.0.1

	+ V5.0.1 was a customer specific release.

Changes between V4.8.0 and V5.0.0 released April 15, 2008

	*** VERY IMPORTANT INFORMATION ON UPGRADING TO FREERTOS.ORG V5.0.0 ***

	The parameters to the functions xQueueSendFromISR(), xQueueSendToFrontFromISR(),
	xQueueSendToBackFromISR() and xSemaphoreGiveFromISR() have changed.  You must
	update all calls to these functions to use the new calling convention!  Your
	compiler might not issue any type mismatch warnings!


	Other changes:

	+ Support added for the new Luminary Micro LM3S3768 and LM3S3748 Cortex-M3
	  microcontrollers.
	+ New task hook feature added.
	+ PowerPC demo updated to use version 10.1 of the Xilinx EDK.
	+ Efficiency gains within the PIC32 port layer.

Changes between V4.7.2 and V4.8.0 released March 26 2008

	+ Added a Virtex4 PowerPC 405 port and demo application.
	+ Added optional stack overflow checking and new
	  uxTaskGetStackHighWaterMark() function.
	+ Added new xQueueIsQueueEmptyFromISR(), xQueueIsQueueFullFromISR() and
	  uxQueueMessagesWaitingFromISR() API functions.
	+ Efficiency improvements to the Cortex-M3 port layer.  NOTE: This
	  requires that an SVC handler be installed in the application.
	+ Efficiency improvements to the queue send and receive functions.
	+ Added new trace macros.  These are application definable to provide
	  a flexible trace facility.
	+ Implemented the configKERNEL_INTERRUPT_PRIORITY within the Keil Cortex
	  M3 port layer (bringing it up to the same standard as the IAR and GCC
	  versions).
	+ Ports that used the arm-stellaris-eabi-gcc tools have been converted to
	  use the arm-non-eabi-gcc tools.

Changes between V4.7.1 and V4.7.2 released February 21, 2008

	+ Added Fujitsu MB91460 port and demo.
	+ Added Fujitsu MB96340 port and demo.
	+ Tidied up the capitalisation of include files to facilitate builds on
	  Linux hosts.
	+ Removed some redundant casting that was generating warnings - but was
	  included to remove warnings on other compilers.

Changes between V4.7.0 and V4.7.1 released February 3, 2008

	+ Updated all IAR ARM projects to use V5.11 of the IAR Embedded Workbench
	  for ARM.
	+ Introduced recursive semaphore feature.
	+ Updated LPC2368 demos to take into account silicon bugs in old chip
	  revisions.
	+ Updated STR9 uIP port to manually set the net mask and gateway addresses.
	+ Updating demos to allow more to run with the co-operative scheduler.
	+ Fixed co-operative scheduler behaviour upon the occurrence of a tick
	  interrupt while the scheduler was suspended.
	+ Updated documentation contained within semphr.h.
	+ ARM7 GCC ports no longer use the IRQ attribute.

Changes between V4.6.1 and V4.7.0 released December 6, 2007

	+ Introduced the counting semaphore macros and demo source files.  The
          Open Watcom PC project has been updated to include the new demo.  See
          the online documentation for more information.
	+ Introduced the 'alternative' queue handling API and demo source files.
	  The Open Watcom PC project has been updated to include the new demo
	  source files.  See the online documentation for more information.
	+ Added AT91SAM7X Eclipse demo project.
	+ Added the STM32 primer demo project for the GCC compiler and Ride IDE.
	+ Removed the .lock files that were mistakenly included in the V4.6.1
	  eclipse workspaces.

Changes between V4.6.0 and V4.6.1 released November 5 2007

	+ Added support for the MIPS M4K based PIC32.
	+ Added 'extern "C"' to all the header files to facilitate use with C++.

Changes between V4.5.0 and V4.6.0 released October 28 2007

	+ Changed the method used to force a context switch within an ISR for the
	  ARM7/9 GCC ports only.  The portENTER_SWITCHING_ISR() and
	  portEXIT_SWITCHING_ISR() macros are no longer supported.  This is to
	  ensure correct behaviour no matter which GCC version is used, with or
	  without the -fomit-frame-pointer option, and at all optimisation levels.
	+ Corrected the prototype for xQueueGenericSend() within queue.h.

Changes between V4.4.0 and V4.5.0 released September 17 2007

	+ Added the xQueueSendToFront(), xQueueSendToBack() and xQueuePeek()
	  functionality.  These should now be used in preference to the old
	  xQueueSend() function - which is maintained for backward compatibility.
	+ Added Mutex functionality.  The behaviour of mutexes is subtly different
	  to the already existing binary semaphores as mutexes automatically
	  include a priority inheritance mechanism.
	+ Added the GenQTest.c and QPeek.c to test and demonstrate the behaviour
	  of the new functionality.
	+ Updated the LM3Sxxxx and PC ports to include the new GenQTest.c and
	  QPeek.c files.
	+ Updated the GCC port for the Cortex M3 to include the
	  configKERNEL_INTERRUPT_PRIORITY functionality.  This was previously only
	  included in the IAR port.
	+ Optimised the GCC and IAR port layer code - specifically the context
	  switch code.
	+ Consolidated the LM3Sxxxx EK demos for all development tools into a
	  single project that automatically detects which version of the EK the
	  application is executing on.
	+ Added Eclipse support for LM3Sxxxx evaluation kits.
	+ Added Eclipse support for the Keil LPC2368 evaluation kit.
	+ Added the Demo/Drivers directory to hold code that is common to multiple
	  demo application projects.
	+ Included some minor bug fixes in the uIP 1.0 code.
	+ Added an lwIP demo for the STR9 - thanks ST for assistance.
	+ Updated the AVR32 port to ensure correct behaviour with full compiler
	  optimisation.
	+ Included binaries for OpenOCD FTDI and parallel port interfaces.

Changes between V4.4.0 and V4.3.1 released July 31, 2007

	+ Added AVR32 UC3B demo application.
	+ Updated AVR32 UC3A port and demo applications.
	+ Added IAR lwIP demo for AVR32 UC3A.
	+ Updated listGET_OWNER_OF_NEXT_ENTRY() to assist compiler optimisation
	  (thanks Niu Yong for making the suggestion).
	+ Added xTaskGetSchedulerState() API function.
	+ BUG FIX:  Corrected behaviour when tasks that are blocked indefinitely
	  have their block time adjusted (within xQueueSend() and xQueueReceive()),
	  and are the subject of a call the vTaskResume() when they are not
	  actually in the Suspended state (thanks Dan Searles for reporting the
	  issues).


Changes between V4.3.0 and V4.3.1 released June 11, 2007

	+ Added STMicroelectronics STM32 Cortex-M3 demo application.
	+ Updated ustdlib.c for the GCC LM3S6965 demo.

Changes between V4.2.1 and V4.3.0 released June 5, 2007

	+ Introduced configKERNEL_INTERRUPT_PRIORITY to the IAR Cortex-M3, PIC24
	  and dsPIC ports.  See the LM3S6965 and PIC24 demo application
	  documentation pages for more information.
	+ Updated the PIC24 and dsPIC demos to build with V3.0 of the PIC30 GCC
	  tools, and changed the demo applications.
	+ Added demos for the new Ethernet and CAN enabled Luminary Micro Stellaris
	  microcontrollers.
	+ Corrected bug in uIP the demos that prevented frames of approximately 1480
	  bytes and over from being transmitted.
	+ Included the LPC2368/uIP/Rowley demo into the main FreeRTOS.org
	  download.
	+ Update to WizC PIC18 port to permit its use with version 14 of the
	  compiler.  Thanks Marcel!

Changes between V4.2.1 and V4.2.0 released April 2, 2007

	+ Added AVR32 AT32UC3A ports for GCC and IAR.
	+ Added -fomit-frame-pointer option to lwIP SAM7X demo makefile.
	+ Moved location of call to LCD_Init() in STR9 demo to ensure it is only
	  called after the scheduler has been started.

Changes between V4.1.3 and V4.2.0 released February 8, 2007

	+ Changes to both task.c and queue.c as a result of testing performed on
	  the SafeRTOS code base.
	+ Added Cortex-M3 LM3S811 demos for GCC and IAR tools.

Changes between V4.1.2 and V4.1.3 released November 19, 2006

	+ Added STR750 ARM7 port using the Raisonance RIDE/GCC tools.
	+ Added -fomit-frame-pointer option to Rowley ARM7 demos as work around
	  to GCC bug at some optimisation levels.
	+ Altered the way the heap is defined in the LM3S811 Keil demo to prevent
	  the RAM usage from counting toward the code size limit calculation.
	+ CO-ROUTINE BUG FIX:  Removed the call to prvIsQueueEmpty from within
	  xQueueCRReceive as it exited with interrupts enabled.  Thanks Paul Katz.
	+ Tasks that block on events with a timeout of portMAX_DELAY are now
	  blocked indefinitely if configINCLUDE_vTaskSuspend is defined.
	  Previously portMAX_DELAY was just the longest block time possible. This
	  is still the case if configINCLUDE_vTaskSuspend is not defined.
	+ Minor changes to some demo application files.

Changes between V4.1.1 and V4.1.2 released October 21, 2006

	+ Added 16bit PIC ports and demos.
	+ Added STR750 port and demo.


Changes between V4.1.0 and V4.1.1 released September 24, 2006

	+ Added the Luminary Micro Stellaris LM3S811 demo application.

Changes between V4.0.5 and V4.1.0 released August 28, 2006

	+ Prior to V4.1.0, under certain documented circumstances, it was possible
	  for xQueueSend() and xQueueReceive() to return without having completed
	  and without their block time expiring.  The block time effectively
	  stated a maximum block time, and the return value of the function needed
	  to be checked to determine the reason for returning.  This is no longer
	  the case as the functions will only return once the block time has
	  expired or they are able to complete their operation.  It is therefore no
	  longer necessary to wrap calls within loops.
	+ Changed the critical section handling in the IAR AVR port to correct the
	  behaviour when used with later compiler versions.
	+ Added the LPC2138 CrossWorks demo into the zip file.  Previously this was
	  only available as a separate download.
	+ Modified the AVR demo applications to demonstrate the use of co-routines.

Changes between V4.0.4 and V4.0.5 released August 13, 2006

	+ Introduced API function xTaskResumeFromISR().  Same functionality as
	  xTaskResume(), but can be called from within an interrupt service routine.
	+ Optimised vListInsert() in the case when the wake time is the maximum
	  tick count value.
	+ Bug fix:  The 'value' of the event list item is updated when the priority
	  of a task is changed.  Previously only the priority of the TCB itself was
	  changed.
	+ vTaskPrioritySet() and vTaskResume() no longer use the event list item.
	  This has not been necessary since V4.0.1 when the xMissedYield handling
	  was added.
	+ Lowered the PCLK setting on the ARM9 STR9 demo from 96MHz to 48MHz.
	+ When ending the scheduler - do not try to attempt a context switch when
	  deleting the current task.
	+ SAM7X EMAC drivers:  Corrected the Rx frame length mask when obtaining
	  the length from the rx descriptor.


Changes between V4.0.3 and V4.0.4 released June 22, 2006

	+ Added a port and demo application for the STR9 ARM9 based processors from
	  ST.
	+ Slight optimisation to the vTaskPrioritySet() function.
	+ Included the latest uIP version (1.0) in the demo/common/ethernet
	  directory.

Changes between V4.0.2 and V4.0.3 released June 7, 2006

	+ Added a port and demo application for the Cortex-M3 target using the IAR
	  development tools.
	+ The ARM Cortex-m3 Rowley projects have been updated to use V1.6 of the
	  CrossStudio tools.
	+ The heap size defined for the lwIP Rowley demo has been reduced so that
	  the project will link correctly when using the command line GCC tools
	  also.  The makefile has also been modified to allow debugging.
	+ The lwIP Rowley demo not includes a 'kernel aware' debug window.
	+ The uIP Rowley project has been updated to build with V1.6 of CrossWorks.
	+ The second set of tasks in the blockQ demo were created the wrong way
	  around (inconsistent to the description in the file).  This has been
	  corrected.

Changes between V4.0.1 and V4.0.2 released May 28, 2006

	+ Port and demo application added for the Tern Ethernet Engine controller.
	+ Port and demo application added for MC9S12 using GCC, thanks to
	  Jefferson "imajeff" Smith.
	+ The function vTaskList() now suspends the scheduler rather than disabling
	  interrupts during the creation of the task list.
	+ Allow a task to delete itself by passing in its own handle.  Previously
	  this could only be done by passing in NULL.
	+ Corrected the value passed to the WDG_PeriodValueConfig() library
	  function in the STR71x demo.
	+ The tick hook function is now called only within a tick isr.  Previously
	  it was also called when the tick function was called during the scheduler
	  unlocking process.
	+ The EMAC driver in the SAM7X lwIP demo has been made more robust as per
	  the thread: https://sourceforge.net/forum/message.php?msg_id=3714405
	+ In the PC ports:  Add function prvSetTickFrequencyDefault() to set the
	  DOS tick back to its proper value when the scheduler exits.  Thanks
	  Raynald!
	+ In the Borland x86 ports there was a mistake in the portFIRST_CONTEXT
	  macro where the BP register was not popped from the stack correctly.  The
	  BP value would never get used so this did not cause a problem, but it has
	  been corrected all the same.


Changes between V4.0.0 and V4.0.1 released April 7 2006

	+ Improved the ARM CORTEX M3 ports so they now only have to service
	  pendSV interrupts.
	+ Added a Luminary Micro port and demo for use with Rowley CrossWorks.
	+ Added the xMissedYield handling to tasks.c.

Changes between V3.2.4 and V4.0.0

	Major changes:

	+ Added new RTOS port for Luminary Micros ARM CORTEX M3 microcontrollers.
	+ Added new co-routine functionality.

	Other kernel changes:

	+ An optional tick hook call is now included in the tick function.
	+ Introduced the xMiniListItem structure and removed the list pxHead
	  member in order to reduce RAM usage.
	+ Added the following definitions to the FreeRTOSConfig.h file included
	  with every port:
		configUSE_TICK_HOOK
		configUSE_CO_ROUTINES
		configMAX_CO_ROUTINE_PRIORITIES
	+ The volatile qualification has been changed on the list members to allow
	  the task.c code to be tidied up a bit.
	+ The scheduler can now be started even if no tasks have been created!
	  This is to allow co-routines to run when there are no tasks.
	+ A task being woken by an event will now preempt the currently running task
	  even if its priority is only equal to the currently running task.

	Port and demo application changes:

	+ Updated the WinAVR demo to compile with the latest version of WinAVR
	  with no warnings generated.
	+ Changed the WinAVR makefile to make chars signed - needed for the
	  co-routine code if BaseType_t is set to char.
	+ Added new demo application file crflash.c.  This demonstrates co-routine
	  functionality including passing data between co-routines.
	+ Added new demo application file crhook.c.  This demonstrates co-routine
	  and tick hook functionality including passing data between and ISR and
	  a co-routine.
	+ Some NOP's were missing following stmdb{}^ instructions in various ARM7
	  ports.  These have been added.
	+ Updated the Open Watcom PC demo project to include the crflash and crhook
	  demo co-routines as an example of their use.
	+ Updated the H8S demo to compile with the latest version of GCC.
	+ Updated the SAM7X EMAC drivers to take into account the hardware errata
	  regarding lost packets.
	+ Changed the default MAC address used by some WEB server demos as the
	  original addresses used was not liked by some routers.
	+ Modified the SAM7X/IAR startup code slightly to prevent it hanging on
	  some systems when the code is executed using a j-link debugger.  The
	  j-link macro file configures the PLL before the code executes so
	  attempting to configure it again in the startup code was causing a
	  problem for some user.  Now a check is performed first to see if the
	  PLL is already set up.
	+ GCC port now contain all assembler code in a single asm block rather than
	  individual blocks as before.
	+ GCC LPC2000 code now explicitly uses R0 rather than letting the assembler
	  choose the register to use as a temporary register during the context
	  switch.
	+ Added portNOP() macro.
	+ The compare match load value on LPC2000 ports now has 1 added to correct
	  the value used.
	+ The minimal stack depth has been increased slightly on the WIZC PIC18
	  port.

Changes between V3.2.3 and V3.2.4

	+ Modified the GCC ARM7 port layer to allow use with GCC V4.0.0 and above.
	  Many thanks to Glen Biagioni for the provided update.
	+ Added a new Microblaze port and demo application.
	+ Modified the SAM7X EMAC demo to default to use the MII interface rather
	  than the RMII interface.
	+ Modified the startup sequence of the SAM7X demo slightly to allow the
	  EMAC longer to auto negotiate.

Changes between V3.2.2 and V3.2.3

	+ Added MII interface support to the SAM7X EMAC peripheral driver.
	  Previously versions worked with the RMII interface only.
	+ Added command line GCC support to the SAM7X lwIP demo.  Previously the
	  project could only be built using the CrossWorks IDE.  Modifications to
	  this end include the addition of a standard makefile and linker script to
	  the download, and some adjustments to the stacks allocated to each task.
	+ Changed the page returned by the lwIP WEB server demo to display the
	  task status table rather than the TCP/IP statistics.
	+ Corrected the capitalisation of some header file includes and makefile
	  dependencies to facilitate use on Linux host computers.
	+ The various LPC2000 ports had a mistake in the timer setup where the
	  prescale value was written to T0_PC instead of T0_PR.  This would have
	  no effect unless a prescale value was actually required.  This has been
	  corrected.

Changes between V3.2.1 and V3.2.2 - Released 23 September, 2005

	+ Added an IAR port for the Philips LPC2129
	+ The Atmel ARM7 IAR demo project files are now saved in the IAR Embedded
	  Workbench V4.30a format.
	+ Updated the J-Link macro file included with the SAM7X uIP demo project
	  to allow the demo board to be reset over the J-Link.

Changes between V3.2.0 and V3.2.1 - Released 1 September, 2005

	+ Added lwIP demo for AT91SAM7X using Rowley tools.
	+ Added uIP demo for AT91SAM7X using IAR tools.
	+ Added function xTaskGetCurrentTaskHandle().
	+ Renamed events.h to mevents.h to prevent it conflicting with the events.h
	  generated automatically by the HCS12 processor expert utility.  events.h
	  is only used by the PC demo application.
	+ Both PIC18 ports now initialise the TBLPTRU to 0 as this is the value
	  expected by the compiler, and the compilers do not write to this
	  register.
	+ The HCS12 banked model demo now creates the 'suicide' tasks immediately
	  prior to starting the scheduler.  These tasks should be the last tasks to
	  get started in order for the test to function correctly.

Changes between V3.1.1 and V3.2.0 - Released 29 June, 2005

	V3.2.0 introduces two new MSP430 ports and corrects a minor kernel
	issues.  Thanks to Ares.qi for his input.

	+ Added two MSP430 ports that use the Rowley CrossWorks development tools.
	  One port just mirrors the existing GCC port.  The other port was provided
	  by Milos Prokic.  Thanks!
	+ V3.2.0 corrects the behavior when vTaskPrioritySet() or vTaskResume()
	  are called while the scheduler is locked (by a call to
	  vTaskSuspendAll()).  When this is done the subject task now starts to
	  execute immediately when the scheduler is unlocked if it has the highest
	  priority that is ready to run.  Previously there was a possibility that
	  the task would not run until the next RTOS tick or call to portYIELD().
	+ Another similar small correction ensures that in the case where more than
	  one task is blocked on a semaphore or queue, the task with the highest
	  priority is guaranteed to be unblocked first.
	+ Added a couple of more test tasks to the PC demo which cover the points
	  above.

Changes between V3.1.0 and V3.1.1 - Released 21st June, 2005

	This release updates the HCS12 port.  The common kernel code
	remains unchanged.

	+ Updated the HCS12 port to support banking and introduced a demo
	  application for the MC9S12DP256.  The new demo application is
	  located in the Demo/HCS12_CodeWarrior_banked directory.
	+ The name of the directory containing the MC9S12F32 demo application
	  has been changed to Demo/HCS12_CodeWarrior_small (as in 'small'
	  memory model).
	+ MC9S12F32 demo updated slightly to use the PLL.  The CPU speed for the
	  demo application is now 24MHz.  Previously it was 8MHz.
	+ The demo application file Demo/Common/Minimal/death.c has a slight
	  alteration to prevent it using floating point variables.


Changes between V3.0.0 and V3.1.0 - Released 11th June, 2005

	+ Added new ports for ST Microsystems STR71x, and Freescale HCS12
	  microcontrollers.  Currently the HCS12 port is limited to the small
	  memory model.  Large memory models will be supported in the next
	  release.
	+ PIC18 wizC port updated.  Thanks to Marcel van Lieshout for his
	  continuing contribution.
	+ The accuracy of the AVR port timer setup has been improved.  Thanks to
	  Thomas Krutmann for this contribution.
	+ Added a new conditional compilation macro configIDLE_SHOULD_YIELD.
	  See the WEB documentation for details.
	+ Updated the CrossWorks uIP demo to build with V1.4 of CrossWorks.
	+ Slight modification to the SAM7 release build configuration to correct
	  an include path definition.
	+ Updated the MPLAB PIC18 documentation to provide extra details on linker
	  file configuration.

Changes between V3.0.0 and V2.6.1 - Released 23rd April, 2005

	V3.0.0 includes many enhancements, so this history list is broken into
	subsections as follows:

		API changes
		New ports
		Directory name changes
		Kernel and miscellaneous changes changes

	- API changes

		+ Each port now defines BaseType_t as the data type that is most
		  efficient for that architecture.  The type BaseType_t is used
		  extensively in API calls necessitating the following changes to the
		  FreeRTOS API function prototypes.

		  See the "New for V3.0.0" section of the FreeRTOS online
		  documentation for full details of API changes.

	- New ports

		+ The AT91FR40008 ARM7 port contributed by John Feller is now included
		  in the download (thanks John!).
		+ The PIC18 port for the wizC/fedC compiler contributed by Marcel van
		  Lieshout is now included in the download (thanks Marcel!).
		+ The IAR port for the AVR microcontroller has been upgraded to V3.0.0
		  and is now a supported port.

	- Directory name changes

		For consistency, and to allow integration of the new ports, the
		following directory names have been changed.

		+ The source/portable/GCC/ARM7 directory has been renamed
		  source/portable/GCC/ARM7_LPC2000 so it is compatible with the naming
		  of other GCC ARM7 ports.
		+ The Demo/PIC directory has been renamed Demo/PIC18_MPLAB to
		  accommodate the wizC/fedC PIC port.
		+ The demo applications for the two AVR ports no longer share the same
		  directory.  The WinAVR demo is in the Demo/AVR_ATMega323_WinAVR
		  directory and the IAR port in the Demo/AVR_ATMega323_IAR directory.


	- Kernel and miscellaneous changes changes

		  See the "New for V3.0.0" section of the FreeRTOS online
		  documentation for more information.

		+ Previously 'portmacro.h' contained some user editable definitions
		  relating to the user application, and some fixed definitions relating
		  specifically to the port being used.  The application specific
		  definitions have been removed from 'portmacro.h' and placed inside a
		  new header file called 'FreeRTOSConfig.h'.  'portmacro.h' should now
		  never be modified by the user.  A 'FreeRTOSConfig.h' is now included
		  in each of FreeRTOS/Demo subdirectories - as it's settings relate to
		  the demo application rather than being specific to the port.
		+ Introduced configUSE_IDLE_HOOK in idle task.
		+ The idle task will yield when another idle priority task is ready to
		  run. Previously the idle task would run to the end of its time slice
		  regardless.
		+ The idle task is now created when the scheduler is started.  This
		  requires less stack than the previous scheme where it was created upon
		  creation of the first application task.
		+ The function usPortCheckFreeStackSpace() has been renamed
		  usTaskCheckFreeStackSpace() and moved from the portable layer to
		  tasks.c.
		+ Corrected spelling of portMINMAL_STACK_SIZE to portMINIMAL_STACK_SIZE.
		+ The portheap.c file included with the AVR port has been deleted.  The
		  AVR demo now uses the standard heap1 sample memory allocator.
		+ The GCC AVR port is now build using the standard make utility.  The
		  batch files used previously have been deleted.  This means a recent
		  version of WinAVR is required in order to create a binary suitable for
		  source level debugging.
		+ vTaskStartScheduler() no longer takes the configUSE_PREEMPTION
		  constant as a parameter.  Instead the constant is used directly within
		  tasks.c  and no parameter is required.
		+ The header file 'FreeRTOS.h' has been created and is used to include
		  'projdefs.h', 'FreeRTOSConfig.h' and 'portable.h' in the necessary
		  order.  FreeRTOS.h can now be included in place of these other
		  headers.
		+ The header file 'errors.h' has been deleted.  The definitions it
		  contained are now located within 'projdefs.h'.
		+ pvPortMalloc() now takes a size_t parameter as per the ANSI malloc().
		  Previously an unsigned short was used.
		+ When resuming the scheduler a yield is performed if either a tick has
		  been missed, or a task is moved from the pending ready list into a
		  ready list.  Previously a yield was not performed on this second
		  condition.
		+ In heap1.c an overflow check has been added to ensure the next free
		  byte variable does not wrap around.
		+ Introduced the portTASK_FUNCTION() and portTASK_FUNCTION_PROTO()
		  macros.
		+ The MPLAB PIC port now saved the TABLAT register in interrupt service
		  routines.

Changes between V2.6.0 and V2.6.1 - Released Feb 22, 2005

	This version adds support for the H8 processor.

	Other changes:

	+ tskMAX_TASK_NAME_LEN removed from the task.h header and added to each
	  individual portmacro.h file as portMAX_TASK_NAME_LEN.  This allows RAM
	  limited ports to allocate fewer characters to the task name.
	+ AVR port - Replaced the inb() and outb() functions with direct memory
	  access.  This allows the port to be built with the 20050414 build of
	  WinAVR.
	+ GCC LPC2106 port - removed the 'static' from the definition of
	  vNonPreemptiveTick() to allow the demo to link when using the cooperative
	  scheduler.
	+ GCC LPC2106 port - Corrected the optimisation options in the batch files
	  ROM_THUMB.bat, RAM_THUMB.bat, ROM_ARM.bat and RAM_ARM.bat.  The lower case
	  -o is replaced by an uppercase -O.
	+ Tasks.c - The strcpy call has been removed when copying across the task
	  name into the TCB.
	+ Updated the trace visualisation to always be 4 byte aligned so it can be
	  used on ARM architectures.
	+ There are now two tracecon executables (that convert the trace file binary
	  into an ASCII file).  One for big endian targets and one for little endian
	  targets.
	+ Added ucTasksDeleted variable to prevent vTaskSuspendAll() being called
	  too often in the idle task.
	+ SAM7 USB driver - Replaced the duplicated RX_DATA_BK0 in the interrupt
	  mask with the RX_DATA_BK1.


Changes between V2.5.5 and V2.6.0 - Released January 16, 2005

	+ Added the API function vTaskDelayUntil().  The demo app file
	  Demo/Common/Minimal/flash.c has been updated to demonstrate its use.
	+ Added INCLUDE_vTaskDelay conditional compilation.
	+ Changed the name of the Demo/ARM7_AtmelSAM7S64_IAR directory to
	  Demo/ARM7_AT91SAM7S64_IAR for consistency.
	+ Modified the AT91SAM7S USB driver to allow descriptors that have
	  a length that is an exact multiple of the FIFO to be transmitted.

Changes between V2.5.4 and V2.5.5 - Released January 3, 2005

	This version adds support for the Atmel SAM7 ARM7 microcontrollers
	along with the IAR development tools.

	Other changes:

	+ Renamed the Demo/ARM7 directory to Demo/ARM7_LPC2106_GCC.
	+ Renamed the Demo/ARM7_Keil directory to Demo/ARM7_LPC2129_Keil.
	+ Modified the Philips ARM7 serial interrupt service routines to only
	  process one interrupt per call.  This seems to enable the ISR to
	  operate more quickly.
	+ Removed the 'far' keyword from the Open Watcom portable layer source
	  files.  This allows their use with V1.3 of Open Watcom.
	+ Minor modifications to the SDCC build files to allow their use under
	  Linux.  Thanks to Frieder Ferlemann for this contribution.
	+ Small change to sTaskCreate() to allow a context switch even when
	  pxCreatedTask is NULL.  Thanks to Kamil for this contribution.
	+ inline keyword removed from vTaskSwitchContext() and VTaskIncrementTick()
	  definitions.

Changes between V2.5.3 and V2.5.4 - Released Dec 1, 2004

	This is an important maintenance release.

	The function cTaskResumeAll() has been modified so it can be used safely
	prior to the kernel being initialised.  This was an issue as
	cTaskResumeAll() is called from pvPortMalloc().  Thanks to Daniel Braun
	for highlighting this issue.

Changes between V2.5.2 and V2.5.3 - Released Nov 2, 2004

	The critical section handling functions have been changed for the GCC ARM7
	port.   Some optimisation levels use the stack differently to others.  This
	means the interrupt flags cannot always be stored on the stack and are
	instead now stored in a variable, which is then saved as part of the
	tasks context.  This allows the GCC ARM7 port to be used at all
	optimisation levels - including -Os.

	Other minor changes:

	+ MSP430 definition of usCriticalNesting now uses the volatile qualifier.
	  This is probably not required but added just in case.

Changes between V2.5.1 and V2.5.2 - Released Oct 26, 2004

	+ Added the Keil ARM7 port.
	+ Slight modification to comtest.c to make the delay periods more random.
	  This creates a better test condition.

Changes between V2.5.0 and V2.5.1 - Released Oct 9, 2004

	+ Added the MSP430 port.
	+ Extra comments added to the GCC ARM7 port.c and portISR.c files.
	+ The memory pool allocated within heap_1.c has been placed within a
	  structure to ensure correct memory alignment on 32bit systems.
	+ Within the GCC ARM7 serial drivers an extra check is made to ensure
	  the post to the queue was successful if then attempting immediately
	  retrieve the posted character.
	+ Changed the name of the constant portTICKS_PER_MS to portTICK_PERIOD_MS
	  as the old name was misleading.


Changes between V2.4.2 and V2.5.0 - Released Aug 12, 2004

	The RTOS source code download now includes three separate memory allocation
	schemes - so you can choose the most appropriate for your application.
	These are found in the Source/Portable/MemMang directory.  The demo
	application projects have also been updated to demonstrate the new schemes.
	See the "Memory Management" page of the API documentation for more details.

	+ Added heap_1.c, heap_2.c and heap_3.c in the Source/Portable/MemMang
	  directory.
	+ Replaced the portheap.c files for each demo application with one of the
	  new memory allocation files.
	+ Updated the portmacro.h file for each demo application to include the
	  constants required for the new memory allocators: portTOTAL_HEAP_SIZE and
	  portBYTE_ALIGNMENT.
	+ Added a new test to the ARM7 demo application that tests the operation
	  of the heap_2 memory allocator.


Changes between V2.4.1 and V2.4.2 - Released July 14, 2004

	+ The ARM7 port now supports THUMB mode.
	+ Modification to the ARM7 demo application serial port driver.

Changes between V2.4.0 and V2.4.1 - Released July 2, 2004

	+ Rationalised the ARM7 port version of portEXIT_CRITICAL() -
	  improvements provided by Bill Knight.
	+ Made demo serial driver more complete and robust.


Changes between V2.4.0 and V2.3.1 - Released June 30, 2004

	+ Added the first ARM7 port - thanks to Bill Knight for the assistance
	  provided.
	+ Added extra files to the Demo/Common/Minimal directory.  These are
	  equivalent to their Demo/Common/Full counterparts but with the
	  calls to the functions defined in print.c removed.
	+ Added TABLAT to the list of registers saved as part of a PIC18 context.

Changes between V2.3.0 and V2.3.1 - Released June 25, 2004

	+ Changed the way the vector table is defined to be more portable.
	+ Corrected the definitions of SPH and SPL in portmacro.s90.
	  The previous definitions prevented V2.3.0 operating if the iom323.h
	  header file was included in portmacro.s90.

Changes between V2.2.0 and V2.3.0 - Released June 19, 2004

	+ Added an AVR port that uses the IAR compiler.
	+ Explicit use of 'signed' qualifier on plain char types.
	+ Modified the Open Watcom project files to use 'signed' as the
	  default char type.
	+ Changed odd calculation of initial pxTopOfStack value when
	  portSTACK_GROWTH < 0.
	+ Added inline qualifier to context switch functions within task.c.
	  Ports that do not support the (non ANSI) inline keyword have the
	  inline #define'd away in  their respective portmacro.h files.

Changes between V2.1.1 and V2.2.0 - Released May 18, 2004

	+ Added Cygnal 8051 port.
	+ PCLATU and PCLATH are now saved as part of the PIC18 context.  This
	  allows function pointers to be used within tasks.  Thanks to Javier
	  Espeche for the enhancement.
	+ Minor changes to demo application files to reduce stack usage.
	+ Minor changes to prevent compiler warnings when compiling the new port.

Changes between V2.1.0 and V2.1.1 - Released March 12, 2004

	+ Bug fix - pxCurrentTCB is now initialised before the call to
	  prvInitialiseTaskLists().  Previously pxCurrentTCB could be accessed
	  while null during the initialisation sequence.  Thanks to Giuseppe
	  Franco for the correction.

Changes between V2.0.0 and V2.1.0 - Released Feb 29, 2004

	V2.1.0 has significant reworks that greatly reduce the amount of time
	the kernel has interrupts disabled.  The first section of modifications
	listed here must be taken into account by users.  The second section
	are related to the kernel implementation and as such are transparent.

	Section1 :

	+ The typedef TickType_t has been introduced.  All delay times should
	  now use a variable of type TickType_t in place of the unsigned long's
	  used previously.  API function prototypes have been updated
	  appropriately.
	+ The configuration macro USE_16_BIT_TICKS has been introduced.  If set
	  to 1 TickType_t is defined as an unsigned short.  If set to 0
	  TickType_t is defined as an unsigned long.  See the configuration
	  section of the API documentation for more details.
	+ The configuration macro INCLUDE_vTaskSuspendAll is now obsolete.
	+ vTaskResumeAll() has been renamed cTaskResumeAll() as it now returns a
	  value (see the API documentation).
	+ ulTaskGetTickCount() has been renamed xTaskGetTickCount() as the type
	  it returns now depends on the USE_16_BIT_TICKS definition.
	+ cQueueReceive() must now >never< be used from within an ISR.  Use the new
	  cQueueReceiveFromISR() function instead.

	Section 2:

	+ A mechanism has been introduced that allows a queue to be accessed by
	  a task and ISR simultaneously.
	+ A "pending ready" queue has been introduced that enables interrupts to
	  be processed when the scheduler is suspended.
	+ The list implementation has been improved to provide faster item
	  removal.
	+ The scheduler now makes use of the scheduler suspend mechanism in places
	  where previously interrupts were disabled.

Changes between V1.2.6 and V2.0.0 - Released Jan 31, 2004

	+ Introduced new API functions:
		vTaskPriorityGet ()
		vTaskPrioritySet ()
		vTaskSuspend ()
		vTaskResume ()
		vTaskSuspendAll ()
		vTaskResumeAll ()
	+ Added conditional compilation options that allow the components of the
	  kernel that are unused by an application to be excluded from the build.
	  See the Configuration section on the WEB site for more information (on
	  the API pages).  The macros have been added to each portmacro.h file (
	  sometimes called prtmacro.h).
	+ Rearranged tasks.c.
	+ Added demo application file dynamic.c.
	+ Updated the PC demo application to make use of dynamic.c.
	+ Updated the documentation contained in the kernel header files.
	+ Creating a task now causes a context switch if the task being created
	  has a higher priority than the calling task - assuming the kernel is
	  running.
	+ vTaskDelete() now only causes a context switch if the calling task is
	  the task being deleted.

Changes between V1.2.5 and V1.2.6 - Released December 31, 2003

	Barring the change to the interrupt vector (PIC port) these are minor
	enhancements.

	+ The interrupt vector used for the PIC master ISR has been changed from
	  0x18 to 0x08 - where it should have always been.  The incorrect address
	  still works but probably executes a number of NOP's before getting to the
	  ISR.
	+ Changed the baud rate used by the AVR demo application to 38400.  This
	  has an error percentage of less than one percent with an 8MHz clock.
	+ Raised the priority of the Rx task in demo\full\comtest.c.  This only
	  affects the Flashlite and PC ports.  This was done to prevent the Rx
	  buffer becoming full.
	+ Reverted the Flashlite COM port driver back so it does not use the DMA.
	  The DMA appears to miss characters under stress.  The Borland Flashlite
	  port was also calculating a register value incorrectly resulting in the
	  wrong DMA source address being used.  The same code worked fine when
	  compiling with Open Watcom.  Other minor enhancements were made to the
	  interrupt handling.
	+ Modified the PIC serial Rx ISR to check for and clear overrun errors.
	  Overrun errors seem to prevent any further characters being received.
	+ The PIC demo projects now have some optimisation switched on.


Changes between V1.2.4 and V1.2.5

	Small fix made to the PIC specific port.c file described below.

	+ Introduced portGLOBAL_INTERRUPT_FLAG definition to test the global
	  interrupt flag setting.  Using the two bits defined within
	  portINITAL_INTERRUPT_STATE was causing the w register to get clobbered
	  before the test was performed.

Changes between V1.2.3 and V1.2.4

	V1.2.4 contains a release version of the PIC18 port.
	An optional exception has been included with the GPL.  See the licensing
	section of www.FreeRTOS.org for details.

	+ The function xPortInitMinimal() has been renamed to
	  xSerialPortInitMinimal() and the function xPortInit() has been renamed
	  to xSerialPortInit().
	+ The function sSerialPutChar() has been renamed cSerialPutChar() and
	  the function return type chaned to portCHAR.
	+ The integer and flop tasks now include calls to tskYIELD(), allowing
	  them to be used with the cooperative scheduler.
	+ All the demo applications now use the integer and comtest tasks when the
 	  cooperative scheduler is being used.  Previously they were only used with
	  the preemptive scheduler.
	+ Minor changes made to operation of minimal versions of comtest.c and
	  integer.c.
	+ The ATMega port definition of portCPU_CLOSK_HZ definition changed to
	  8MHz base 10, previously it base 16.



Changes between V1.2.2a and V1.2.3

	The only change of any significance is to the license, which has changed
	from the Open Software License to the GNU GPL.

	The zip file also contains a pre-release version of the PIC18 port.  This
	has not yet completed testing and as such does not constitute part of the
	V1.2.3 release.  It is still however covered by the GNU GPL.

	There are minor source code changes to accommodate the PIC C compiler.
	These mainly involve more explicit casting.

	+ sTaskCreate() has been modified slightly to make use of the
	  portSTACK_GROWTH macro.  This is required for the PIC port where the
	  stack grows in the opposite direction to the other existing ports.
	+ prvCheckTasksWaitingTermination() has been modified slightly to bring
	  the decrementing of usCurrentNumberOfTasks within the critical section,
	  where it should have been since the creation of an eight bit port.

Changes between V1.2.2 and V1.2.2a

	The makefile and buildcoff.bat files included with the AVR demo application
	have been modified for use with the September 2003 build of WinAVR.  No
	source files have changed.

Changes between V1.2.1 and V1.2.2

	There are only minor changes here to allow the PC and Flashlite 186 ports
	to use the Borland V4.52 compiler, as supplied with the Flashlite 186
	development kit.

	+ Introduced a BCC directory under source\portable.  This contains all the
	  files specific to the Borland compiler port.
	+ Corrected the macro naming of portMS_PER_TICK to portTICKS_PER_MS.
	+ Modified comtest.c to increase the rate at which the string is
	  transmitted and received on the serial port.  The Flashlite 186 demo
	  app baud rate has also been increased.
	+ The values of the constants used in both integer.c files have been
          increased to force the Borland compiler to use 32 bit values.  The
          Borland optimiser placed the previous values in 16 bit registers, and in
          So doing invalidated the test.

Changes between V1.2.0 and V1.2.1

	This version includes some minor changes to the list implementation aimed
	at improving the context switch time - with is now approximately 10% faster.
	Changes include the removal of some null pointer assignment checks.  These
	were redundant where the scheduler uses the list functions, but means any
	user application choosing to use the same list functions must now check
	that no NULL pointers are passed as a parameter.

	The Flashlite 186 serial port driver has also been modified to use a DMA
	channel for transmissions.  The serial driver is fully functional but still
	under development.  Flashlite users may prefer to use V1.2.0 for now.

	Details:

	+ Changed the baud rate for the ATMega323 serial test from 19200 to 57600.
	+ Use vSerialPutString() instead of single character puts in
	  Demo\Full\Comtest.c.  This allows the use of the flashlite DMA serial
	  driver.  Also the check variable only stops incrementing after two
	  consecutive failures.
	+ semtest.c creates four tasks, two of which operate at the idle priority.
	  The tasks that operate at the idle priority now use a lower expected
	  count than those running at a higher priority.  This prevents the low
	  priority tasks from signalling an error because they have not been
	  scheduled enough time for each of them to count the shared variable to
	  the higher original value.
	+ The flashlite 186 serial driver now uses a DMA channel for transmissions.
	+ Removed the volatile modifier from the list function parameters.  This was
	  only ever included to prevent compiler warnings.  Now warnings are
	  removed by casting parameters where the calls are made.
	+ prvListGetOwnerOfNextEntry() and prvListGetOwnerOfHeadEntry() have been
	  removed from list.c and added as macros in list.h.
	+ usNumberOfItems has been added to the list structure.  This removes the
	  need for a pointer comparison when checking if a list is empty, and so
	  is slightly faster.
	+ Removed the NULL check in vListRemove().  This makes the call faster but
	  necessitates any application code utilising the list implementation to
	  ensure NULL pointers are not passed.
	+ Renamed portTICKS_PER_MS definition to portMS_PER_TICK (milli seconds
	  per tick).  This is what it always should have been.

Changes between V1.01 and V1.2.0

	The majority of these changes were made to accommodate the 8bit AVR port.
	The scheduler workings have not changed, but some of the data types used
	have been made more friendly to an eight bit environment.

	Details:

	+ Changed the version numbering format.
	+ Added AVR port.
	+ Split the directory demo\common into demo\common\minimal and
	  demo\common\full.  The files in the full directory are for systems with
	  a display (currently PC and Flashlite 186 demo's).  The files in the
	  minimal directory are for systems with limited RAM and no display
	  (currently MegaAVR).
	+ Minor changes to demo application function prototypes to make more use
	  of 8bit data types.
	+ Within the scheduler itself the following functions have slightly
	  modified declarations to make use of 8bit data types where possible:
		xQueueCreate(),
		sQueueReceive(),
		sQUeueReceive(),
		usQueueMessageWaiting(),
		sQueueSendFromISR(),
		sSemaphoreTake(),
		sSemaphoreGive(),
		sSemaphoreGiveFromISR(),
		sTaskCreate(),
		sTaskMoveFromEventList().

	  Where the return type has changed the function name has also changed in
	  accordance with the naming convention.  For example
	  usQueueMessageWaiting() has become ucQueueMessageWaiting().
	+ The definition tskMAX_PRIORITIES has been moved from task.h to
	  portmacro.h and renamed portMAX_PRIORITIES.  This allows different
	  ports to allocate a different maximum number of priorities.
	+ By default the trace facility is off, previously USE_TRACE_FACILITY
	  was defined.
	+ comtest.c now uses a psuedo random delay between sends.  This allows for
	  better testing as the interrupts do not arrive at regular intervals.
	+ Minor change to the Flashlite serial port driver.  The driver is written
	  to demonstrate the scheduler and is not written to be efficient.



Changes between V1.00 and V1.01

	These changes improve the ports.  The scheduler itself has not changed.

	Improved context switch mechanism used when performing a context
	switch from an ISR (both the tick ISR and the serial comms ISR's within
	the demo application).  The new mechanism is faster and uses less stack.

	The assembler file portasm.asm has been replaced by a header file
	portasm.h.  This includes a few assembler macro definitions.

	All saving and restoring of registers onto/off of the stack is now handled
	by the compiler.  This means the initial stack setup for a task has to
	mimic the stack used by the compiler, which is different for debug and
	release builds.

	Slightly changed the operation of the demo application, details below.

	Details:

	+ portSWITCH_CONTEXT() replaced by vPortFirstContext().
	+ pxPortInitialiseStack() modified to replicate the stack used by the
	  compiler.
	+ portasm.asm file removed.
	+ portasm.h introduced.  This contains macro definitions for
	  portSWITCH_CONTEXT() and portFIRST_CONTEXT().
	+ Context switch from ISR now uses the compiler generated interrupt
	  mechanism.  This is done simply by calling portSWITCH_CONTEXT and leaving
	  the save/restore to compiler generated code.
	+ Calls to taskYIELD() during ISR's have been replaced by calling the
	  simpler and faster portSWITCH_CONTEXT().
	+ The Flashlite 186 port now uses 186 instruction set (used to use 80x86
	  instructions only).
	+ The blocking queue tasks within the demo application did not operate
	  quite as described.  This has been corrected.
	+ The priority of the comtest Rx task within the demo application has been
	  lowered.  Received characters are now processed (read from the queue) at
	  the idle priority, allowing low priority tasks to run evenly at times of
	  a high communications overhead.
	+ Prevent the call to kbhit() in main.c for debug builds as the debugger
	  seems to have problems stepping over the call.  This if for the PC port
	  only.



