ARM7/9, ARM ADS toolkit

embOS for ARM7 / ARM9 / XScale was developed for and with ARMs ADS toolkit 1.2 and supports all memory models offered by this compiler. It comes with easy to use start projects.

Resources and performance data

Memory usage
Kernel size (ROM) approx. 3000 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. 7.2 µ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 256
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

embOSView with Renesas M16C/62 CPU serves as sample

Target CPU specific information

SHARP's LH79531 System-On-Chip (SOC) device now supported by embOS

Available Emulators

  • ARM
  • Lauterbach

Release notes

Last update:
2005-09-26 [AW] V3.28i

  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:  ARM C Compiler, ADS1.2 [Build 848]
           Thumb C Compiler, ADS1.2 [Build 848]
Assembler: ARM/Thumb Macro Assembler, ADS1.2 [Build 848]
Librarian: ARM Archiver, ADS1.2 [Build 848]
Workbench: CodeWarrior IDE version 4.2.5.764

New features

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
    Task may be terminated anytime, regardless of task state.
    All resources claimed by the terminated task are automatically released.

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 implemented
    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.10l

    1st version for ARM using ADS

Improvements

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

    1st version for ARM using ADS1.2

Program corrections

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 integer value.
    Calculation was modified to use 32bit values to fix the problem.

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

  1. OS_GetMail
    OS_GetMail functions corrected (interrupts disabled before call of _GetMail).
  2. OS_Terminate problem with RR
    OS_Terminate problem with RR tasks corrected. TimerTick could set RR/PP pending between UNMARKTASK and OS_Switch. OS_Switch will then call OS_DoRR, which could append OS_pCurrentTask (the one you want to terminate if e.g. OS_Terminate(NULL)).

Version 3.10m

  1. Sample interrupt handler
    For embOS it is not legal to call OS_EnterInterrupt again after final OS_LeaveInterrupt has been already called. In the sample OS_irq_handler shipped with embOS, there was a possible call of OS_EnterInterrupt after OS_LeaveInterrupt. The sample OS_irq_handler implementation has been corrected.

Version 3.06f

    1st version for ARM using ARM Tools

Known problems

Version 3.20f

    NONE

Release history

Version Release date Short explanation
V3.28i 26. Sept 2005 New embOS sources 3.28i with additional error check and new function OS_DeleteRSema()
V3.28g 07. Jul 2005 Official release with new embOS sources 3.28
V3.28 - 3.28f   Internal versions, not distributed
V3.26 16. Feb 2005 New embOS libraries V3.26
V3.20f 01. Jun 2004 New embOS libraries V3.20
V3.10l 12. Feb 2003 1st version for ARM using ADS

Miscellaneous

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