Release notes for embOS V3.86i for Fujitsu F16LX/F16FX

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

Tool chain used for build

The following tools have been used:

Fujitsu Softune Workbench V30L31
Compiler:  Fujitsu FCC907s    V30L13
Assembler: Fujitsu FASM907s   V30L10
Librarian: Fujitsu FLIB907s   V30L05

Performance

  1. Task switch time
    Small memory model: 9.9 us = 554 cycles
    Large memory model: 12.1 us = 677 cycles
  2. Interrupt latency of fast interrupts
    Zero
  3. Interrupt latency of low priority interrupts
    Small memory model: 5.9 us = 332 cycles
    Large memory model: 8.5 us = 480 cycles

Absolute timings are based on an MB96F348 running at 56 MHz with Release library

New features

Version 3.86i

  1. New embOS sources V3.86i
    All new features and modifcations of the embOS sources V3.86d are described in the generic release notes and manual.

Version 3.86d

  1. New embOS sources V3.86d
    All new features and modifcations of the embOS sources V3.86d are described in the generic release notes and manual.

Version 3.84c

  1. Heap management and support added
    The embOS heap management functions OS_malloc(), OS_realloc() and OS_free() may now be used with Fujitsu F16 CPUs.
    embOS comes with an sbrk() function implemented in a source module which contains the definition of the heap memory.
  2. Update to new embOS sources V3.84c
    embOS verson 3.84c comes with several new functions which are described in the generic embOS muanual.

Version 3.60a1

  1. Interrupt handling modified
    embOS for Fujitsu F16LX and FX cores now comes with two interrupt handler functions OS_CallISR() and OS_CallNestableISR()
    which perform an automatic stack switching during entry and exit.
    The high level user interrupt handler runs in USER mode. All interrupt handler functions of the application have to be modified to use the new handler functions.
  2. Update to new embOS sources V3.60a
    embOS verson 3.60a comes with several new functions which are described in the generic embOS muanual.

Version 3.60a

  1. Start project and BSP for MB96F348 added
    embOS now contains a ready to go start project for the MB96F348 F16FX CPU.
    The sample application is prepared to run on an SK-16FX-100PMC eval board.
  2. Update to new embOS sources V3.60a
    embOS verson 3.60a comes with several new functions which are described in the generic embOS muanual.

Version 3.32f

  1. Functions for thread safe usage of system libraries defined
    embOS now contains hook functions which may be called by the system library to ensure thread safe handling of dynamic memory handling and other system functions which are normally not thread safe.
    By now, these new functions are not supported by any compiler or 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_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 version 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. 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

  1. Zero latency, fast interrupts
    Instead of disabling interrupts when embOS performs atomic opertaions, the interrupt level mask register of CPU is set to 2.
    Interrupts with priorities of 0 and 1 remain enabled which results in zero latency for those interrupts.

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 inplemeted
    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. 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().
  2. embOS interrupts defined in c source file RtosInit.c
    The new version 3.06f defines all embOS interrupts in the c source file RtosInit.c. The embOS timer interrupt does not need to be handled in an additional ASM file.
    RTOSInt.asm and Vectors.c are not used anymore.
    This has the advantage, that only one file has to be modified, if for some reason an other timer has to be used for embOS.

Version 3.06

  1. All memory models supported
    embOS can be used in all memory models that Fujitsus Softune compiler offers (SMALL, MEDIUM, COMPACT, LARGE)
  2. Task switch from within interrupt service routine
    embOS version 3.06 now performs task switch from within an interrupt service routine. This was impossible in version 3.04
  3. Memory limitations removed
    The whole memory can be used as data memory or stack. Version 3.04 of embOS for F16LX was limited to use only bank zero as stack or data memory.
  4. Serial interface for embOSView shared with application
    The serial interface used for communication with embOSView is now available for the application.
    embOSView can serve as a terminal for the target application in parallel with trace and profiling over the same serial interface.
    The user application can call the new function OS_SendString() to send data to the terminal, OS_SetRxCallback() to set a callback function for received characters.
  5. Trace build added
    embOS can be traced during runtime with embOS Viewer version 3.06.
    This allows monitoring of the API functions and their parameters called by the application.
    Task- and API-specific filters can be defined via embOSView or directly by the application program via new API calls.
    This functionality requires the trace build (SDT, CDT, MDT or LDT libraries)
  6. New event function
    OS_WaitEventTimed() implemented to handle timeout conditions during waiting for events.
  7. New info function
    OS_IsTask() implemented to check, whether task actually exists.

Version 3.04i

  1. Support for embOSView
    embOS Viewer can communicate with embOS via UART if the MCU is properly initialized and the required interrupt routines are present. (Default is UART 1, 9600 baud). This can be easily changed in RTOSInit.c
    embOSView is now shipped with the software.
  2. Profiling
    New profiling builds allow measurement of task execution times.
  3. Improved support for nested interrupt
    OS_EnterNestableInterrupt(), OS_LeaveNestableInterrupt() defined.
  4. New timer functions introduced
    OS_SetTimerPeriod(),OS_GetTimerPeriod() introduced, to modify / check reload value of timer.
    OS_GetTimerStatus() introduced to check whether timer is active.
    OS_GetTimerValue() introduced to check remaining time of timer.
  5. Additional functions
    OS_SetTimeSlice() added to modify the timeslice of a task during runtime.
    OS_CreateCSema() modified; now an initial value of sema can be set.
  6. Modified functions
    OS_ClearEvent() now returns the actual state of events before clearing.

