Release notes for embOS Version 3.82r

  1. New features
  2. Improvements
  3. Program corrections
  4. Release history
  5. Miscellaneous

New features

Version 3.82o

  1. New API function OS_WaitMailTimed()
    OS_WaitMailTimed() may be used to suspend a task for a given timeout or until a message is available in a mailbox without retrieving the mail.

Version 3.82n

  1. New API functions for task suspension and synchronization.
    OS_SuspendAllTasks() may be used to suspend all task except the running task.
    OS_SetInitialSuspendCnt() can be used to create tasks that are initially suspended and will not run until they are resumed.
    OS_ResumAllSuspendedTasks() may be used to resume all suspended task at once without the need to address specific tasks.

Version 3.82l

  1. Thread local storage supported.
    For some ports, a thread local storage (TLS) may be used and can be initialized individually for every task by a call of OS_TLS_Init().
    The new TLS implementation requires additional CPU specifc fucntions and support by the compiler specific runtime library, it may be available for some ports only.

Version 3.82k

  1. New API function OS_Delayus().
    The new function OS_Delayus() can be used to perform a delay with micro second resolution. The calling task will wait for the given delay time without suspension.
    During the wait time, other tasks may be activated by interrupt, the embOS scheduling is not blocked.
    The function works well when the embOS timer has a resolution of at least 1us or better.
  2. New API function OS_Q_Delete().
    This new function deletes a queue. Queues can be fully dynamically created and deleted now. The resources of the queue may be re-used after deletion.

Version 3.82g

  1. OS_Start() in assembly source replaced by OS_StartASM().
    OS_Start() now is a generic function which sets OS_Running to 1 and then calls OS_StartASM().

Version 3.82h

  1. Internal data types modified.
    A data type was defined for Ipl_EI and Ipl_DI. This allows variable size of integers which is supported by some tool chains.
  2. OS_Info module modifed.
    The OS_Info module included the standard header stdio.h without any need. The include is removed now.

Version 3.82g

  1. OS_Start() in assembly source replaced by OS_StartASM().
    OS_Start() now is a generic function which sets OS_Running to 1 and then calls OS_StartASM().

Version 3.82f

  1. OS_IsRunning() implemented.
    The new API function OS_IsRunning() can be used to examine whether the embOS scheduler was started by a call of OS_Start().
    This may be helpful for some applications and functions to decide whether blocking function calls can be used.

Version 3.82a

  1. Error handling for queues implemented.
    embOS checks in debug version the correct queue handling.
  2. OS_Q_IsInUse() implemented.
    New queue function which returns whether the queue is currently in use.

Version 3.82

  1. Scheduling and task switch time optimized.
    The internal scheduling functions OS_ChangeTask() and OS_Switch() were optimized to speed up context switching.
    By recompiling the sources, the optimization may be enabled or disabled by the definition of OS_GLOBAL_IS_RETURNED and OS_GLOBAL_IS_PARA.

Version 3.80l

  1. Macro OS_U32_TO_PTR_TYPE added.
    The new macro OS_U32_TO_PTR_TYPE casts an OS_U32 to pointer type to avoid warnings on some tool chains with different memory models.
  2. New macro OS_EI_HP_ON_ENTRY()
    OS_EI_HP_ON_ENTRY() enables high-prio interrupts if necessary: Some CPUs (such as M16C) disable all interrupts on ISR entry.

Version 3.80k

  1. New fast tick handler.
    embOS V3.80k comes with an alternate faster tick handler OS_TICK_HandleNoHook().
    This tick handler does not support the tick hook function and therefore executes faster.
    It may be used instead of the regular tick handler OS_TICK_Handle() which is used in the default start projects.
    When using this new fast tick handler, it is the users responsibility, not to install any tick hook functions, as those will not be called by embOS.
  2. Task events modified.
    The data type of task events may now be modified from unsigned char to unsigned short or unsigned int to allow more than 8 task events.
    The modification is done be defining the type of task events via the OS_TASK_EVENT definition in RTOS.h
    This type defaults to unsigned char to be compatible with previous versions of embOS. A modification requires recompilation of the embOS sources.

Version 3.80h

  1. Interrupt entry functions modified, internal modification.
    For some CPUs the CPU state can not be examined. A modification of the interrupt entry functions was required to inhibit an interrupt level assertion, introduced with version 3.80f, for those CPUs.
    The performance is not affected by this modification.

Version 3.80f

  1. Interrupt level assertions added
    The debug version of embOS now comes with additional error handler functionality.
    The error handler can detect illegal function calls under various conditions. OS_Error() will be called when one of the following conditions is detected:

Version 3.62a

  1. OS_STACK_ALIGN implemented
    OS_STACK_ALIGN may be defined to ensure a specific task stack alignment during task creation.
    To ensure a stack alignment of 8 bytes, OS_STACK_ALIGN has to be defined to 8 in the CPU specific embOS internal header file OS_Priv.h.
    Modification of this define requires recompilation of the embOS libraries.

Version 3.62

  1. OS_TICK_Config() and OS_TICK_HandleEx() implemented
    The extended embOS tick handler was modified to handle a runtime configurable tick increment and fractions.
    These parameter are setup by the new OS_TICK_Config() function and may be re configured during runtime.

