Free LPC2xxx RTOS for non-commercial use

Started by kristianstad2001 March 7, 2004
Hello all,
I've followed this group basically from the beginning and I've
notices that a recurring question/subject is real-time operating
eCos is of course an interesting alternative, but as some of you have
noted, the code size is rather large. This is true even if most of
the functionality is removed in the configuration process.
Then we have uCos-ii, which is a widely used RTOS in smaller 8/16-bit
designs. This RTOS has been ported to many processors, and there is
of course a documentation that is "more than what is common" :-)
There are ARM7 ports for uCos-ii, but not specifically for LPC2xxx. A
port has been promised in the near future, I believe.

Now, let me present a third alternative. I've just completed an
initial port of our RTOS to LPC2xxx. It's a configurable RTOS, just
like eCos and uCos-ii. We have however taken the configuration
possibilities a bit further. In uCos-ii, you can configure the RTOS
by including/excluding functions. In our RTOS, you can also configure
the internal implementation. Just as an example, the ready queue is
implemented differently if you can have multiple processes with
identical priorities or if you require each process to have a unique
priority. Our philosophy is that each application designer/programmer
makes this (and similar) trade-offs, as opposed to the RTOS designer.
eCos has some configuration options for different internal
implementation (the option above exist, or example), but slightly
less details than we have.

So what's the catch? Well, as many others, we work under commercial
constraints... but at the same time we would like to make some form
of contribution. We offer basically the same license as uCos-ii. This
means that our RTOS is totally free for non-commercial use. Just like
uCos-ii it is not allowed to distribute the source code, but it can
be generated when you have the program "InfraBed" installed (see
below). So, if any of you would like a RTOS for LPC2xxx to start
experimenting with; You are very welcome to test ours.
If you would like to use the RTOS in commercial situations, for
example embed it into a product or ship a RTOS-library with LPC2xxx
hardware (to for example increase the customer value for the offer)
we require that you acquire a commercial license from us.
If you are interested the licensing terms can be found on our home
page. There are also special deals if you for example ship library
code with hardware.
If you are a hobbyist/teacher, don't bother about this - just use the

Even though it may seem so, this is not a (spam) sales letter. We
would just like to make a reasonable contribution (given our
commercial constraints) that you all can benefit from.

So, now the details. The port has just been completed and undergone
initial testing. All processes must run in ARM-mode. A Thumb-port
will be available in the near future. I guess that this is not a
problem for most of you since the LPC2xxx processors have large FLASH

We ship all code within a graphical configuration tool called
InfraBed. If you would like to test the RTOS, just download InfraBed
(can be found on under the download
section). Install the program and register as a demo-user (which is
free and basically just requires you to supply a valid name and e-
mail address). A key will then be mailed to you within 24 hours.
Enter this key into the program and perform something we call an ESIC
update. ESIC stands for Embedded System Infrastructure Component. The
RTOS is one of these basic "building block components".
You can now configure the RTOS after your specific needs. Semaphores,
queues, and signals (OSE compatible) are supported as synchronization
primitives. Other synchronization primitives will be added based on
customer requirements (or your request). Event flags will for example
be added in the near future. There is also some additional
functionality, such as timer handling, memory management, and an idle
process (with CPU utilization calculation).
Code and documentation will be generated based on your configuration
(As a side note, there are some parts of the documentation that needs
more details. We are working on updating missing parts. For example,
specific documentation about the ARM7 port is not yet available. The
code is however quite self-explanatory if you need to study it.)

We also supply a complete build environment based on GCC for our
ports. This environment is not yet complete, but the GCC compiler
supplied from Keil ( works perfect. It's free to
download. We will also add ports that compile under IAR and ADS. If
you are in a hurry, you can do this port by yourself in a couple of

We normally include the hardware abstraction layer code (HAL) in the
code that is automatically generated. Until this has been completely
integrated I've put the HAL code in a zip-file.
This zip-file also includes all startup-files needed to compile under
Keils environment. Observe that you must create a project file
yourself and include all source code files (if you are using
uVision3). Ordinary make-files will be added in the near future.

When you start an InfraBed project, define it as a "generic" project.
Set the following project settings:
* Unsigned 8-bit: unsigned char
* Unsigned 16-bit: unsigned short
* Unsigned 32-bit: unsigned int
* Signed 8-bit: char
* Signed 16-bit: short
* Signed 32-bit: int
* Boolean: unsigned char
* Alignment: 4 bytes

The zip-file contains a subdirectory named "hal". Copy this directory
to the place where the RTOS code is generated.
The two files in the subdirectory named "stub" shall be copied to the
directory "pre_emptive_os/stub". The two files shall over-write the
existing files.
I'm very aware that there are a number of steps here that you must
perform to get the RTOS to compile. When the HAL code has been fully
integrated and the build environment is ready, all this will be
performed automatically. If you cannot wait a couple of weeks you
will however need to perform these steps. I will help and try to
solve any problems you may encounter in getting the RTOS up-and-

Sorry for this VERY long letter. In short - I hope that some of you
will find this RTOS useful!

Best Regards,
Anders Rosvall
Hobbyist and working for Embedded Artists AB
I can be reached at:
or the address where this message is posted from. PS. If you are interested about code size:
Minimum: about 3.4 kbyte in ARM mode
Maximum: about 20 kbyte in ARM mode
It's basically up to you how much functionality you need...

An Engineer's Guide to the LPC2100 Series

While I have not tried your RTOS yet, I would like to congratulate
you on the excellent RTOS overview. I've been embedding for over 20
years and this is the best descriptive text on RTOSs I have ever seen.

For anyone wondering:
* What an RTOS is
* What the issues are wrt RTOSs

I strongly suggest you read

Great job guys!

-- Charles