µC/OS-III Release Notes

µC/OS-III Release Notes

Version 3.08.02

Release Date

December 1st, 2022

New Features and Improvements

  • Added new ARC port for the embARC BSP software distribution.

  • Changed trace ID types to CPU_ADDR to support newer trace features.

Bugfixes

  • Fixed bug in OS_TaskChangePrio which incorrectly lowers the priority of a high-priority task which is holding a mutex if a low-priority task blocking on the same mutex has its priority lowered.

  • Fixed bug in OS_FlagTaskRdy which fails to remove TCB from the tick list if task state is OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED.

  • ARMv7-M GNU - Fixed hard fault due to a missing .thumb_func statement for OSIntCtxSw routine

Version 3.08.01

Release Date

May 4th, 2021

New Features and Improvements

  • Improvement to the ARMv7-M port: only save FPU registers if the task uses them.

  • New option to enable OS_ERR_OBJ_CREATED independently of the debug variables.

  • Added dynamic tick BSP template.

Bugfixes

  • OSTmrCreate() now returns OS_ERR_OBJ_CREATED before modifying any fields in the Tmr object.

  • IAR TLS code now protects access to shared variables.

Errata

  • Version Macro was not updated.

Version 3.08.00

Release Date

February 28th, 2020

  • Open-source Release

Version 3.07.05

Release Date

December 17th, 2019

Bugfixes

  • [704] Fixed Stack usage calculations when Redzone checking is enabled

  • [775] Fixed incorrect register order in the ARMv8-A port

Deprecation

  • [779] Removed ARM compiler support for the ARMv8-A port

Version 3.07.04

Release Date

June 20, 2019

Bugfixes

  • [554] Added trace hooks to OSTaskResume() and OSSched().

  • [582] C28x port - Fixed overwrite of the IER register if an interrupt-level context switch occurred.

  • [593] ISRs may now use non-blocking pends.

  • [606] Fixed incorrect timeouts when inserting timers into the head of the timer list.

  • [620] Corrected the include paths for the ARM-Cortex ports.

  • [623] Fixed build error in the ARMv8-A GNU port due to incorrect comment format.

  • [681] OSTaskResume() no longer invokes the scheduler if the target task is not suspended.

Improvements

  • [405] C28x port - Removed duplicate initialization of OS globals from OSInitHook().

  • [616] Removed dependence on uC/LIB.

Version 3.07.03

Release Date

December 7, 2018

Bugfixes

  • [538] Fixed build issue in os_tmr.c when OS_CFG_OBJ_TYPE_CHK_EN was disabled.

Improvements

  • [542] Added the proper cast for OS_OPT_TIME_OPTS_MASK to prevent compiler warnings.

Version 3.07.02

Release Date

August 27, 2018

Bugfixes

  • [478] Timer callbacks could not make timer API calls.

Version 3.07.01

Release Date

July 10, 2018

Bugfixes

  • [469] Create() functions failed to exit critical sections before returning an error if the object was already created.

Version 3.07.00

Release Date

June 18, 2018

New Features

  • [54] Tick task has been removed. Tick scheduling is done completely in the tick ISR.

  • [55] ISR stack usage statistics

  • [286] Fully dynamic software timers for improved power consumption

  • [369] Reworked dynamic tick code adds proper support for all delay options and resolves timing issues. 

    • Note: V3.07.00 requires a different dynamic tick BSP than previous versions. Please refer to the Dynamic Tick API documentation.

  • [120] ARMv7-M Non-Kernel-Aware Interrupt support

  • [252] Added checks to prevent re-creating kernel objects

  • [367] Added new debug variables to measure TickList updates and Tmr/Stat task run time

  • [391] New RISC-V Port

  • [360] Time delays and timeouts now return an error if ticks are disabled

Bugfixes

  • [260] RL78 port should use RETB instead of RETI for software breaks

  • [275] OSIntDisTimeMax needs a preprocessor guard in os_dbg.c to prevent certain build errors

  • [325] Incorrect delays using Dynamic Tick when tick list is empty

  • [408] OSTaskCreate() incorrectly returns OS_ERR_STAT_STK_SIZE_INVALID instead of OS_ERR_STK_SIZE_INVALID if a task stack overflows during initialization

  • [431] Race condition may occur when checking stack usage of a task which is being deleted