Version 3.60d

  1. OS_POWER module implemented.
    The OS_POWER module may be used to control different power saving modes when entering idle state.
    Individual flags for different peripherals may be set whenever a peripheral needs power or clock, and may be reset, when power is not needed.
    The state of the power flags may be examined during OS_Idle by a call of OS_POWER_GetMask().
    This allows to switch off all of those peripherals which are not needed during idle times.

Version 3.60a

  1. embOS trial versions may run an unlimited number of tasks.
    The embOS trial versions run unlimited as long as only 3 tasks are created.
    Since version 3.60a, a time limit is added to the trial version. During the first 15 minutes, an unlimited number of tasks can be created.
    If more than three tasks were created during the time limit time, the system stops and calls OS_Error() when the time limit exceeded.

Version 3.60

  1. OS_AddTickHook() and OS_RemoveTickHook() implemented.
    These new functions allow the application to add and remove user function calls (hook functions) to the OS timer tick handler.

Version 3.52c

  1. OS_SetTaskName() introduced
    OS_SetTaskName() allows modification of task names on the fly.
    This may be useful if the functionality of a task changes during runtime and the new state should be shown using embOSView or an other task visualization tool.

Version 3.52

  1. OS_CallISR() and OS_CallNestableISR() introduced
    These new functions are required for some specific CPUs, but may be used in general to call an interrupt handler function without the need of using OS_EnterInterrupt() / OS_LeaveInterrupt() in the handler function.

Version 3.50b

  1. New library mode XR allows extremely compact applications
    The new XR libraries may be used to build extremely compact applications to save space in RAM and ROM and speed up context switching time.
    The XR embOS libraries are compiled with round robin scheduling disabled and task names disabled, which results in smaller data structures, smaller code size and faster context switching time.

Version 3.40c

  1. OS_Yield() may suspend a task unconditionally
    When tasks are running on round robin with timeslice, the function OS_Yield() can be used to end the timeslice of the running task immediately and activate an other task with the same priority which is ready for execution. The function has no effect on tasks that are not running on round robin.

Version 3.40

  1. Task switch time can be measured by application
    embOS now comes with sample applications which allow accurate measurement of task switch time in a running application.

Version 3.32o

  1. Automatic call of OS_INIT_SYS_LOCKS() removed.
    During initialization of embOS, OS_INIT_SYS_LOCK() is not called automatically.
    As most of the applications do not need thread safe system libraries, an automatic activation of syslocks causes unwanted overhead.
    If supported and required, the user may call OS_INIT_SYS_LOCKS() from his own application after normal initialization of embOS.

Version 3.32m

  1. OS_TimerEx, Extended timer implemented
    Extended timers are software timers which call a user defined callback function when the timer expires.
    In comparison to normal embOS timers, a parameter is passed to the timer callback function.
    The parameter value is initialized during timer creation.

Version 3.32j

  1. OS_CSemaRequest implemented
    May be used to decrement a counting semaphore conditionally, if a signal is available.
    The function never blocks the calling task and delivers a result which indicates whether the semaphore was available.

Version 3.32f

  1. OS_INIT_SYS_LOCKS() implemented
    May be used to include initialization code for thread safe system libraries.

Version 3.32d

  1. OS_Q_GetPtrTimed() implemented
    New queue retrieval function which waits for a message with specified timeout.

Version 3.32c

  1. OS_EVENT_WaitTimed() implemented
    New event object function to wait for an event with a timeout limit.

Version 3.32b

  1. Task context modified for debug builds
    The number of task activations is now part of the task context in debug builds.
    The number of activations are therefore displayed in the task list window of embOS plugin, when an embOS debug library is used.
    Previous versions of embOS showed this information in profiling builds only.

Version 3.32a

  1. A parameter may be passed to a task function
    Using the new embOS functions OS_CREATETASK_EX() or OS_CreateTaskEx() allows to pass a void pointer as parameter to a task.

Version 3.32

  1. Event objects introduced
    Event objects are standalone objects which are not assigned to a specific task.
    Event objects may be used to synchronize one or multiple task to a specific event.
    Events can be triggered from a task, a timer, or an interrupt handler.

Version 3.30a

  1. embOS internal time handling modified to allow long delays
    For 8- and 16-bit CPUs the maximum range for delays and timer periods is limited to 32767 embOS timer ticks, because time comparison ist done by integer calculation.
    By recompiling sources with data type OS_TIME defined as signed long, longer delays and timer periods up to 2147483647 ticks can be realized.
    The embOS libraries of object versions for 8- and 16-bit CPUs are still delivered with the limitation to 32767 timer ticks.

Version 3.28p

  1. New error handling for version without round robin scheduling
    In debug versions of embOS, OS_Error() is called with error code OS_ERR_TASK_PRIORITY, if a task is created with a priority which is already assigned to an other task.
    OS_Error() is also called with the same error code, if a task priority is assigned by call of OS_SetPriority() and the new priority is already assigned to an other task.
    Round robin switching can be disabled by recompiling sources with OS_RR_SUPPORTED defined as 0.

Version 3.28l

  1. OS_SignalCSemaMax()
    New counting semaphore handling function which specifies a maximum count value.
    This allows counting semaphores used as binary semaphores.

Version 3.28i

  1. OS_DeleteRSema()
    New resource semaphore handling function allows to delete resource semaphores during runtime.

