Release notes embOS V4.16 for MSP430 CPUs using IAR compiler

  1. Tool chain used for build
  2. New features
  3. Improvements
  4. Program corrections
  5. Known problems/limitations
  6. Release history
  7. Miscellaneous

Tool chain used for build

The following tools have been used:

Compiler:  IAR ICC430    V5.52.1.50724
Assembler: IAR A430      V5.52.1
Librarian: IAR XLIB      V5.6.0.36
Workbench: IAR IarIdePM  V6.5.8.2682

New features

Version 4.16

  1. Update to latest embOS generic sources V4.16.
  2. New start project for TI MSP430F5659 added.

Version 3.86n

  1. Update to new embOS version 3.86n
    The new features and corrections of the embOS sources are described in the embOS generic release notes and manual.

Version 3.86l

  1. Update to new embOS version 3.86l
    The new features and corrections of the embOS sources are described in the embOS generic release notes and manual.

Version 3.84

  1. Update to new IAR workbench V530
    The new IAR workbench V5.30 required modified definition of interrupt functions in the embOS sources.
    The previous syntax resulted in an empty vector table. The new BSP files can now be used with EW430 V5.20 as well as with the newer version V5.30.
  2. New embOS sources V3.84
    The new features of the embOS sources are described in the embOS generic release notes and manual.

Version 3.82s

  1. IAR DLIB support added.
    embOS for MSP 430 now comes with libraries for the IAR DLIB as well as for the IAR CLIB.
    The previous version 3.82s came with libraries for DLIB only. The new version uses libraries for CLIB per default as versions prior V3.82s did.

Version 3.82s

  1. New embOS sources 3.82s.
  2. BSP for MSP430F5529 added.
  3. Project structure changed.

Version 3.82n

  1. New embOS sources 3.82n
    New API functions for task suspension and synchronization. All new features and corrections are explained in the embOS generic release notes.

Version 3.62c

  1. Support for XMS430F5438 added
    embOS for MSP 430 now comes with a board support package and ready to go start project for the XMS430F5438 CPU.
    The start project and BSP may be used for other CPUs of the XMS family as well.
  2. New embOS sources 3.62
    All new features and corrections are explained in the embOS generic release notes.

Version 3.60a

  1. New embOS sources 3.60a
    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.52c

  1. Update to new IAR compiler version 4.10A.
  2. New embOS sources 3.52c
    The new embOS version 3.52c offers some new functions and improvements which are documented in the generic release notes of embOS.

Version 3.40c

  1. Additional data models for MSP430x devices and compiler V4.01 supported.
    With version 4.01B of the IAR compiler, additional data memory models were introduced for MSP430x devices.
    Older versions of embOS libraries can not be linked.
  2. 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 caounting semaphore, 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. MSP430x devices supported
    embOS for MSP430 now comes with libraries for extended MSP430 derivates with ROM size above 64KB.
  2. 64bit floating point calculation supported
    embOS for MSP430 now comes with libraries compiled with 64bit floating point option.
  3. OS_INIT_SYS_LOCKS() implemented
    May be used to include initialization code for thread safe system libraries automatically.
    If defined, this new function is called from OS_IntKern().

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_CreateTasEx() 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 datatype 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 errorcode, if a task priority is assigned by call of OS_SetPriority() and the new pririty 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. embOS plugin for IAR workbench
    The new embOS plug-in for IAR Embedded Workbench provides embOS awareness during debugging sessions.
    This enables you to inspect the state of several embOS primitives such as the task list, resource semaphores, mailboxes, or timers.
  2. 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.
  2. Update for new IAR workbench 4.4 and compiler 3.30A
    Start projects and libraries updated for new IAR compiler.

Version 3.26

  1. OS_Terminate() modified
    Task 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 implemeted
    New functions to allocate fixed size memory blocks from embOS.
  3. Dynamic memory allocation supported by embOS
    Thread safe dynamic memory allocation functions implemented.
    Not delivered with standard libraries. Can be activated when compiling sources only.

Improvements

Version 3.84

  1. CSpy simulation macros modified to be usable with EW430 V5.30
    The new IAR workbench V5.30 requires modified definition of interrupt simulation to accept simulated interrupts.
    The previous definitions in the simulation macros did not trigger the simulated interrupts.

Version 3.62c1

  1. Workaround for XMS CPU bug added.
    Some revisions of the XMS430F5xxx CPUs may fail after exction of status register update followed by specific commands when an interrupt is pending.
    One specific instruction will cause that the PC and SR register will be pushed twice, which will then cause the reti instruction to fail.
    Such behavior is described as CPU18 bug in the CPU errata sheets. Under other circumstances, it seemed that some instructions following the status register update are not executed.
    This might have caused an endless loop when the embOS scheduler was called with a pending interrupt condition.
    A workaround was found by modified interrupt enable and interrupt disable procedure which fixed the problem.

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 inctrements 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 norammly 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 inroduced 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 waitable objects directly have to be modified.

Program corrections

Version 3.62c2

  1. Uart initialization for XMS430F5438 corrected.

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() bfore.
    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 inhibts 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.

Version 3.28m

  1. Alignment problems fixed for fixed size memeory 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 biffer 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_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.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.10p

  1. GetMail functions corrected
    Internal functions for retrieving mail from a mailbox did not disable interrupts. This could cause message losses, when mail was written into mailboxes from within interrupt handlers.
    This problem exists in all previous embOS versions and is fixed with version 3.10p.

Known problems / Restrictions

Medium memory model for MSP430x not supported.

Release history

Version Release date Short explanation
V4.16 10. Mar 2016 Update to latest embOS generic sources V4.16.
New start project for TI MSP430F5659 added.
V3.86n 10. Dec 2012 New embOS sources V3.86n
V3.86l 27. Nov 2012 New embOS sources V3.86l
V3.84 13. Oct 2011 Update for EW430 V5.30
New embOS sources V3.84
V3.82t 16. May 2011 embOS libraries for IAR DLIB delivered with embOS
embOS libraries for IAR CLIB delivered with embOS
Projects use CLIB per default.
V3.82s 26. Apr 2011 Update to new embOS sources 3.82s.
BSP for MSP430F5529 added.
Project structure changed.
V3.82n 06. Dec 2010 Update to new embOS sources 3.82n
V3.62c2 20. Apr 2010 Uart initialization for XMS430F5438 corrected.
V3.62c1 08. Jan 2009 Fix for XMSF5x CPU bug
V3.62c 04. Nov 2008 Update to new embOS sources 3.62c
Support for XMS430F5438
V3.60a 04. Mar 2008 Update to new embOS sources 3.60a
V3.52c 28. Oct 2007 Update to new IAR compiler V4.10A, new embOS sources
V3.40d 07. Jul 2007 Update to new IAR compiler, new embOS sources
V3.32j 16. Feb 2007 OS_CSemaRequest() added
V3.32g 15. Jan 2007 MSP430x devices supported
V3.28p 16. Feb 2006 New error handling for version without round robin scheduling
V3.28m 20. Nov 2005 New sources version 3.28m with additional functions and corrections
V3.28g 08. Jul 2005 New embOS sources 3.28, corrected version.
V3.20f 28. Apr 2004 Toolchain switched to IAR workbench 4.1 and compiler 3.10A
V3.10q 27. Aug 2003 Toolchain switched to IAR workbench 3.0 and compiler 2.20A
V3.10k 24. Jan 2003 Initial release for MSP430

Miscellaneous

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

Copyright 2001-2016 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