Release notes for embOS Version 3.84a for NEC K0/K0S/K0R and IAR compiler

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

Tool chain used for build

The following tools have been used:

   Compiler:  IAR ICC78K/ICC78K0R  V4.71.1.50113
   Assembler: IAR A78K/A78K0R      V4.71.1.50113
   Librarian: IAR XLIB             V5.1.0.8
   Workbench: IAR IDE              V6.0.6.1828
      

New features

Version 3.84a

  1. Update to new embOS sources V3.84a
    All new features of the new embOS sources are described in the generic release notes and manuals.

Version 3.60d4

  1. Update to new IAR workbench / compiler V4.62A
    The new compiler version 4.62A required a re-build of the embOS libraries, because libraries built with older versions of the tool chain could not be linked.
    The start projects were converted to the new format of the workbench V5.5.

Version 3.60d1

  1. Built with latest IAR compiler/linker
    embOS for K0 was built with the latest IAR compiler V4.60A and linker V4.61C

Version 3.60d

  1. IAR DLIB support added
    embOS for K0 now comes with libraries which can be used in C++ projects using IAR DLIB environment.
  2. Update to embOS sources 3.60d
    embOS comes with new features which are explained in the generic release notes and manual.

Version 3.60a

  1. Update to embOS sources 3.60a
    embOS comes with several new features which are explained in the generic release notes and manual.

Version 3.52a

  1. Support for K0R CPUs added
    embOS for K0 now comes with a start project and libraries for K0R CPUs.
    The start project is prepared to run on the NEC 78K0R Cool it! eval kit.
  2. Update to IAR compiler version 4.50A
    When using the new IAR compiler V4.50A, the embOS libraries compiled with version 4.30A can not be linked, because of an other run time model number.
    Therefore, an update of enbOS libraries was required to be useable with the current IAR workbench.
  3. 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.
  4. 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.
  5. OS_INIT_SYS_LOCKS() implemented
    May be used to include initialization code for thread safe system libraries.
    If defined, this new function is called from OS_InitKern().
  6. OS_Q_GetPtrTimed() implemented
    New queue retrieval function which waits for a message with specified timeout.
  7. OS_EVENT_WaitTimed() implemented
    New event object function to wait for an event with a timeout limit.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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 priority is already assigned to an other task.
    Round robin switching can be disabled by recompiling sources with OS_RR_SUPPORTED defined as 0.
  13. 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.
  14. OS_SignalCSemaMax()
    New counting semaphore handling function which specifies a maximum count value.
    This allows counting semaphores used as binary semaphores.
  15. OS_DeleteRSema()
    New resource semaphore handling function allows to delete resource semaphores during runtime.
  16. 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.
    This new feature is disabled per default in embOS for K0 and can only be activated by recompiling sources.

Version 3.24b

  1. Update for new IAR workbench 4.3 and compiler 3.10A
    Start projects and libraries updated for new IAR compiler.
    Serial ROM monitor, now included in CSpy, is supported.

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.

Version 3.10k

  1. OS_GetMailTimed()
    New mailbox retreiving 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 farmat 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. First version with this document
    Previous version of embOS for NEC K0/K0S was V2.41.

Improvements

Version 3.52a

  1. Default embOS timer handler optimized.
    OS_HandleTick(), the default handler for the embOS timer interrupt was optimized to speed up the interrupt handling.
    The timer does not handle variable configurable increments for the internal embOS time variable. The time is incremented by one on every interrupt.
    For slow K0/K0S CPUs, the configuration macro OS_CONFIG() can still be used, but the configuration will only be handled by the optional embOS timer interrupt handler OS_HandleTick_Ex() which has to be called from the timer interrupt.
    The RTOSInit.c files will have to be modified to use this alternative timer handler and OS_CONFIG():
  2. 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)

Version 3.10f

  1. Memory requirements reduced
    Granularity enhanced for non embOSView builds to save ROM and RAM

Version 3.08a

  1. First version with this document
    Previous version of embOS for NEC K0/K0S was V2.41.

Program corrections

Version 3.60d3

  1. Reference to XCODE segment removed
    The modification in version 3.60d2 added a reference to the XCODE segment into the embOS kernel for all memory models.
    As this segment is not required and not defined for near memeory models or K0/K0S CPUs, the application could not be linked using standard linker files.
    With version 3.60d3 the XCODE segment is referenced for K0R Cpus only, when the far code model is selected.
  2. Far function call from kernel for K0R CPUs corrected
    The modification in version 3.60d2 inserted a far function call from the embOS kernel when the far data model was selected.
    The far function call is required when the far code model is selected.
    With version 3.60d3 the kernel performs far function calls when the far code model is selected.

Version 3.60d2

  1. Wrong function call in assembler part corrected
    A wrong function call to an embOS function in the assembler part caused a linker error with far code model.

Version 3.52a1

  1. OS_EnterIntStack()
    OS_EnterIntstack did not work correctly in version 3.52a of embOS for NEC K0.
    A call of OS_EnterIntstack could cause a system crash.
    The problem existed in version 3.52a only and is fixed with version 3.52a1.
  2. OS_Start() for K0R in far data model corrected
    OS_Start did not work correctly in far data model for K0R CPUs. The system crashed. The problem existed in version 3.52a only and is fixed with version 3.52a1.

Version 3.52a

  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().
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.

Version 3.08a

  1. First version with this document
    Previous version of embOS for NEC K0/K0S was V2.41.

Known problems

The current version of the embOS IAR CSpy Plugin does not show correct values for task stacks and task names when used with K0R CPUs and near memory models.

Release history

Version Release date Short explanation
V3.84a 8. Dec 2011 Update to embOS version 3.84a
V3.60d4 12. Nov 2009 Update for IAR compiler version 4.62A
V3.60d3 30. Oct 2008 Reference to XCODE segment removed
V3.60d2 08. Jul 2008 Wrong function call in assembler part corrected
V3.60d1 27. Jun 2008 Build with latest IAR compiler/linker
V3.60d 17. May 2008 DLIB support added
V3.60a 07. Mar 2008 New generic embOS Sources V3.60a
V3.52a1 12. Sep 2007 Corrections for K0R CPU
Update to compiler V4.50A
V3.52a 07. Sep 2007 New sources version 3.52a
Update to compiler V4.50A
V3.28g 13. Jul 2005 New embos sources 3.28g used, update to IAR workbench 4.3
V3.20d 22. Jan 2004 New generic embOS sources 3.20 used.
V3.10q 16. Jun 2003 corrected version based on embOS sources 3.10
V3.08a 24. May 2002 First version with release history

Miscellaneous

This document was first released with version 3.08a 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