Version 3.28h

  1. Additional error checks in debug builds of embOS
    OS_CreateRSema() now generates an error, when the addressed resource semaphore was already created before.
    OS_CreateCSema() now generates an error, when the addressed counting semaphore was already created before.
    OS_CreateMB() now generates an error, when the mailbox was already created before.
    OS_CreateTimer() now generates an error, when the software timer was already created before.
    OS_MEMF_Create() now generates an error, when the addressed fixed size memory pool was already created before.

Version 3.28g

  1. OS_GetSuspendCnt()
    New info function to examine suspension state and count of a task.

Version 3.26

  1. OS_Terminate() modified
    Tasks may be terminated anytime, regardless of task state.
    All resources claimed by the terminated task are automatically released.

Version 3.22a

  1. OS_PutMailFront() / OS_PutMailFront1()
    New mailbox functions to enable LIFO behavior of mailboxes.

  2. OS_PutMailFrontCond() / OS_PutMailFrontCond1()
    New conditional mailbox functions to enable LIFO behavior of mailboxes.

Version 3.20

  1. OS_Suspend() / OS_Resume() implemented
    New functions to suspend and resume tasks unconditionally.

  2. Fixed size memory blocks implemented
    New functions to allocate fixed size memory blocks from embOS.

  3. Dynamic memory allocation supported by embOS
    Thread safe dynamic memory allocation functions implemented.

Version 3.10k

  1. OS_GetMailTimed()
    New mailbox retrieving function with timeout.

Version 3.10d

  1. OS_GetpCurrentTimer()
    New info routine. May be used in timer callback routines to examine which timer expired.

  2. OS_GetpCurrentTask()
    New info routine. May be used to examine current running task.

Version 3.10

  1. Data format for communication with embOSView modified
    For terminal I/O in embOSView, the data format was changed. Therefore embOSView V3.10 or later is required.

  2. OS_WaitSingleEvent()
    Unmasked events remain unchanged when function returns.

  3. OS_WaitSingleEventTimed()
    Unmasked events remain unchanged when function returns. Timeout for waiting can be specified.

Version 3.08a

  1. Message Queue functionality enhanced
    OS_Q_GetPtrCond() function enables conditional request of data from Queue without task suspension.
    OS_Q_GetMessageCnt() functions delivers number of messages in the queue.

Version 3.08

  1. Message Queues
    Message queues enable intertask communication with messages of various size.

Version 3.06f

  1. OS_Use now returns a value
    When using a resource semaphore with a call of OS_Use(), the actual usage counter of the requested semaphore is returned as integer value. This may be helpful for some applications and is a lot more efficient than calling OS_Use() and then check the usage counter by calling OS_GetSemaValue().

Version 3.06

    All features of generic 3.06 kernel supported.

Improvements

Version 3.82r

  1. Thread local storage handling improved.
    For embOS ports which support thread local storage, the task switch time was slightly increased, even for tasks which did not use thread local storage.
    The implementation of thread local storage now is improved and does not affect the context switch time of tasks which do not use thread local storage.
  2. OS_TLS_Init() contains a new assertion.
    OS_TLS_Init() must not be called multiple times from the same task.
    In debug builds of embOS, the new implementation of OS_TLS_Int() now calls the OS_Error() function with error code OS_ERR_TLS_INIT when OS_TLS_Init() is called multiple times from the same task.
  3. OS_Terminate() contains a new assertion.
    OS_Terminate() must not be called from an embOS software timer callback function.
    In debug builds of embOS, the new implementation of OS_Terminate() now calls the OS_Error() function with error code OS_ERR_ILLEGAL_IN_TIMER when OS_Terminate() is called from an embOS timer.
  4. OS_ExtendTaskContext() contains a new assertion.
    For every task, the context can be extended only once.
    In debug builds of embOS, the new implementation of OS_ExtendTaskContext() now calls the OS_Error() function with the new error code OS_ERR_EXTEND_CONTEXT when OS_ExtendTaskContext() is called multiple times from the same task.

Version 3.82q

  1. OS_EnterNestableInterrupt() optimized to reduce interrupt latency.
    OS_EnterNestableInterrupt() caused some interrupt latency for zero latency interrupts when an embOS debug library was used.
    Only CPUs which disable interrupts on interrupt entry were affected, for example Renesas M16C / M32C.
    OS_EnterNestableInterrupt() for those CPUs was optimized to reduce the interrupt latency of high priority interrupts.

Version 3.82p

  1. OS_Suspend() now contains an assertion
    OS_Suspend() must not be called from an interrupt handler as it could cause a task switch immediately.
    In debug versions of embOS, OS_Suspend() now runs into OS_Error() if called from an interrupt handler or timer.
  2. OS_PutMail functions parameter declaration changed.
    The functions OS_Putmail(), OS_PutMailCond, OS_PutMailFront() and OS_PutMailFrontCond() now have a const pointer qualifier for the data that shall be put into the mailbox.
    The const qualifier clarifies and ensures that the data is not modifed by the function.

Version 3.82k

  1. Queue management optimized.
    Previous versions of embOS needed 2 integer words of mamangement information stored into the queue buffer for every data item in the queue.
    With verion 3.82k, the data management was optimized and only one additional integer word, the data size, is stored into the buffer together with the data.

Version 3.82i

  1. OS_StartTimer() modified to avoid warnings under GCC when compiling sources.
    When compiling sources with optimization under GCC, the code in OS_StartTimer() generated a "strict alias violation" warning.
    Some casts were removed and one pointer type was modified to eliminate this warning.

