Free LPC2xxx RTOS for non-commercial use
2004-03-07 by kristianstad2001
Hello all, I've followed this group basically from the beginning and I've notices that a recurring question/subject is real-time operating systems. 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 RTOS! 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 memories. 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 http://www.EmbeddedArtists.com 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 settings. (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 (http://www.keil.com) 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 hours. 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. http://www.EmbeddedArtists.com/arm7hal/ARM7_HAL.zip 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- running. 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: Anders.Rosvall@... 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... DS.