Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel2
minLevel2
indent20px

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.

  • 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

...

  • 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.