Version 3.82e

  1. Stack overflow check for system stack and interrupt stack added.
    In stack check builds, embOS now checks the system stack and the interrupt stack (if present) during every call of the scheduler.
    If a stack overflow is detected, the error handler OS_Error() is called with one of the new error codes OS_ERR_SYS_STACK or OS_ERR_INT_STACK.

Version 3.82d

  1. Variable type changed to avoid GCC warnings
  2. Changes in OS_Global initialization to avoid GCC warnings.

Version 3.82c

  1. Initialization of OS_Global in OSGlobal.c changed to avoid GCC warnings.
  2. The definition OS_MODEL was moved from OS_RAW.h to OSINFO.c because CPU name and library name will now be placed in OS_Priv.h.

Version 3.82b

  1. Communication functions for embOSView may be used from tasks.
    The embOS internal communication functions for embOSView, OS_OnRx() and OS_OnTx() may now be called from a task.
    Previous versions of embOS did not allow calling these functions from outside an interrupt handler and called OS_Error() in debug builds.
    Right now, theses functions and the communication protocol are not documented. The user should not call these functions.
    The modification was done for future extensions.

Version 3.80i

  1. Resource semaphore handling speed optimized.
    OS_Use() and OS_Unuse() were optimized to allow faster locking and unlocking on rersource semaphores.
    The embOS scheduler was optimized to allow faster activation of tasks waiting on resources semaphores.

  2. Support for CPUs with growing stack addresses supported.
    To handle CPUs with growing stack addresses, OS_CreateTask() and OS_CreateTaskEx() were modified. The compile time switch OS_STACK_AT_BOTTOM is now honored by these functions and stack is handled correctly for those CPUs.
    Existing embOS version are not affected, this modification was made for newer versions for CPUs with growing stack addresses.

Version 3.80g

  1. embOS internal semaphores can be shown with the embOS plugin for IAR C-Spy.
    The embOS plugin for IAR did not show the system locking semaphores used for malloc and other non re-entrant system functions when no other resource semaphores were used in the application.
    These semaphores can be now be seen in the Resource semaphore window of the embOS C-Spy plugin.

Version 3.80

  1. OS_Suspend() / OS_Resume() optimized.
    The OS_Suspend() and OS_Resume() functions were optimized to perform faster task switches on 32bit CPUs.

  2. Internal data structures and scheduler optimized.
    Internal data structures were modified to allow more efficient access. Together with a modification of the scheduler, this results in faster task switches and interrupt handling.

  3. OS_InitKern() does not enable interrupts.
    The previous OS_InitKern() function enabled interrupts by a call of OS_RestoreI(), thus enabling interrupts, as long as OS_IncDI() was not called before.
    The new OS_InitKern() function does not automatically enable interrupts. The interrupt enable state remains unchanged.

Version 3.62c

  1. New error code OS_ERR_IDLE_RETURNS
    The debug version of embOS now checks whether OS_Idle() returns in which case OS_Error() is called with the new error code.
    OS_Idle() has to be implemented as an endless loop and must never return. If OS_Idle() is modified and returns by accident, the behavior is unpredictable and this error might be difficult to find.
    The new version of embOS now catches a return from OS_Idle() and calls OS_Error().

Version 3.62b

  1. New error code OS_ERR_ISR_NO_HANDLER
    The new error code is generated and OS_Error() is called, if an un-initialized interrupt handler is called.
    This error handling is available on some ports of embOS, especially those, where embOS initializes an interrupt vector table in RAM.
    During initialization, a default dummy handler is installed for all interrupt sources. This handler should normally be replaced by installing application specific interrupt handlers.
    Because the default dummy interrupt handler should never be called by an application, it calls OS_Error() with the new error code OS_ERR_ISR_NO_HANDLER to signal the setup error.

Version 3.62

  1. Internal representation of scheduler states modified.
    The states which control pending task switches and show the reason of the task switch are handled in compact structure now.
    The previous version used bit fields and definitions which were difficult to understand and which were difficult to handle.
    The new definition and structure is easier to handle which results in faster code execution.

Version 3.60e

  1. OS_ERR_WRONG_STACK error code added.
    Some ports of embOS for CPUs with different stack pointers require that the CPU enters main() with a specific stack selected.
    These ports of embOS now contain code to examine the stack used in main and call OS_error() with the new error code OS_ERR_WRON_STACK, if the startup code entered main with the wrong stack-pointer selected.

Version 3.60c

  1. OS_ASSERT_INIT_CALLED()
    A new assertion is added which checks whether OS_InitKern() was called before tasks are created.
    In debug builds, the OS_Error() function will be called, if tasks are created before calling OS_InitKern().

  2. OS_GetTaskName() modified.
    In previous versions, OS_GetTaskName() had to be called with a valid task ID. Now, the NULL pointer may be passed as argument to address the current task.
    The function will always return a valid string.
    The previous implementation might have returned a NULL pointer, which could cause problems, if the result was not evaluated be the calling function.

Version 3.60b

  1. OS_ASSERT_ISR_LEVEL()
    A new assertion was defined which will call OS_Error() if the CPU runs in interrupt mode but OS_EnterInterrupt() or OS_EnterNestableInterrupt() was not called.
    With version 3.60b the assertion is not implemented, it is just defined and usage is prepared. The implementation will be made in future versions of embOS.

