Table of Contents | ||||||
---|---|---|---|---|---|---|
|
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
...
- [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.
...
- [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.
...
- [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
...
- [184] Monitors feature has been removed.
Version 3.06.02
Release Date
August 17, 2017
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.
- MISRA C:2012
- ARC EM6
- New port for the Synopsys ARC EM6. Supports the MetaWare toolchain.
- 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
...
- 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.
...
- 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
...
- 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
...
- 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
...
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
...
- 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.
...
- 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.
...
- Footprint: Reduced overall RAM usage when some features like debugging are disabled.
API Changes
- N/A
Bug fixes
- Timers: Fixed a bug where a timer that expires may cause some of the other timers to miss one tick. This issue only affected version V3.04.00 of the kernel.
- Timers: To be consistent the behavior of previous versions thescheduleris now locked again when calling a timer's callback function. The modifications to the timer list for V3.04.00 had the potential to cause a deadlock if a user application attempted to acquire a resource from within the callback.
- OS_IntQTaskInit(), OS_IntQPost(): Unecessary checks of p_err removed. The validation is already done by the callers.
- Various corrections to the comments.
...
- Tick and Timer wheels: Removed the tick and timer wheels. Those features were re-implemented using lighter and faster delta and linear lists respectively. This result in even better performance and reduced maximum interrupt disable time. See chapters 5 & 12 of the user manual for details.
- C++ compilation: Better support for building in C++.
- ARM Cortex-A: New port for the entire 32-bits ARM Cortex-A family. Support for the following compilers/toolchains is included:
- ARM Compilation Tools (DS-5)
- GNU
- IAR EWARM
- TMS470 Compiler Toolchain (TI Code Composer Studio)
API Changes
- N/A
Bug fixes
- os_stat.c, OSStatTaskCPUUsageInit(): OSTaskSuspend() could be referenced even with OS_CFG_TASK_SUSPEND_EN disabled.
- os_core.c, OS_IdleTask(): Unused argument p_arg now referenced using '(void)&p_arg' instead of 'p_arg = p_arg' to prevent a warning from static analysis tools.
- os.h, Comment about os_tcb.TickRemain now properly name the statistic task.
...
- Removed OS_MsgPoolCreate() to remove calling a function used by a single other function, OS_MsgPoolInit().
- Changed the macro name OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT() to OS_CRITICAL_ENTER_CPU_EXIT() to make the macro less than 32 significant characters.
- Made some improvements to satisfy more MISRA-C:2004 rules.
API Changes
- N/A
Bug fixes
- os_msg.c, OS_MsgQPut(): Added missing 'p_msg->NextPtr = (OS_MSG *)0;' when adding first entry in queue.
...
- Added Thread Local Storage (TLS) support. See chapter 20 of the User's Manual.
- Added OSTaskRegGetID() to assign task register IDs dynamically.
- Now able to Suspend and Resume tasks from ISRs.
- Added option 'OS_OPT_TASK_NO_TLS' to OSTaskCreate() to specify that a task will not require TLS.
- Removed OSMsgPoolExtend() since it was not documented and not used.
- Added global OSStatTaskCPUUsageMax to keep track of peak CPU usage. This value is reset by OSStatReset().
- Added pertask .CPUUsageMax which tracks the peak CPU usage of each task.
- Added .NbrUsedMax entry to the message pool manager to keep track of maximum OS_MSG usage.
- Computation of CPU usage has now a resolution of 1/100th of a percent.
API Changes
- N/A
Bug fixes
- N/A
Version 3.02.00
Releasedate :2011-08-01
...
- Added note to clarify use of OS_OPT_LINK_DLY option on OS_TmrLink() at OSTmrStart().
- Adjusted order of operation on Tick Wheel during insert (OS_TickListInsert) to first set link pointers onnewobject, then add it to the linked-list.
- Changed default OS_CYCLES to 32-bits.
- Adjusted version to new format Vx.yy.zz.
- Re-arrangedorder of data structure members on OS_TCB to keep non-optional items at the beginning of the structure.
- Changed error codes toenum.
- Converted OS object types to use CPU_TYPE_CREATE.
- Reworked check to not allow to create multiple tasks at idle task priority.
- Added changes to priority handling to allow word addressable architectures.
- Adjusted copyright in file headers for source available distribution.
API Changes
- N/A
Bug fixes
- Initialize Interrupt Queue Handler Task before any other task to prevent usage of 'OSIntQNbrEntries' uninitialized.
- Corrected use of disabled variable 'OSCfg_ISRStk'.
- Corrected per task CPU usage statistics computation.
- Removed OS_TMR_TICKdatatype; converted OSTmrTickCtr to OS_TICK to be consistent with other OS_TMR structure fields.
- Prevent OSSchedLock/Unlock() to be called from ISR.
- Corrected alignment check on OSMemCreate() to handle cases where sizeof(void *) == 1.
...
- Added error checking for time stamp configuration #defines.
- Removal of some MISRA C 2004 errors.
- Moved OSInitHook() tobeginningof OSInit() to be consistent with documentation section about differences between µC/OS-II and µC/OS-III port functions.
- Removed duplicate call to OS_TickListRemove() in OS_TickListUpdate().
- Added OSStatResetFlag into OS_StatTask to forceresetof the computed statistics.
- Added OSIntQMaxNbrEntries into computed statistics.
API Changes
- N/A
Bug fixes
- Corrected OS_MEM structure definition for field FreeListPtr.
- Corrected OS_TmrLink() wherenumberof entries in spoke was incremented twicefora particularcase,and timer previous pointer wasalwyasbeing cleared beforeexitthe function.
- Corrected OSTaskChangePrio() to update task priority iftaskis pending on Task Queue, Task Sem or Flag.
- Corrected OSTaskDel() TCB clean up where it could potentially be skipped if context switch happened before OSSched().
- Corrected sections of code conditional on OS_CFG_Q_EN & OS_CFG_TASK_Q_EN.
- Corrected DbgListRemove procedures where it did not clear the DbgPrevPtr of the first object when the head of the list was removed.
- Removed sections where TimeQuantaCtr was incorrectly reset.
- Corrected NULL pointerde-referenceon OSMutexDel() with OS_OPT_DEL_ALWAYS option when Mutex created and deleted right away.
- Reordered DbgListAdd/Remove to prevent a still linked object from being cleared.
- Corrected DbgList removal in OSTmrDel().
- Added critical section in OSMemCreate().
- Removed access to uninitialized kernel objects (p_obj->Type).
- Corrected port's OSTaskSwHook where OSSchedLockTimeMaxCur was not always cleared between context switch.
- Corrected NULL pointer de-reference of p_tcb on OS_SchedRoundRobin(), if no TCB in the ready list.
- Adjusted check for nesting interrupts on OSSched() by removing conditional compilation based on OS_CFG_CALLED_FROM_ISR_CHK_EN.
- Adjusted formatting & function descriptions.
...
- Added PERIODIC and MATCH modes to OSTimeDlyHMSM().
- Improved the performance of the scheduler lock time measurement.
- Added OS_CFG_TS_EN in OS_CFG.H which is used to enable/disable time stamping.
API Changes
- N/A
Bug fixes
- OSTaskStkChk() now returns the number of free and used 'ELEMENTS' instead of 'BYTES'. This is done for consistency.
- Fixed a bug with OS_PendListRemove1() which removes a task from a wait list.
- Fixed a bug when pend-abortinga objectwhere a task has multi-pended on the same object multiple times.
- Fixed a bug when posting to an event flag group where thereareno task(s) pending on the event flag group.
...
- The API for OSTaskCreate() changed. The seventh argument changed from: 'CPU_STK *p_stk_limit' to 'CPU_STK_SIZE stk_limit'. This argument now represents the number of CPU_STK elements left before the stack is empty. This is used when the CPU supports stack limit checking.
Bug fixes
- Fixed a bug when an object was pend aborted when using OSPendMulti().
- Fixed a bug when an object was deleted when using OSPendMulti().
- Statistics are reset after determining CPU usage capacity.
- Fixed a bug in OSPendMulti(). Theschedulerwas locked during a critical region that should have been protected by disabling/enabling interrupts.