Improvements

  • [53] Better optimization of OS_PRIO.C

  • [211] Removed superfluous OS_BSP_TickInit() and OS_BSP_TickISR() prototypes from the Renesas RX ports

  • [154] ARM port directories have been restructured and consolidated (e.g. ARM-Cortex-A/ARMv7-A, ARM-Cortex-A/ARMv8-A)

  • [309] Removed unused parameter warnings in OSTaskStkInit() for the ARMv7-A and ARMv8-A ports

  • [245] Cleaned up obsolete error codes and task states which were used for the deprecated Deferred-Interrupt and Multi-pend features.

  • [371] Compile-time check to prevent enabling software timers without ticks

  • [390] Compile-time check to prevent invalid Tick/Timer rate configurations

Deprecation

  • [184] Monitors feature has been removed.

Version 3.06.02

Release Date

August 17, 2017

Improvements

  • [30] Resolved an issue with debug variables being optimized out when optimizations are enabled.

  • [31] IAR TLS code failed to build with a C++ compiler.

  • [180] Updated SystemView recorder to add RX support.

Deprecation

  • [176] Removed ARM-Cortex-R4 port (Replaced by ARM-Cortex-A).

  • [176] Removed ARM-Cortex-M3 port (Replaced by ARM-Cortex-M).

  • [176] Removed ARM-Cortex-M4 port (Replaced by ARM-Cortex-M).

  • [183] Monitors have been marked as deprecated and will be removed in a future release.

Version 3.06.01

Release date: 2016-11-30

Requirements

  • µC/LIB V1.38.02 or more recent

  • µC/CPU V1.31.00 or more recent

New features & improvements

  • Core

    • MISRA C:2012

      • Updated the core for improved MISRA C:2012 compliance.

      • The number of violations has been reduced to 8 required rules and 8 advisory rules.

      •  

  • ARC EM6

    • New port for the Synopsys ARC EM6. Supports the MetaWare toolchain.

Bug fixes

  • Core

    • Fixed a build error which occurs when disabling the tick task forticklessmode.

    • Fixed a build error for C89 compilation caused by #warning directives in os.h

Version 3.06.00

Release date :2016-06-30

Requirements

  • µC/LIB V1.38.02 or more recent

  • µC/CPU V1.31.00 or more recent

New features & improvements

  • ARM-Cortex-A50

    • Added configuration options to enable EL3 and SIMD.

  • ARM-Cortex-M

    • New generic port for the ARMv7-M family. Supports the ARM, CCS, GNU, and EWARM toolchain.

  • eSi-3250

    • New port for the EnSilica eSi-32xx family. Supports the EDS toolchain.

  • MPC57xx-VLE

    • New port for the NXP MPC57xx family. Supports the GNU toolchain.

  • Trace

    • Support for the following trace tools is now included: Segger SystemView and Percepio Tracealyzer.

Deprecated Features

  • ARM-Cortex-R4

    • Deprecated in favor of the ARM-Cortex-A port. May be removed in a future release.

  • ARM-Cortex-M3

    • Deprecated in favor of the ARM-Cortex-M port. May be removed in a future release.

  • ARM-Cortex-M4

    • Deprecated in favor of the ARM-Cortex-M port. May be removed in a future release.

Obsolete Features

  • Multi-Pend

    • The multipend feature is now obsolete and has been removed.

  • Deferred interrupts

    • Deferred interrupt processing is now obsolete and has been removed.

API Changes

  • Removed 

    • OSPendMulti()

    • os_pend_multi.c

    • os_int.c

  • Added

    • os_trace.h

Bug fixes

  • ARM-Cortex-M0

    • Context switches now save R8-R11 as well.

  • ARM-Cortex-M3

    • The ISR stack is now aligned to the 8-byte boundary, as required by the ARM procedure call standard.

  • ARM-Cortex-M4

    • Fixed an issue with the port which caused stack corruption if the first running task used an FPU stack frame.

  • C28x

    • Added OSInitHook() code which initializes the kernel's global variables to 0. This is a workaround for the C28x toolchain

    • The Context switch code now uses the appropriate 16-bit MOV operations when handling task priorities.

  • Core

    • Fixed a race condition in OSTaskDel() which sometimes caused a context switch before the error argument was assigned a value.

    • When resetting a periodic timer with 0 initialdelay, the timer is now reset to the period value rather than the initial delay.

    • Posting to task semaphores or queues no longer causes a null pointer dereference when debug variables are enabled.

Version 3.05.01

Release date :2015-07-06

Requirements

  • µC/LIB V1.36.02 or more recent

  • µC/CPU V1.30.00 or more recent

API Changes

  • The OSSafetyCriticalStart() API call is available again

Bug fixes

  • OSQPend(): *p_ts was being cleared twice

  • OS_TmrTask(): Fixed unused variable warning when dynamic tick was enabled

  • Fixed packaging issue where sources files had UNIX line endings