Version 3.60

  1. OS_GetVersion() implemented as function
    OS_GetVersion() may be used by the application to retrieve the embOS library version. The result may be used to verify whether the library version matches the embOS header file RTOS.h.

Version 3.52e

  1. All embOS variables located in one module.
    All embOS variables are located in one module now. In previous versions of embOS, some module specific embOS variables were located in the module they were used for.

Version 3.52

  1. OS_TickHandler() and OS_TickHandler_Ex() removed.
    These two functions are obsolete, because they can be replaced by OS_HandleTick() and OS_HandleTick_EX(), if OS_EnterInterrupt() / OS_LeaveInterrupt is used in the interrupt handler.

Version 3.50c

  1. OS_GetTime32() optimized for 32bit CPUs
    For 32bit CPUs, OS_GetTime32() is now automatically replaced by an efficient macro which delivers value of the embOS internal time variable.
    In previous versions of embOS, a function was called, when it was not over-written in the CPU specific part of the OS header file.

Version 3.50b

  1. Internal optimizations
    Some internal optimizations were performed to optimize task switching time and interrupt latencies.

Version 3.50b

  1. Internal optimizations
    Some internal optimizations were performed to optimize task switching time and interrupt latencies.

Version 3.50

  1. Scheduler optimized
    The embOS scheduler was optimized to reduce task switching time and interrupt latencies.

Version 3.40d

  1. OS_Yield() now writes an entry into the trace buffer
    When using the debug library with trace capabilities, OS_Yield() writes an entry into the trace buffer which shows the function call and the calling task.
    embOSView version 3.40d is required to show this entry.

Version 3.40b

  1. Queue management improved.
    For some CPUs, the buffer start address for Queues has to be aligned. Now embOS automatically corrects the alignment, if required.

Version 3.40a

  1. Counting semaphores improved.
    The counters of counting semaphores are now integer values.
    Error handling is also improved. When a counting semaphore overflows, the embOS error handler OS_Error() is called in debug builds.

Version 3.40

  1. Task switch time improved.
    Scheduling optimized to improve task switch time.

  2. Task switch time improved for task events.
    Task event handling modified to improve task switch time for tasks waiting on events.

  3. Interrupt latency improved.
    During task switch, the time period when interrupts are disabled is reduced.

  4. embOS timer tick handler improved.
    The standard timer tick handler run faster now. The embOS internal time variable is incremented by 1 on every timer tick.
    When different increments are required, the new timer tick handler OS_HandleTick_Ex(), OS_TickHandler_Ex() or OS_HandleTickDI_Ex() have to be used by application.
    Different increments may be configured by a call of OS_CONFIG().

Version 3.32i

  1. Task switch to OS_Idle() modified.
    The call of OS_Idle() from OS_ChangeTask can be overwritten (inhibited) by defining the macro OS_IDLE() which is normally defined as OS_Idle().
    This allows task switching via an exception for specific CPU/compiler versions.

Version 3.32g

  1. Pointer comparison improved for fixed size memory pools (OS_MEMF module).
    Some compiler produced wrong pointer comparison code in far memory model.
    For specific CPU/compiler versions, the new OS_POINTER_TO_VALUE() function was introduced to deliver correct results in pointer comparison.

Version 3.28n

  1. embOS round-robin scheduling may be disabled.
    Round-robin scheduling may be disabled by recompiling sources with OS_RR_SUPPORTED defined as 0.
    This will save some bytes of RAM and ROM and may make sense for small CPUs.

Version 3.28g

  1. embOS scheduling simplified
    Task activation and deactivation on "waitable objects" as mailboxes, semaphores, events, fixed size memory blocks now all use the same scheduling method.
    This modification saves ROM and RAM and makes scheduler easier to understand and to maintain.
    Applications which accessed internal data structures of waitable objects directly have to be modified.

Version 3.24

  1. Stack check performance increased
    Stack check now runs much faster on 32- and 16-bit target CPUs.

Version 3.10q

    OS_CreateTask now initializes profiling variables. (Required if TCB is used multiple times)

Version 3.06

    First version. None.

Program corrections

Version 3.82m

  1. Queue management corrected.
    Queue management failed when the Q-buffer was filled up to the end. This might have happened, when messages are produced faster then they were consumed.
    The OS_Q_Purge() and OS_Q_Put() functions did not handle this case correctly and caused the queue to be corrupted.
    OS_Error() might have been called with error number 143, or OS_Q_GetPtr() might have returned with a wrong message size or a message size of 0.
    The problem existed since version 3.82k of embOS and is fixed with version 3.82m.

Version 3.82k

  1. Queue management corrected.
    Queue mamagement failed when multiple producer put data into the same queue and one of the producer was an ISR handler.
    When the ISR handler was called during a running transfer into the queue, the data in the queue could be corrupted.
    The problem existed in all previous versions of embOS and is fixed with version 3.82k.

Version 3.80k

  1. Trace functions corrected.
    The previous version of embOS intoduced a bug in the trace module. Task names were not shown and the task sensitive filter did not work.
    The problem existed in version 3.80i in trace libaries only and is corrected in version 3.80k.

