V850/E/ES, IAR
embOS for NEC V850 was developed for and with IAR compiler and supports all memory models offered by this compiler. It comes with easy to use start projects for IAR's embedded workbench, prepared for different NEC V850 and V850E(S) CPU variants. Software development with debugger and simulator is supported.
Resources and performance data
| Memory usage | |
|---|---|
| Kernel size (ROM) | 1728 bytes |
| Kernel RAM usage | 41 bytes |
| RAM usage per task control block | 32 bytes |
| RAM usage per resource semaphore | 8 bytes |
| RAM usage per counting semaphore | 2 bytes |
| RAM usage per mailbox | 20 bytes |
| RAM usage per software timer | 20 bytes |
| RAM usage event | 0 bytes |
| Min. stack-size per task (RAM) | 160 bytes |
| Timing | |
| Context switch time | 224 clock cycles (7 µs), independent of number of tasks |
| Interrupt latency time | max. 64 clock cycles (2 µs) |
| Kernel CPU usage/TICK | less than .15% of total calculation time at 1000 Interrupts/second (1ms TICK) |
| Basic time unit (TICK) | typ. 1 ms, min. 10 µs (100 kHz interrupt frequency) |
| Features | |
| Max. no. of tasks | Unlimited (by available RAM only) |
| Max. no. of mailboxes | unlimited (by available RAM only) |
| Max. no. of semaphores (resource/binary/counting) | unlimited (by available RAM only) |
| Max. no. of software timers | unlimited (by available RAM only) |
| Max. no. of priorities | 256 |
| Stack size idle task (RAM) | 0(no memory needed) |
| Nested interrupts | permitted |
| Task switches from within ISR | possible |
Absolute timings given above were measured with embOS release build on an V850EMS1 CPU running at 32MHz with Tiny memory model .
embOSView offers system analysis during runtime

