The following tools have been used:
Compiler: IAR ICCH8 V2.20A(126.96.36.199)
Assembler: IAR AH8 V2.20A(188.8.131.52)
Librarian: IAR XLIB V4.61H/386
Workbench: IAR EWH8 V184.108.40.2060
- Task switch time
Large memory model: 25.5 us = 357 cycles
- Interrupt latency for Fast interrupt
Large memory model: max. 1 us = 14 cycles
Absolute timings are based on an H8S 2239 running at
14.75 MHz with release build library
- Projects updated for new IAR workbench
The embOS start projects were updated to be useable with the new IAR workbench and compiler versuion 2.20A.
Additional samples are added.
- 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.
- 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.
- embOS stack check modified
The internal stack check of embOS, used in stack check or debug builds, was modified to avoid some problems with IARs stack check plugin for CSPy.
Now embOS uses the same character for stack check as the stck check plugin from IAR.
This ensures, IARs stack check plugin will show correct level of CSTACK and IRQ_STACK usage.
- embOS IAR kernel awareness plugin updated
Modified stack check version of embOS required a modified embOS plugin for IAR CSpy.
The new Plugin, version 1.00e, can handle both versions of embOS stack check methods, the previous version, and the new one, which uses a different stack check character.
The previous embOS Plugin now does not show correct values for task stack usage.
To replace the older plugin, please follow the instructions in the embOS plugin documentation.
- Update to EWH8, compiler version 2.10A
embOS for H8/H8S now comes with projects and libraries for new IAR embedded workbench / compiler version 2.10A
- 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.
- 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.
New counting semaphore handling function which specifies a maximum count value.
This allows counting semaphores used as binary semaphores.
- embOS awareness Plugin for IAR CSpy
A new plugin for IAR CSPy which shows information about tasks, system variables, mailboxes, timers and semaphores is delivered with embOS.
New resource semaphore handling function allows to delete resource semaphores during runtime.
- 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.
New info function to examine suspension state and count of a task.
- OS_Terminate() modified
Task may be terminated anytime, regardless of task state.
All resources claimed by the terminated task are automatically released.
- H8S CPU supported
Since version 3.22, embOS for H8/H8S also supports H8S CPUs
- OS_PutMailFront() / OS_PutMailFront1
New mailbox functions to enable LIFO behavior of mailboxes.
- OS_PutMailFrontCond() / OS_PutMailFrontCond1()
New conditional mailbox functions to enable LIFO behavior of mailboxes.
- Fast interrupts supported
Interrupts with high priority are never disabled by embOS.
- OS_Suspend() / OS_Resume() implemented
New functions to suspend and resume tasks unconditionally.
- Fixed size memory blocks inplemented
New functions to allocate fixed size memory blocks from embOS.
- Dynamic memory allocation supported by embOS
Thread safe dynamic memory allocation functions implemented.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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
- 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.28.
- OS_GetMailTimed() / mailbox handling corrected
During call of OS_GetMailTimed, interrupts were re-enabled to 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.28.
- OS_GetMailTimed() / Mailbox handling problem corrected
- 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.
- Task context saving / restoration corrected
Version 3.20 of embOS for H8 could lock task switches,
when a task was terminated by OS_Terminate()
and the same task control structure was reused.
This problem is corrected with version 3.22
Known problems / Limitations
- embOS on H8S CPUs runs with interrupt MODE 2 only.
Interrupt handler using embOS functions are limited to priorities 1 to 5.
- embOS on H8/H300 CPUs runs with interrupt MODE 1 only.
Interrupt handler using embOS functions are limited to lowest priority.
||21. Apr 2009
||Update to compiler version 2.20A
||05. Sep 2006
||New embOS sources 3.32a, corrected version
||09. Jun 2006
||New embOS sources 3.30c, corrected version, updated to new IAR compiler V2.10A
||25. April 2005
||New embOS sources 3.28, corrected version
||27. Aug 2004
||New embOS sources 3.22, H8S supported
||05. Jan 2004
||First version of embOS for Renesas H8
This document was first released with version 3.20d of the software.
Software released earlier is documented internally.
This information is available at request.
Copyright 2002-2009 SEGGER Microcontroller GmbH & Co. KG. All rights reserved.
For more information, please visit our website www.segger.com or contact us at firstname.lastname@example.org