Version 3.62c

  1. OS_GetPriority() corrected.
    In OS_GetPriority() was called with NULL as paramter, the debug version of embOS called OS_Error() with error code OS_TASK_INV.
    The NULL pointer is allowed now and the function delivers the priority of the running task as described in the documentation.
    This error existed in all previous versions of embOS and is fixed with version 3.62c.

Version 3.60e

  1. OS_EVENT_Create() corrected.
    OS_EVENT_Create() might have called the error-handler OS_Error() with errorcode OS_ERR_2USE_EVENTOBJ if an event-object was created dynamically or as a local object in a function.
    This happened, if the un-initialized data area of the event object contained one specific byte (id code) of the event object.
    The problem existed in all previous embOS versions and is fixed with version 3.60e.

  2. embOSView corrected.
    When the update interval of embOSView was set to 200ms or a longer value, the reaction of user input or mouse events was blocked for the same time.
    The problem existed since version 3.32 of embOSView and is fixed with version 3.52b.

Version 3.52b

  1. OS_SendString() corrected.
    When sending an empty string, the calling task was suspended forever.
    The problem existed in all previous embOS versions and is fixed with version 3.52b.

  2. embOSView corrected.
    When the update interval of embOSView was set to 200ms or a longer value, the reaction of user input or mouse events was blocked for the same time.
    The problem existed since version 3.32 of embOSView and is fixed with version 3.52b.

Version 3.52a

  1. OS_Terminate() for XR-build corrected.
    OS_Terminate() in XR-builds might have failed and the system stuck in an endless loop.
    All other library modes were not affected.

Version 3.50a

  1. System stack check corrected
    The system stack check failed in the case the system stack grows from lower addresses to higher addresses.
    In this case, the system stack was not correctly filled with the stack check pattern.
    The problem existed for embOS for PIC only and is fixed with version 3.50a.

Version 3.40d

  1. OS_Suspend() corrected
    When using the debug library with trace capabilities, a call of OS_Suspend() wrote a wrong trace code into the trace buffer.
    Instead of writing the code for task suspension, the code for task termination was written.
    The function itself worked correctly, only the data written into the trace buffer was wrong.
    The problem existed in all previous embOS versions and is fixed with version 3.40d.

Version 3.32o

  1. OS_Unuse() corrected
    OS_Unuse() must not be called from a task that does not claim the resource semaphore.
    According to the documentation, the debug build of embOS should generate a call to OS_Error() if this fault happens.
    All previous versions of embOS did not call OS_Error(). Now, OS_Error() will be called in that situation with error code 156: OS_ERR_RESOURCE_OWNER().

Version 3.32l

  1. OS_EVENT_Delete() corrected
    OS_EVENT_Delete() did not work correctly. OS_LeaveRegion() was called inside the function without calling OS_EnterRegion() before.
    In debug builds of embOS, the error-handler OS_Error() was called with error 151 (OS_ERR_LEAVEREGION_BEFORE_ENTERREGION).
    In release builds the system was blocked because the underflow of region count inhibits all further task switches, or system crashes, because incrementing the region count the next time allows task switches instead of blocking them. The problem existed in all previous versions and is fixed with version 3.32l.

  2. Round-robin task switching corrected.
    Round robin task switching did not work correctly in previous version. A task which was blocked for some reason could be activated. The system crashed during task switch.
    The problem existed since version 3.32j and is fixed with version 3.32l.

Version 3.32k

  1. Handler function _OS_OnTx() for serial communication to embOSView corrected.
    The transmission handler for communication with embOSView might have sent incorrect data to embOSView, because internal control state was updated after sending the data.
    The problem occurred on a new embOS port for a specific CPU only and is fixed with version 3.32k.

Version 3.32h

  1. OS_Error() was required in release build when resource semaphores were used.
    When using release build libraries and resource semaphores, the embOS error handler OS_Error() was required and the file OS_Error.c had to be compiled and linked in a project.
    The problem existed since version 3.28i of embOS and is fixed with version 3.32h.

Version 3.32e

  1. OS_GetMessageCnt() corrected.
    The type of the retun value of OS_GetMessageCnt() was an unsigned integer in release builds, but an integer in debubg builds.
    This was corrected to return an unsigned integer in all builds.
    The problem existed in all previous versions of embOS end is fixed with version 3.32e.

Version 3.32a

  1. embOSView corrected.
    embOSView sometimes showed wrong task state "Terminated" for tasks which were not terminated.
    This bug existed in all previous versions of emBOSView and is fixed with version 3.32a.

Version 3.30d

  1. OS_MEMF_Create() corrected.
    Alignment check of buffers for fixed size memory blocks did not work correctly in debug libraries of embOS.
    OS_Error() was called during OS_MEMF_Create(), even though the memory pool buffers start address was correctly aligned.
    This problem existed since embOS version 3.28m in all debug build libraries and is fixed with version 3.30d.

Version 3.30b

  1. OS_Suspend() corrected.
    OS_Suspend() did not work correctly, when an activated task with higher priority than the running task was suspended.
    When the task with highest priority was suspended during system initialization before embOS was started, embOS crashed during the call of OS_Start(), or called the embOS error handler OS_Error() with error code OS_ERR_INV_TASK (128).
    The same crash occurred, when the application was running in a critical region and a task with higher priority was activated, but not started because of the critical region, and was then suspended by a call of OS_Suspend().
    This problem existed in all previous embOS versions and is fixed with version 3.30b.