Version 3.05.00

Releasedate :2015-05-29

Requirements

  • µC/LIB V1.36.02 or more recent

  • µC/CPU V1.30.00 or more recent

New features & improvements

  • Dynamic tick: Dynamic tick mode is now available to further reduce power andcpu usage

  • Stack Redzone: An optional stackredzone can be enabled to detect stack overflow while debugging

  • Debugging: Improved debugging with a new check for invalid calls before the kernel is started

  • Idle Task: To reduce footprint the idle task is now optional

  • Tick Task: For very low footprint application thatdo not require a time base the tick task is now optional

  • Performance and Footprint: Various performance improvements and ram usage reduction

  • C28x: Added support for the Texas Instrument C28x family of32 bit MCUs

API Changes

  • Task registers are now 64 bits wide by default on64 bitplatforms

  • Task registers are now available before the kernel is started

  • The following functions can now be used before the kernel is started : OS_TaskChangePrio(), OSSemSet(), OSTaskSuspend()

  • New function OSTmrSet() to set/reset a timer without having to delete it

  • OSTaskCreate() will now return an error if the given stack is too small for even a context stack frame

  • OSStart() will now return an error if no user taskarecreated

  • OSSafetyCriticalStart() is now embeddedwithingthe OSStart() code

Deprecated Features

  • Multi-Pend: The multipendfeature is now deprecated and not recommended for new designs. It remains fully supported for the 3.05 release series.

  • Deferred interrupts: Deferred interrupt processing is now deprecated and not recommended for new designs. This feature remains fully supported for the 3.05 release series.

Bug fixes

  • OSMutexPend(): Check for overflow with nested pending

  • OSTaskSuspend(): Check for overflow of the suspend nesting counter

Ports

  • ARM-Cortex-A9: Deprecated port permanently removed from the distribution use ARM-Cortex-A instead

  • Renesas RX: Removed multiple deprecated ports in favor of the generic RX port suitable for all rxv1 and rxv2 architectures

  • MicroBlaze: Fixed capitalization of the assembly file

  • ARM-Cortex-A: Big endian support for all the supported toolchains
     

Version 3.04.05

Releasedate :2015-02-16

Requirements

  • µC/LIB V1.36.02 or more recent

  • µC/CPU V1.30.00 or more recent

New features & improvements

  • ARM-Cortex-A: Endianness is now detected at compile time to support big endian ARMV7 A and R architectures

  • ARM-Cortex-A50: RealView port updated for ARM Compiler 6

  • ARM-Cortex-A50: GNU-like toolchain support

  • ARM-Cortex-M4: New port for TI Code Composer Studio

  • POSIX: New port for POSIX like system using the gnu toolchain

  • RL78: Port for the GNU toolchain

  • Timers: New function OSTmrSet() to set/reset a timer

API Changes

  • N/A

Bug fixes

  • Mutex: Check for overflow with nested pending

  • Statistics: Fixed 0%cpuusagesometimereported as 100%

  • Timers: Fixed a race condition when creating and deleting a timer at about the same time

  • Timers: Reduced some critical section length

Ports

  • ARM-Cortex-A: Fixed interworking linking issues under the GNU toolchain

  • ARM-Cortex-A: Properly restore FPEXC on a context switch

  • ARM-Cortex-A50: Fixed inconsistent saving of ELR and LR on a context switch

  • ARM-Cortex-M0,3 & 4: Missing call to the task switch hook added in OSStartHighRdy

  • ARM-Cortex-M0 & 3: Stacks are now forced to be aligned to 8bytefor AAPCS compliance

  • MicroBlaze: Fix port name capitalization which could cause issues under case sensitive OS

  • Renesas RX: Fixed overwriting some user enabled interrupts when initializing the port

  • Win32: Invalid access to a TCB's NamePtr fixed when debug is disabled

  • Win32: Return a valid stack address even if unneeded to prevent errors and warnings

  • Win32: Removed the space in the Visual Studio path component

Version 3.04.04

Releasedate :2014-03-12

Requirements

  • µC/LIB V1.36.02 or more recent

  • µC/CPU V1.30.00 or more recent

New features & improvements

  • N/A

API Changes

  • N/A

Bug fixes

  • OSMutexDel(): Deleting a mutex not owned by any tasks with the option OS_OPT_DEL_NO_PEND would cause a null pointer access. This issue was introduced in version 3.04.03.

  • os.h, os_tmr.c: Fixed a few local include directives which were using brackets <> instead of quotes""

  • Minor corrections to some function comment headers