Improvements

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.10f

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

Version 3.06f

  1. Context switching time reduced to 50% of previous value

  2. Interrupt latency time reduced to 50% of previous value

Version 3.04i

  1. Context switching time improved

  2. Interrupt latency time reduced

Program corrections

Version 3.86d

  1. Interrupt handler corrected.
    The previous versions of the embOS interrupt handler functions OS_CallISR() and OS_CallNestableISR() destroyed the stack of main() when interrupts were enabled during main() and an interrupt occurred.
    The problem existed since version 3.60a1 of embOS for Fujitsu F16 and is fixed with version 3.86d.

Version 3.60a

  1. OS_EnterNestableInterrupt() corrected
    OS_EnterNestableInterrupt() contained assembly code which did not set the segement registers to address an embOS internal variable which is located in near memory area.
    If any code was interrupted which had the data segment registers set to any value other than 0, the wrong data area was accessed and the system could crash. The problem existed in all previous "Fast interrupt" versions of embOS end is fixed with version 3.60a.

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 corretly, 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 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_WaitCSemaTimed() corrected
    Semaphore handling was changed with embOS sources version 3.26.
    Unfortunately,during call of OS_WaitCSemaTimed() an internal control counter was decremented twice, which resulted in wrong control state of semaphore. Overflow of this counter caused, that the calling task remained suspended until the timeout expired, even though, the semaphore was signaled.
    This problem existed in version 3.26 only and is fixed with version 3.28g.
  3. 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 interger value.
    Calculation was modified to use 32bit values to fix the problem.

Version 3.24a

  1. embOS software timer corrected
    Due to a compiler bug in current Softune compiler, embOS timer could stop operating event though they were retriggered or started.
    This problem existed in previous versions of embOS for F16LX and is fixed with version 3.24a since December 2004.
  2. embOS counting semaphore function OS_WaitCSemaTimed() corrected
    Due to a compiler bug in current Softune compiler, OS_WaitCSemaTimed() could return with error result immediately without starting the timeout.
    This occurred when OS_WaitCSemaTimed was called when embOS internal time was a multiple of 32768 seconds.
    This problem existed in previous version of embOS for F16LX and is fixed with version 3.24a since December 2004.

Version 3.22a

  1. Task switch from interrupt corrected
    System might have crashed when an ISR with high priority interrupted a low priority ISR and both ISRs performed a task switch from interrupt.
    This problem existed in all previous versions of embOS for F16LX and is fixed with version 3.22 since September 2004.

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.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 switch bug corrected
    Round robin task switch caused system malfunction when a higher prioritized task was activated from within an interrupt just the moment one of the round robin tasks was deactivated at the end of its time slice.
    This problem exists in all previous embOS versions and is fixed with version 3.06f.

Version 3.06

  1. Interrupt problems fixed
    As the F16LX CPU does not disable interrupts automatically, when entering an interrupt service routine, interrupts have to be disabled by program instruction. When entering the timer interrupt for embOS, interrupts need to be disabled. This is now done in the timer interrupt handler, which is found in RTOSInt.asm.

Version 3.04m

  1. Bug (restriction) fixed
    Context switching did not work, if DATA and STACK were not placed in the same bank, which had to be bank 0.
    This was a restriction of the first version (3.04i) for F16LX. Version V3.04m also has to use bank 0 for STACK, but can use an other bank for user data.

Version 3.04i

  1. Modified functions
    OS_StartTimer() changed to match doc exactly.
    OS_GetMailCond() had assertions which did not permit usage in interrupt or software timers (debug build only). Fixed.

Known problems

None

Release history

Version Release date Short explanation
V3.86i 02. Oct 2012 New embOS sources V3.86i
V3.86d 14. May 2012 New embOS sources V3.86d
Interrupt handler corrected.
V3.84d 30. Apr 2012 Queue management corrected.
V3.84c 17. Feb 2012 Heap management added
New embOS sources V3.84c
V3.60a1 12. Mar 2010 New interrupt handler
V3.60a 04. Feb 2008 New embOS sources V3.60a
Corrected version
V3.32f 14. Dec 2006 New embOS sources V3.32f
V3.32 21. Jul 2006 Event objects implemented
V3.30a 28. Feb 2006 Update to new embOS sources 3.30a
V3.24a 20. Dec 2004 Zero latency, fast interrupts introduced
V3.22a1 28. Sep 2004 Zero latency, fast interrupts introduced
V3.22a 24. Sep 2004 New embOS sources 3.22a, Task switch from interrupt corrected
V3.20b 24. Nov 2003 New embOS sources 3.20, embOS timer functions corrected
V3.10q 09. Sep 2003 Version 3.10q released
V3.06f 25. Oct 2001 Version 3.06f released
V3.06 27. Jul 2001 Version 3.06 released
V3.04 12. Feb 2001 First version with release history

Miscellaneous

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


Copyright 2004-2012 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