Version 3.28q

  1. Problem with suspended tasks which were on delay fixed.
    If a task which was on delay was suspended, the delay timer for that task was not handled.
    This might have resulted in additional longer delay when the task was resumed later.
    This problem existed in all previous embOS versions and is fixed with version 3.28q.

Version 3.28p

  1. OS_Suspend() corrected.
    OS_Suspend() did not work correctly, when the current task was suspended from within an interrupt handler, or from a critical region.
    The application crashed, or called the embOS error handler OS_Error() with error code OS_ERR_INV_TASK (128).
    As OS_Suspend() automatically enters a critical region in debug-trace builds, OS_Suspend() also failed, when it was called to suspend the current task in debug-trace builds of embOS.
    This problem existed in all previous embOS versions and is fixed with version 3.28p.

  2. Alignment problems fixed for fixed size memory blocks
    Some CPUs, mainly the 32bit RISC types, require aligned buffer start addresses for fixed size memory pools.
    The debug version of embOS now checks alignment of buffer start address and data blocks in the buffer. If data blocks and buffer start address is not aligned, an error is generated and embOS error handler is called during creation of a fixed size memory pool.
    This problem existed in all previous embOS versions and is fixed with version 3.28m.

Version 3.28l

  1. OS_MEMF_Free() added
    The function OS_MEMF_Free() was not included in embOS libraries, but was documented in embOS users manual and was also declared in RTOS.h.
    This problem existed in all previous embOS versions and is fixed with version 3.28l.

Version 3.28k

  1. OS_MEMF_IsInPool() corrected
    OS_MEMF_IsInPool() failed, if a pointer was checked which pointed to the first address after the memory pool. This pointer was reported as belonging to the pool.
    This problem existed in all previous embOS versions and is fixed with version 3.28g.

Version 3.28g

  1. OS_WakeTask() for trace build corrected
    OS_WakeTask() in trace build disabled task switches.
    This problem existed since version 3.24 and is fixed with version 3.28g.

  2. OS_GetMailTimed() / mailbox handling corrected
    During call of OS_GetMailTimed, interrupts were re-enabled too early. If a mail was just put into a mailbox and the timeout occurred at the same time, a mailbox internal control variables which managed waiting tasks was set to a wrong value.
    This resulted in wrong mailbox handling and caused task waiting for mail kept suspended, even though, mail was available. This problem existed in all previous versions of embOS and is fixed with version 3.28g.

Version 3.26a

  1. OS_MEMF_Release() corrected
    OS_MEMF_Release() might have failed according to absolute address of memory block.
    The problem occurred because address calculation was done with 16bit integer value.
    Calculation was modified to use 32bit values to fix the problem.

Version 3.20c

  1. OS_GetMailTimed() corrected
    OS_GetMailTimed() did not retrieve a mail after 256 calls, the waiting task remained suspended. Corrected with version 3.20c of embOS.
    This problem exists in all previous embOS versions and is fixed with version 3.20c.

Version 3.10r

  1. OS_TASK structure definition modified
    Previous definition of OS_Task structure may cause linker warnings [w6] and [w35] even though everything was correct.
    The problem was caused by unions defined inside a structure.
    OS_TASK definition was modified to avoid those linker warnings.

Version 3.10q

  1. OS_GetMail
    OS_GetMail functions corrected (interrupts disabled before call of _GetMail).

  2. OS_Terminate problem with RR
    OS_Terminate problem with RR tasks corrected. TimerTick could set RR/PP pending between UNMARKTASK and OS_Switch. OS_Switch will then call OS_DoRR, which could append OS_pCurrentTask (the one you want to terminate if e.g. OS_Terminate(NULL)).

Version 3.10n

  1. Sample interrupt handler
    For embOS it is not legal to call OS_EnterInterrupt again after final call of OS_LeaveInterrupt has been made. In the sample OS_irq_handler shipped with embOS, there was a possible call of OS_EnterInterrupt after OS_LeaveInterrupt. The sample OS_irq_handler implementation has been corrected.

Version 3.06h

  1. OS_Unuse error code corrected
    When calling OS_Unuse() more often than OS_Use(), the debug version generated an OS_ERR_TASKLIST_CORRUPT error instead of OS_ERR_UNUSE_BEFORE_USE.
    This problem exists in all previous embOS versions and is fixed with version 3.06h.

Version 3.06f

  1. Round Robin Task Problem corrected
    In very specific situation it was possible that a round robin task got 100%
    of CPU time for round robin tasks instead of sharing that time with other
    round robin tasks.

Release history