Available Emulators
- NEC
Additional information
IAR Web site for additional compiler info / support
Release notes
- Tool chain used for build
- New features
- Improvements
- Program corrections
- Known problems
- Release history
- Miscellaneous
Tool chain used for build
The following tools have been used:
Compiler: IAR ICCV850 V3.71A
Assembler: IAR AV850 V3.71A
Librarian: IAR XLIB V4.61R
Workbench: IAR IarIdePm V5.5.6
New features
Version 3.60a3
- Support for the V850E2M core added
embOS for V850 and IAR compiler now comes with optimized libraries for the new V850 E2M core. - Update to bew IAR compiler version 3.71
The new IAR workbench and compiler V3.71A required an update of embOS because of incompatible runtime models.
All embOS libraries are updated to be useable with the new embedded workbench.
All start projects were updated to be useable without warning.
Version 3.60a2
- Support for V850ES/JJ3 added
embOS comes with a start project for the V850ES/JJ3 series.
The start project is prepared to run on the NEC QB-V850ESJJ3 eval board using MiniCube2 emulator.
Version 3.60a
- Update to embOS sources 3.60a
embOS comes with several new features which are explained in the generic release notes and manual.
Version 3.32m
- 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. - Update to new IAR Compiler V3.40
Version 3.32j
- 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
- 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().
Version 3.32d
- OS_Q_GetPtrTimed() implemented
New queue retrieval function which waits for a message with specified timeout.
Version 3.32c
- OS_EVENT_WaitTimed() implemented
New event object function to wait for an event with a timeout limit.
Version 3.32b
- 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
- 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
- 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
- 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
- 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.28k
- 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.
Version 3.28i
- OS_DeleteRSema()
New resource semaphore handling function allows to delete resource semaphores during runtime.
Version 3.28h
- 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
- OS_GetSuspendCnt()
New info function to examine suspension state and count of a task.
Version 3.26
- OS_Terminate() modified
Tasks may be terminated anytime, regardless of task state.
All resources claimed by the terminated task are automatically released.
Version 3.22
- 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.
Version 3.20
- OS_Suspend() / OS_Resume() implemented
New functions to suspend and resume tasks unconditionally. - Fixed size memory blocks implemeted
New functions to allocate fixed size memory blocks from embOS. - Dynamic memory allocation supported by embOS
Thread safe dynamic memory allocation functions implemented.
Version 3.10n
- Interrupt stack switching functions implemented
V850 CPUs do not support a hardware interrupt stack. Therefore every interrupt increases stack load of every task.
To reduce stack load of tasks, a separate interrupt stack was introduced for V850 CPUs.
Refer to OS_EnterIntStack() and OS_LeaveIntStack() in documentation.
Version 3.10k
- OS_GetMailTimed()
New mailbox retrieving function with timeout.
Version 3.10d
- OS_GetpCurrentTimer()
New info routine. May be used in timer callback routines to examine which timer expired. - OS_GetpCurrentTask()
New info routine. May be used to examine current running task.
Version 3.10
- 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. - OS_WaitSingleEvent()
Unmasked events remain unchanged when function returns. - OS_WaitSingleEventTimed()
Unmasked events remain unchanged when function returns. Timeout for waiting can be specified.
Version 3.08a
- 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
- Message Queues
Message queues enable intertask communication with messages of various size.
Version 3.06h
- ROM monitor support
Special handling for ROM monitor environment has been added.
Version 3.06f
- 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. - 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 (DT or EDT libraries) - New event function
OS_WaitEvent_Timed() implemented to handle timeout conditions during waiting for events.
Version 3.04h
- Dynamic profiling
Profiling code is now executed only if turned on at run time. This means that the profiling builds now have almost the same performance as the non-profiling builds if the kernel is not communicating with the viewer.
Version 3.04
- 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 for V850E is UART 1, 38400 baud). This can be easily changed in RTOSInit.c
embOSView is now shipped with the software. - Profiling
New profiling builds allow measurement of task execution times. - Improved support for nested interrupt
OS_EnterNestableInterrupt(), OS_LeaveNestableInterrupt() defined. - 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. - 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. - Modified functions
OS_ClearEvent() now returns the actual state of events before clearing.
Improvements
Version 3.32i
- 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
- 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
- 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
- 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
- Stack check performance increased
Stack check now runs much faster on 32- and 16-bit target CPUs.
Version 3.10f
- Memory requirements reduced
Granularity enhanced for non embOSView builds to save ROM and RAM
Version 3.06f
- Context switching time improved for V850E
Context switching reduced to 7.0 us
(V850E @33MHz) - Context switching time improved for V850/SA1
Context switching reduced to 12.0 us
(V850/SA1 @20MHz) - Interrupt latency improved for V850/SA1
Interrupt latency time has been reduced below 6.8 us
(V850/SA1 @20MHz)
Version 3.04r
- Context switching time improved
Context switching time has been reduced to 8 us (262 cycles)
(tiny model, V850E @33MHz) - Interrupt latency time reduced
Interrupt latency times have been reduced to better than 2 us
(tiny model, V850E @33MHz)
Program corrections
Version 3.60a1
- Task start corrected.
When a task was started for the first time, the first 32bit word in memory behind the task stack was corrupted.
As this happend only when starting the task, this error got unnoticed during release tests.
The problem existed since version 3.60a of embOS for V850 and is corrected with version 3.60a1.
Version 3.32l
- 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. - 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
- 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 occured on a new embOS port for a specific CPU only and is fixed with version 3.32k.
Version 3.32h
- 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
- 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
- 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
- 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
- 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 occured, 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
- 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
- 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.28k
- 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 reparted as belonging to the pool.
This problem existed in all previous embOS versions and is fixed with version 3.28g.
Version 3.28g
- 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. - 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 occured 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
- OS_MEMF_Release() corrected
OS_MEMF_Release() might have failed according to absolute address of memory block.
The problem occured because address calculation was done with 16bit interger value.
Calculation was modified to use 32bit values to fix the problem.
Version 3.22a
- embOS interupt stack handling corrected
Usage of embOS interrupt stack caused data lossed in RAM, because control variable was written as 32bit value, but variable was declared as 8bit value.
This problem existed since version 3.10n, corrected with version 3.22a. - Task switching for large memory models corrected
Task switching did not work in large memory models,
corrected with version 3.22a.
Version 3.20c
- 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
- OS_GetMail() function corrected
Messages could be lost if PutMail functions were used in interrupt handlers.
Version 3.06h
- Confusing error message corrected
When calling OS_Unuse more often than OS_Use, OS_ERR_TASKLIST_CORRUPT was sent instead of OS_ERR_UNUSE_BEFORE_USE.
Version 3.06f
- 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.04
- 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.60a3 | 06. Jan 2010 | Update to new compiler |
| V3.60a2 | 21. Jan 2009 | V850ES/JJ3 support added |
| V3.60a1 | 05. Dec 2008 | Corrected version |
| V3.60a | 07. Mar 2008 | Update to embOS sources 3.60a |
| V3.32m | 05. Apr 2007 | IAR EW 4.7 / compiler V3.40A support Update to embOS sources 3.32m |
| V3.28q | 20. Feb 2006 | Update to embOS sources 3.28q Corrected version |
| V3.28h | 19. Sep 2005 | IAR EW 4.4 / compiler V3.20A support Update to embOS sources 3.28h |
| V3.24 | 10. Dec 2004 | IAR EW 4.3A / compiler V3.10A support |
| V3.22a | 24. Sep 2004 | Corrected version |
| V3.22 | 26. Aug 2004 | Upgrade to embOS sources 3.22 |
| V3.10p | 29. Apr 2003 | Upgrade to version 3.10; Interrupt stacks implemented |
| V3.06h | 08. Jan 2002 | ROM monitor support added |
| V3.06f1 | 09. Oct 2001 | IAR EW 3.0 support |
| V3.06f1 | 09.Oct.2001 | IAR EW 3.0 support |
| V3.06f | 01.Oct.2001 | Performance improved |
| V3.04r | 19.Mar.2001 | First version with release history |
Miscellaneous
This document was first released with version 3.04r of the software.
Software released earlier is documented internally.
This information is available at request.
V850/E/ES, IAR
