µC/OS-III Release Notes
- 1 Version 3.08.02
- 2 Version 3.08.01
- 3 Version 3.08.00
- 4 Version 3.07.05
- 5 Version 3.07.04
- 6 Version 3.07.03
- 7 Version 3.07.02
- 8 Version 3.07.01
- 9 Version 3.07.00
- 10 Version 3.06.02
- 11 Version 3.06.01
- 12 Version 3.06.00
- 13 Version 3.05.01
- 14 Version 3.05.00
- 15 Version 3.04.05
- 16 Version 3.04.04
- 17 Version 3.04.03
- 18 Version 3.04.02
- 19 Version 3.04.01
- 20 Version 3.04.00
- 21 Version 3.03.01
- 22 Version 3.03.00
- 23 Version 3.02.00
- 24 Version 3.01.02
- 25 Version 3.01.01
- 26 Version 3.01.00
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.