ARM7/9/XScale, IAR
embOS for ARM7 / ARM9 / XScale was developed for and with IAR's compiler version 5.20 and 6.10 and supports all memory models offered by the IAR compiler. It comes with easy to use start projects for IAR's embedded workbench V5 and V6. Initilization code for various ARM CPUs is included. Software development with C-SPY simulator or C-SPY debugger with JTAG tools like J-Link ARM is possible.
Resources and performance data
| Memory usage | |
|---|---|
| Kernel size (ROM) | approx. 1500 bytes |
| Kernel RAM usage | 51 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) | 56 bytes |
| Timing | |
| Context switch time | max. 8 µs, independent of number of tasks |
| Interrupt latency time | zero |
| Kernel CPU usage/TICK | less than .2% of total calculation time at 1000 Interrupts/second (1ms TICK) |
| Basic time unit (TICK) | typ. 1 ms, min. 20 µs (50 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 | 255 |
| Stack size idle task (RAM) | 0(no memory needed) |
| Nested interrupts | permitted |
| Task switches from within ISR | possible |
Absolute values given above were measured with embOS release build on an LH79531 CPU running at 48MHz.
embOSView offers system analysis during runtime

embOS plugin for IAR Workbench
The new embOS Plugin for IAR Workbench allows embOS system analysis during debug sessions. The plugin shows system state, tasks, mailboxes, semaphores and software timer.
The new plugin allows task sensitiove analyzis of task state, registers and call stack even if tasks are suspended.

Available Emulators
- J-Link ARM
- ARM
- Lauterbach
Additional information
IAR Web site for additional compiler info / support
Board support packages
embOS comes with lots of ready to go start projects and support packages for various ARM7/9 CPUs and starterboards.
| CPU | Eval board |
|---|---|
| Analog Devices ARM7TDMI | Analog Devices ADuC702x |
| Atmel AT91CAP9 | Atmel AT91CAP9-DK |
| Atmel AT91M40xxx | Atmel AT91M40xxx |
| Atmel AT91M55800 | Atmel AT91EB55 |
| Atmel AT91RM9200 | Atmel AT91RM9200-EK |
| Atmel AT91SAM7A3 | Atmel AT91SAM7A3-EK |
| Atmel AT91SAM7S64 | Atmel AT91SAM7S64-EK |
| Atmel AT91SAM7S256 | Atmel AT91SAM7S256-EK |
| Atmel AT91SAM7SE512 | Atmel AT91SAM7SE512-EK |
| Atmel AT91SAM7X256 | Atmel AT91SAM7X256-EK |
| Atmel AT91SAM9G20 | Atmel AT91SAM9G20-EK |
| Atmel AT91SAM9G45 | Atmel AT91SAM9G45-EK |
| Atmel AT91SAM9RL64 | Atmel AT91SAM9RL-EK |
| Atmel AT91SAM9XE | Atmel AT91SAM9XE-EK |
| Atmel AT91SAM9260 | Atmel AT91SAM9260-EK |
| Atmel AT91SAM9261 | Atmel AT91SAM9261-EK |
| Atmel AT91SAM9263 | Atmel AT91SAM9263-EK |
| NXP LH7A400 | LogicPD LH7A400-10 |
| NXP LH7A404 | LogicPD LH7A404-N0E |
| NXP LH79520 | LogicPD LH79520 |
| NXP LH79524 | Sharp LH79531 |
| NXP LPC2106 | IAR LPC2106 |
| NXP LPC2148 | IAR LPC2148 |
| NXP LPC2378 | IAR LPC2378 |
| NXP LPC2468 | Embedded Artists LPC2468-16 OEM |
| NXP LPC2478A | Embedded Artists LPC2478 OEM QVGA |
| NXP LPC3131 | Embedded Artists LPC31xx OEM |
| NXP LPC3180 | NXP LPC3000 |
| NXP LPC3250 | Phytec LPC3250 |
| OKI ML67Q4051 | OKI AME-51-AS |
| OKI ML69Q6203 | OKI ML69Q6203 |
| ST STR710 | ST STR710-EVAL |
| ST STR750 | ST STR750-EVAL |
| ST STR912 | ST STR912-EVAL |
| TI OMAP3517 | LogicPD AM3517 EVM |
| Toshiba TMPA910 | Toshiba BMSKTOPASA910(DCE) |
Release notes V3.84c for IAR compiler V6.x
- Tool chain used for build
- New features
- Improvements
- Program corrections
- Known problems/limitations
- Release history
- Miscellaneous
Tool chain used for build
The following tools have been used:
Compiler: IAR ICCARM 6.30.3.53228 Assembler: IAR IASMARM 6.30.3.53228 Librarian: IAR IARCHIVE 9.11.11.57 Workbench: IAR IARIDE 6.30.3.3241
New features
Version 3.84c
- New embOS generic sources V3.84c.
Version 3.84a
- Support for Cortex A8 added.
embOS has now support for Cortex A8.
It comes with a start project for TI OMAP3517. - New embOS generic sources V3.84a.
Version 3.84
- New embOS sources V3.84
All new features and functions of version 3.84 are described in the generic release notes and manual. - New functions for TLS and VFP support
OS_ExtendTaskContext_VFP() added to extend a task context to save and restore VFP registers.
OS_ExtendTaskContext_TLS_VFP() added to extend a task context to use TLS together with VFP registers.
Version 3.82t
- New embOS sources V3.82t
New features are described in the generic manuals and release notes.
Version 3.82l
- Thread local storage supported
embOS for ARM cores and IAR compiler now supports thread local storage which can be individually activated for every task.
Version 3.82k1
- Update to IAR workbench / compiler V6
Version 3.82k
- New generic embOS functions OS_Delayus() and OS_Q_Delete().
Version 3.82e1
- Start projects with internal Flash now use SEGGER J-Link FlashDL feature.
embOS start projects for microcontrollers with integrated Flash now use free SEGGER J-Link FlashDL feature to program the Flash the fastest and easiest possible way using J-Link.
Version 3.82e
- Start project for ATMEL AT91SAM9G45 added.
embOS now comes with a start project for the ATMEL AT91SAM91G45 microcontroller.
The start project is prepared to be run in the internal RAM of the controller, or the DDRAM of the ATMEL AT91SAM9G45-EK starter board. - Start project for ATMEL AT91SAM9G20 added.
embOS now comes with a start project for the ATMEL AT91SAM91G20 microcontroller.
The start project is prepared to be run in the external SDRAM of the ATMEL AT91SAM9G20-EK starter board. - New embOS sources V3.82e.
embOS comes with some additional functions and debug features which are described in the generic release notes.
Version 3.82b
- Update to compiler/workbench version 5.40D
The new workbench comes with a new librarian which reuires modified batch files to build the embOS libraries from sources.
Some sample projects required new settings for the modified flash loaders which come with the new workbench version.
The new start projects are suffixed _V540.eww. Start projects for older versions of the workbench are still delivered with embOS.
Version 3.82a
- Update to new embOS version V3.82a
Update to new embOS version 3.82 with new Queue error checking and new Queue function OS_Q_IsInUse().
Version 3.82
- Update to new embOS version V3.82
Update to new embOS version 3.82 with optimized scheduler which allows faster task switches.
Version 3.80g
- Scheduling optimized
Update to new embOS version 3.80 with optimized internal data structures to speed up scheduling and task switches.
The new embOS version requires the C-Spy plugin V3.80 or later. The plugin comes with embOS. - ATMEL SAM7S/SAM7X/SAM7SE projects automatically detect 512KB Flash
SAM7 CPUs with more than 256KB Flash come with 2 flash controllers which have to be initialized both to guarantee stabel operation when running the code from Flash.
The start-projects and initilization code for SAM7 CPUs now automatically detect the Flash size and initialize the second flash controller if it is present. - Advanced error checks
The debug version of embOS now detects illegal function calls under various CPU states.
If for example an OS function is called from an high priority interrupt, which is not allowed, this fault is caught and OS_Error() is called.
Version 3.62a1
- embOSView can be used with J-Link
embOS for ARM now comes with a new version of embOSView which allows profiling, task, stack and system analyzis during runtime using J-Link.
All embOS start projects are modified to use the DCC channel and JTAG as default communication channel for embOSView.
By modification of the OS_USE_DCC definition, a UART as it was used in previous versions, can be selected for communication.
To use embOSView with JLink, the JLINKARM.dll which comes with embOSView has to be located in the same directory as the embOSView executable.
embOSView has to be set up to use DCC instead of a COM-port. - BSP for Atmel AT91SAM9XE CPU added.
embOS for ARM now comes with a start project for the ATMEL AT91SAM9XE CPU.
The start project is prepared to run on the AT91SAM9XE-EK eval board but may be used for other hardware platforms as well.
Version 3.62
- The embOS plugin for C-Spy now shows the call stack and context of suspended tasks.
The new embOS plugin V3.60e for IAR C-Spy now shows the state and call stack of all tasks. Every task in the task list, even suspended or interrupted tasks, can be analyzed during a debug session.
Version 3.60d1
- BSP for Atmel AT91M40xxx CPUs added.
embOS for ARM now comes with a start project for the ATMEL AT91M40xxx series.
The start project is prepared to run on the AT91EB40A eval board but may be used for other hardware platforms as well. - BSP for Atmel AT91M55800 CPU added.
embOS for ARM now comes with a start project for the ATMEL AT91M55800 CPU.
The start project is prepared to run on the AT91EB55 eval board but may be used for other hardware platforms as well. - BSP for Atmel AT91RM9200 CPU added.
embOS for ARM now comes with a start project for the ATMEL AT91RM9200 CPU.
The start project is prepared to run on the AT91EB55 eval board but may be used for other hardware platforms as well. - BSP for Atmel AT91SAM9263 CPU added.
embOS for ARM now comes with a start project for the ATMEL AT91SAM9263 CPU.
The start project is prepared to run on the AT91SAM9263-EK eval board but may be used for other hardware platforms as well. - BSP for Atmel AT91SAM9RL64 CPU added.
embOS for ARM now comes with a start project for the ATMEL AT91SAM9RL64 CPU.
The start project is prepared to run on the AT91SAM9RL-EK eval board but may be used for other hardware platforms as well. - BSP for NXP LH79524 CPU added.
embOS for ARM now comes with a start project for the NXP LH79524 CPU.
The start project is prepared to run on the LogicPD Eval board eval board but may be used for other hardware platforms as well. - BSP for NXP LH7A400 CPU added.
embOS for ARM now comes with a start project for the NXP LH7A400 CPU.
The start project is prepared to run on the LogicPD Eval board eval board but may be used for other hardware platforms as well. - BSP for NXP LH7A404 CPU added.
embOS for ARM now comes with a start project for the NXP LH7A404 CPU.
The start project is prepared to run on the LogicPD Eval board eval board but may be used for other hardware platforms as well. - BSP for NXP LPC2148 CPU added.
embOS for ARM now comes with a start project for the NXP 2148 CPU.
The start project is prepared to run on the IAR starterkit for LPC2148 but may be used for other hardware platforms as well. - BSP for NXP LPC2468 CPU added.
embOS for ARM now comes with a start project for the NXP 2468 CPU.
The start project is prepared to run on the Embedded Artists eval board for LPC2468 but may be used for other hardware platforms as well. - BSP for OKI ML674050/60 CPUs added.
embOS for ARM now comes with a start project for the OKI ML674050/60 ARM7 CPUs.
The start project is prepared to run on the OKI AME-51-AS eval board but may be used for other hardware platforms as well. - BSP for OKI ML69Q6203 CPU added.
embOS for ARM now comes with a start project for the OKI ML69Q6203 ARM9 CPUs.
The start project is prepared to run on the OKI ML69Q6203 eval board but may be used for other hardware platforms as well.
Version 3.60d
- BSP for TOSHIBA TMPA910 added.
embOS for ARM now comes with a start project for the new TPSHIBA TMPA910 ARM9 derivate.
The start project is prepared to run on the TOPAS910 eval board.
Version 3.60a1
- MMU and cache handling functions added
embOS for ARM now comes with functions to initialize the MMU and cache of ARM9 and ARM720 CPUs.
Functions to invalidate and clean the cache are provided also.
Version 3.60a
- New embOS sources V3.60a used
The new of embOS version 3.60a are described in the embOS generic manual and release notes.
Version 3.52a
- IAR compiler V5.10 supported
embOS version 3.52a for ARM can be used with IAR compiler version V5.10 and the new IAR embedded Workbench V5.0.
A version for the older IAR workbench V4 and compiler version 4.41A/4.42A is shipped together with the new version of embOS for ARM and IAR compiler.
Improvements
Version 3.82r
- Thread local storage handling optimized
Since version 3.82r of embOS, usage of thread local storage does not affect the context switch of tasks which do not use thread local storage.
A task may be terminated when it uses thread local storage. The previous implementation did not allow termination of tasks with thread local storage.
Version 3.80g1
- Code modified to avoid warnings
Some compile time switches were not predefined in some projects and therefore produced a warning when remarks were enabled.
This did not cause any problem, but might have been confusing.
Version 3.80g
- embOS-plugin for C-Spy improved
The C-Spy plugin now shows the system resource semaphores used for locking of non-re-entrant system functions.
These semaphores could not be shown in previous versions, if no resources semaphores were used in the application.
Version 3.62a
- Automatic stack address alignment
The stackpointer for task stacks is now automatically aligned to an 8 byte boundary, regardless the definition of the task stack area and stack size.
Version 3.62
- Resource semaphores and mailboxes shown in embOS plugin
Resource semaphores and mailboxes were not shown by the current embOS plugin for the IAR embedded workbench for ARM.
The relevant data structures are not found in the output files.
embOS version 3.62 for ARM and IAR compiler comes with a workaround which makes resource semaphores and mailboxes visible.
Two dummy variables are declared in OS_Error.c. These variables are optimized away, but the relevant data structures are linked in the output file.
Version 3.60e
- OS_ARM720_CACHE module optimized
The function OS_ARM720_CACHE_Enable() now also enables the write buffer, thus increasing memory performance for ARM720 targets when cache is used. - BSP for NXP LH79524 optimized
Linker settings and MMU setup modified to increase performance. The data section of the start project was located in an uncached area.
Version 3.52e
- BSP for ATMEL AT91SAM9260 optimized
The sample start project for AT91SAM9260 now initializes the MMU and caches to speed up the CPU.
Version 3.52a
- NONE
Initial version for IAR compiler V5.1x
Program corrections
Version 3.82t
- CSpy plugin corrected.
Previous versions of the CSpy plugin did not show the task sensitve call stack correctly when used with EWARM V6.
The new CSpy plugin V6.0.6.4 now shows a task sensitive call stack for suspended and preempted tasks. - Project settings and macros corrected.
Previous versions of embOS for EWARM V6 contained macro files with incompatible function calls which did not run on CSpy for EWARM V6.
All macro files are corrected and are now compatible to the modified macro language of CSpy for EWARM V6.
Version 3.82r
- Thread local storage handling corrected
Terminating a task which used thread local storage resulted in exiting the program.
OS_Terminate() now can also be used for tasks with thread local storage. The problem existed since version 3.82m when the IAR compiler 6.10.1 or higher was used and is fixed with version 3.82r.
Version 3.82m
- Queue management corrected.
Queue management failed when the Q-buffer was filled up to the end. This might have happened, when messages are produced faster then they were consumed.
The OS_Q_Purge() and OS_Q_Put() functions did not handle this case correctly and caused the queue to be corrupted.
OS_Error() might have been called with error number 143, or OS_Q_GetPtr() might have returned with a wrong message size or a message zize of 0.
The problem existed since version 3.82k of embOS and is fixed with version 3.82m.
Version 3.82k
- OS_Q management corrected.
The generic queue management failed, when a queue was used by multiple producers where one producer was an ISR handler.
The problem existed in all previous embOS versions and is fixed with version 3.82k. - BSP for Atmel AT91SAM9263 corrected.
The SDRAM initialization initialized a 16bi data BUS for SDRAM, wasting half of the assembled SDRAM of the ATMEL eval board. The problem existed in all previous embOS versions and is fixed with version 3.82k. - BSP for Atmel AT91SAM9G45 corrected.
The linker fie delivered with embOS defined a total amount of 64MB SDRAM only, wasting half of the assembled 128MB SDRAM of the ATMEL eval board. The problem existed in all previous embOS versions and is fixed with version 3.82k.
Version 3.82b
- UART initialization for LPC2148, LPC2378 and LPC2468 corrected.
The UART initialization for embOSView in RTOSInit might have enabled the auto-baud feature and interrupt for the UARTs of those devices.
The problemm occured, because interrupt enable and identificatio registers were accessed as 8bit register during initialization.
The corrected version now accesses the registers as 32bit register and fix the problem.
The problem existed in all previous versions of embOS for ARM and is fixed with version 3.82b.
Version 3.60a
- MMU initialization for ARM 926 corrected.
The MMU enable function called from __low_level_init() performed a cache flush which might have caused writing invalid data onto the stack which then caused a system crash.
The problem existed in all previous versions of embOS for ARM and is fixed with version 3.60a.
Version 3.52d
- Task switch corrected in ARM core 5 libraries
The task switch for ARM mode libraries and core type 5 did not work, the system crashed.
All libraries named os5tpa* were affected.
The libraries for thumb mode and all core type 4 worked as expected.
The problem existed in version 3.52a of embOS for ARM and IAR only and is fixed with version 3.52d.
Version 3.52a
- NONE
Initial version for IAR compiler V5.1x
Known problems/limitations
Version 3.52a
- NONE
Initial version for IAR compiler V5.1x
Release history
| Version | Release date | Short explanation |
| V3.84c | 10. Jan 2012 | New embOS generic sources V3.84c. |
| V3.84a | 16. Dec 2011 | Cortex A8 support added. New embOS generic sources V3.84a. |
| V3.84 | 04. Nov 2011 | New sources V3.84 |
| V3.82v | 15. Jul 2011 | VFP support enhanced. |
| V3.82t | 03. May 2011 | New embOS sources. CSpy plugin corrected. CSpy macros and project options corrected. |
| V3.82r | 27. Jan 2011 | Thread local storage handling improved. |
| V3.82m | 24. Nov 2010 | Corrected version |
| V3.82l | 25. Oct 2010 | Thread local storage |
| V3.82k1 | 21. Oct 2010 | Update to compiler V6 |
| V3.82k | 01. Oct 2010 | Corrected queue management |
| V3.82e1 | 22. Mar 2010 | Start project for AT91SAM9G45 |
| V3.82e | 28. Jan 2010 | Start project for AT91SAM9G45 |
| V3.82b | 27. Oct 2009 | Update to compiler version 5.40D |
| V3.82a | 05. Oct 2009 | New embOS sources 3.82a |
| V3.82 | 21. Sept 2009 | New embOS sources 3.82 |
| V3.80g1 | 29. Jun 2009 | Some warnings eliminated |
| V3.80g | 05. Jun 2009 | Optimizations |
| V3.62a1 | 09. Oct 2008 | embOSView via DCC and J-Link |
| V3.62a | 07. Oct 2008 | Automatic stack alignement |
| V3.62 | 01. Sep 2008 | embOS Plugin updated |
| V3.60d1 | 08. Aug 2008 | Several new start projects. Update to Compiler V5.20 |
| V3.60d | 09. Jun 2008 | New embOS sources 3.60d BSP for TMPA910 added. |
| V3.60a1 | 14. Mar 2008 | New embOS sources 3.60a MMU handling for 926 corrected. MMU and cache handling added. |
| V3.52e | 27. Nov 2007 | BSP for AT9260 optimized |
| V3.52d | 31. Oct 2007 | Corrected version. |
| V3.52a | 03. Sep 2007 | New embOS sources 3.52a Initial version for IAR compiler V5.1x |
Miscellaneous
This document was first released with version 3.52a of the software.
Software released earlier is documented internally. This information is available at request.
ARM7/9/XScale, IAR