Version Release date Short explanation
V3.82r 28. Jan 2011 TLS support improved.
V3.82q 18. Jan 2011 OS_EnterNestableInterrupt() optimized.
V3.82p 12. Jan 2011 OS_PutMail functions parameter qualifier modified.
V3.82o 04. Jan 2011 New API function OS_WaitMailTimed()
V3.82n 06. Dec 2010 New API functions for task suspension and synchronization.
V3.82m 16. Nov 2010 Queue handling corrected.
V3.82l 26. Oct 2010 TLS support added
V3.82k 21. Sep 2010 Queue handling corrected.
New API functions for queues and delay.
V3.82i 26. Jul 2010 Warnings under GCC eliminated.
V3.82h 28. May 2010 Internal data types modified.
V3.82g 12. May 2010 OS_Start() modified.
V3.82f 16. Apr 2010 New function OS_IsRunning() implemented.
V3.82e 17. Dec 2009 Stack check for system and interrupt stack added.
V3.82d 16. Dec 2009 Variable type changed to avoid GCC warnings
Changes in OS_Global initialization to avoid GCC warnings.
V3.82c 18. Nov 2009 Changes in OS_Global initialization to avoid GCC warnings.
Definition OS_MODEL moved from OS_RAW.h to OSINFO.c.
V3.82b 28. Oct 2009 Communication to embOSView modified.
V3.82a 25. Sep 2009 Error handling for queues implemented.
OS_Q_IsInUse() implemented.
V3.82 17. Sep 2009 Scheduling optimized.
V3.80l 07. Sep 2009 New Macros OS_U32_TO_PTR_TYPE() and OS_EI_HP_ON_ENTRY() added.
V3.80k 02. Sep 2009 Trace functions corrected.
V3.80i 11. Aug 2009 Optimized resource semaphore handling.
V3.80h 27. Jul 2009 Modified interrupt entry.
V3.80g 05. Jun 2009 Improved embOS plugin.
V3.80f 03. Jun 2009 Improved error handler.
V3.80 14. Nov 2008 Improved scheduler.
V3.62c 24. Oct 2008 OS_GetPriority() corrected.
Additional error handling.
V3.62a 06. Oct 2008 OS_STACK_ALIGN implemented.
V3.62 01. Sep 2008 Tick handler modified.
V3.60e 25. Aug 2008 OS_EVENT_Create() corrected.
V3.60d 28. Mai 2008 OS_POWER module implemented.
V3.60c 24. Apr 2008 OS_GetTaskName() improved. OS_ASSERT_INIT_CALLED() added.
V3.60b 25. Jan 2008 OS_ASSERT_ISR_LEVEL() defined.
V3.60a 25. Jan 2008 Time limit for trial version added.
V3.60 18. Nov 2007 System tick hook functions introduced.
V3.52e 12. Nov 2007 Location of embOS variables modified.
V3.52c 17. Oct 2007 OS_SetTaskName() introduced.
OS_SendString() corrected.
embOSView corrected.
V3.52a 03. Sep 2007 OS_Terminate() in XR-builds corrected.
V3.52 17. Aug 2007 OS_CallISR(), OS_CallNestableISR() introduced.
OS_TickHandler(), OS_TickHandler_Ex() removed.
V3.50c 10. Aug 2007 OS_GetTime32() optimized.
V3.50b 16. Jul 2007 Task switching time and interrupt latencies improved.
V3.50a 12. Jul 2007 System stack check for PIC corrected.
V3.50 10. Jul 2007 embOS scheduler optimized.
V3.40d 05. Jul 2007 OS_Suspend() corrected.
V3.40c 22. Jun 2007 OS_Yield() implemented.
V3.40b 19. Jun 2007 Queue handling improved.
V3.40a 05. Jun 2007 Counting semaphores improved.
V3.40 08. May 2007 Improvements.
V3.32o 19. Apr 2007 OS_Unuse() error handling improved.
V3.32n 16. Apr 2007 OS_SUSPEND_TASK_ON_TERMINATE implemented.
Fixes a Windows bug which caused emBOS Simulation to crash.
V3.32m 02. Apr 2007 OS_TimerEx implemented.
V3.32l 28. Mar 2007 Round robin switching corrected.
V3.32k 21. Mar 2007 Communication to embOSView modified.
V3.32j 31. Jan 2007 OS_CSemaRequest() implemented.
V3.32i 26. Jan 2007 Switch to OS_Idle() modified.
V3.32h 15. Jan 2007 Error handling for resource semaphores corrected.
V3.32g 30. Dec 2006 OS_PTR_TO_VALUE() added.
V3.32f 07. Dec 2006 OS_INIT_SYS_LOCKS() added.
V3.32e 07. Nov 2006 OS_GetMessageCnt() corrected.
V3.32d 05. Nov 2006 OS_Q_GetPtrTimed() added.
V3.32c 22. Sep 2006 OS_EVENT_WaitTimed() added.
V3.32b 18. Sep 2006 Enhanced debug information.
V3.32a 04. Aug 2006 Extended task implemented
V3.32 18. Jul 2006 Event objects implemented
V3.30d 20. Jun 2006 OS_MEMF_Create() corrected
V3.30b 18. May 2006 New sources version 3.30b, OS_Suspend() corrected
V3.28p 16. Feb 2006 New error handling for version without round robin scheduling
V3.28i 14. Oct 2005 New embOS sources 3.28i with new function OS_DeleteRSema()
V3.28h 29. Aug 2005 New embOS sources 3.28h, Enhanced error checks
V3.28g 23. Aug 2005 New embOS sources 3.28g
V3.24 25. Nov 2004 New embOS sources 3.24
V3.20d 22. Jan 2004 New embOS sources V3.20, OS_GetMailTimed corrected
V3.10k 13. Jan 2003 Upgrade to new generic source V3.10k
V3.06f 24. Oct 2001 Upgrade to new generic source V3.06f
V3.06 23. Jul 2001 First version with release history

Miscellaneous

This document was first released with version 3.06 of the software.
Software released earlier is documented internally. This information is available at request.


Copyright 2001-2011 SEGGER Microcontroller GmbH & Co. KG. All rights reserved.
For more information, please visit our website www.segger.com or contact us at info@segger.com