Ports

  • ARM-Cortex-M4: Fixed an assembler warning with the RealView port.

  • ARM-Cortex-A50: Default exception level changed to EL1. The option to switch to EL1 now selects EL3 instead.

  • ARM-Cortex-A50: Handling of the SIMD register bank can now be disabled at compile time.

  • ARM-Cortex-A50: Performance improvements for task-to-task context switches.

Version 3.04.03

Releasedate :2014-02-21

Requirements

  • µC/LIB V1.36.02 or more recent

  • µC/CPU V1.30.00 or more recent

New features & improvements

  • ARM-Cortex-A50: New port for the 64-bit series of Cortex-A50cpu core implementing the ARMv8-A architecture. The following features are included.

    • Support for the ARM Compiler Toolchain and GNU toolchain.

    • AArch64 support (AArch32 may be supported by our 32-bit ARM-Cortex-A port in the future if there's enough interest)

    • Support for the embedded FPU and SIMD extensions

  • Mutex priority inheritance: Improved the robustness of the priority inheritance feature of µC/OS-III:

    • Deleting and Pend aborting mutexes are now guaranteed not to cause priority inversion.

    • Deleting a task will now automatically release all the mutexes owned by that task.

    • Priority inheritance is correctly and deterministically applied in the case of intentional deadlocks. (Two or more tasks pending on mutexes owned by each other.)

    • Breaking a deadlock using OSMutexPendAbort() or OSMutexDel() won't create priority inversion even if other mutexes are still actively owned. Please note that while the kernel will correctly prevent priority inversion, breaking a deadlock using OSMutexPendAbort() is NOT a recommended coding practice.

API Changes

  • N/A

Bug fixes

  • os.h: Removed double "??" characters in a comment that could be confounded for a trigraph by some preprocessors.

  • OSFlagPendAbort() will now, as documented,abortthe highest pending task when called with the OS_OPT_PEND_ABORT_1 option.

  • The declaration of OSSemDel() is now correctly preprocessed out when OS_CFG_SEM_DEL_EN is disabled (MISRA compliance)

  • Minor performance improvement to the tick task by removing an unneeded check.

  • Minor improvements to MISRA compliance

  • Various corrections to the comments.

Ports

  • MIPS32-4k: Various bugfixes and improvements

  • ARM-Cortex-A: GNU assembly files extension changed from .s to .S

  • ARM-Cortex-M: Various improvements to MISRA compliance

  • ARM-Cortex-M: Added an instruction barrier after triggering a context switch to prevent issues withhighlyoptimized code. This could only affectusageof the internal API for benchmarking purposes, no user applications should have been affected by this issue.

Version 3.04.02

Releasedate :2013-12-20

Requirements

  • µC/LIB V1.36.02 or more recent

  • µC/CPU V1.30.00 or more recent

New features & improvements

  • ARM-Cortex-A: Added a global variable OS_CPU_ARM_DRegCnt to hold the number of VFP/NEON registers present in the context switch stack frame. This is meant to help kernel aware debugger decode a task's stack.

  • ARM-Cortex-M3 & M4: Various performance improvements on all supported toolchains.

  • Online Documentation: Reference manuals now available online. Please visit  micrium.atlassian.net for the latest versions. This will be the last release of uC/OS-III to include the PDF manual within the source package.

  • Renesas RX: Various improvements:

    • Performance improvements on all supported toolchains.

    • Compatibility fix for IAR EWRX 2.50.

    • Functionalities of the RX-FPU port are now merged into the generic RX port.

    • OS_KA_IPL_Boundary can be left undefined without causing a compilation error in the IAR port.

API Changes

  • N/A

Bug fixes

  • IAR TLS: Fixed compilation errors in os_tls.c when building with the full implementation of DLIB.

  • M14K: Correctly restore the special purpose register on a context switch.

  • os_core.c, os_task.c: Deleting a task pending on an object without timeout or deleting the object itself may have caused a null pointer access. This issue only affected version 3.04.00 and later of the kernel.

  • os_mutex.c: Aborting a mutexpendin certain conditions left the mutex owner at an elevated priority.

  • Various typos and formatting fixes.

Ports

  • M14K: Correctly restore the special purpose register on a context switch.

  • Renesas RX: Fixed compilation error when OS_KA_IPL_Boundary was left undefined in the IAR port.

Deprecated features

  • The following ports are now supported by the generic Renesas RX port and will be removed in a future release.

    • RX200

    • RX600

    • RX-FPU

  • The following ports are now supported by the generic ARM-Cortex-A port and will be removed in a future release.

    • ARM-Cortex-A9

    • ARM-Cortex-A8 - Unreleased, may have been distributed in some demonstration projects.