Competing with "Free" Software

Tough Survivors

As I said in the last blog entry, independent embedded C/C++ compiler companies are becoming rare birds. Of the independent companies that support multiple platforms, besides us ImageCraft, there are Green Hills (US), IAR (SE), Cosmic (FR), Rowley (UK), and… um, I think that’s it. Since being bought up, Hiware/Metrowerks primarily target Freescale chips; Hi-Tech clearly will concentrate only on Microchip’s PIC; Keil, despite being an “ARM company,” still sell tools for the 8051, C166 etc. probably because the money is good, but who knows how long that will last?… Most  if not all compiler companies were started by compiler gearheads (who else would be crazy enough to start a compiler company?) a while ago. In fact Cosmic and ImageCraft are tangentially related through our lineage with Whitsemiths. With the different product pricing and the vast number of embedded devices, most of us in fact do not compete directly with each other per se. However, there is …

The GCC Equation 

(dun dun duuuuunnnn…..)

Different embedded compiler companies “die” for different reasons, most likely financially related, and in 2009, the GCC equation must be a factor directly or indirectly. (Click on …more… to continue)


Product Development Update

There are only about 50-100 assembly lines (if that) in the core executive portion of eMOS, but like all other executives, it takes blood, sweat, and tear to get it right. After a night of hardcore debugging, I am happy to say that eMOS for 430 is alive with the messaging routines working quite well. A bits more testing and code cleanup, and modifying the documentation and it’s good to go.

As per design, only3-4 lines of C code need to change, to accommodate the difference between AVR and the MSP430 (other than the device specific code of course). There may be more opportunities to take advantage of the low power mode of the msp430, I will be working on that. For those who do not know what eMOS is, please refer to It’s the AVR document, but the functionality is nearly identical.


In another news, regarding the minimal support for the 430X in the form of > 64K support, I have gotten the CALLA/RETA code in, and it works well for the below 64K cases. I have trouble loading > 64K program so it has not been tested where it counts yet, but I have just gotten a loader that should work. I hope to finish that off relatively soon also.


I also have a prototype SD/FAT stack working, complete with ANSI C stdio functions (fopen, fprintf, fputs, etc.) to a middleware FAT filesystem on top a SPI SD interface. The code is completely portable, currently being tested on an AVR Mega32.

The current plan is to release a standalone version and a version adapted for eMOS RTOS (hooks for other RTOS will also be provided), plus the FAT layer will also comes in two versions: one that is fast and support multiple concurrent devices but really requires external SRAM and one that is slower and supports only one device but works with the small amount of internal SRAM. So 4 versions altogether.

I am working on optimizing the FAT layer both at the algorithmic level and low level code generation. However, it’s probably not recommend for devices with less that 32K of flash or 2K of SRAM.

The application API is strictly ANSI C, based on the Dinkumware library, written by PJ Plauger, my former boss and the code is as complete and as rock solid as it gets.

The hardware interface initially supports SD card using the SPI protocol, but the code can be easily adapted for other memory devices or protocol.

The proposed pricing is $200 binary only, with the needed functions supplied in source code for any customization.

The initial release will be for the AVR, but ports to all targets with built-in SPI should be trivial. The Propeller requires a bit bang version of SPI interface using a separate Cog. Other devices without hardware SPI can use bit banging.

eMOS for TI MSP430

We are now porting eMOS to the TI MSP430. The TI MSP430 excels at minimizing power consumption, and with eMOS’ system hooks to shut down the system when it is quiescent, eMOS is a good fit for the MSP430 family. We expect porting and testing will take about a month so production release should be around the beginning of March.

Posted in new product. Tags: , , . No Comments »

eMOS for AVR Released


The zip file is the demo version. You are limited to up to 5 tasks. Currently you will need to unzip the content in a temporary directory and then copy the files:

copy *.h c:\iccv7avr\include
copy lib*.a c:\iccv7avr\lib

When we release the next AVR compiler demo update, the files will be incorporated directly.

We really feel that eMOS is a very useful tool. The core features of preemptive multitasking and message passing are nice, but we also carefully added additional features such as stack checking, virtual watchdog, and system call error checking, which can save you significantly amount of debugging time. Please check out the documentation or the demo and see for yourselve.

Our next port is probably either the MSP430 (the system idle task hook is ideal for low power systems) or ARM. Let me know if you have interest in either port.

Posted in new product. Tags: , , . 1 Comment »

More on eMOS

I have updated the “eMOS White Paper” entry with the current list of API. Please check it if you are interested. The tentative pricing is as follows. The initial port will be to the Atmel AVR, to be followed by MSP430/S12/ARM etc.

eMOS is licensed and not sold:

Evaluation – For non-commercial use only. Binary release included with the ImageCraft compilers. Support up to 5 tasks.

Student $99 – Binary release with no task limit for non-commercial use only.

STD $695    – binary release with unlimited end user product distribution for a single licensee (*).
ADV $1495 – source release with unlimited end user product distribution for a single licensee.
PRO (call for pricing) – source release with unlimited end user product distribution for a single developer or company.

STD to ADV upgrade: $800.

Purchase includes one year of upgrades and support. Upgrades and support may be purchased per annum basis for $300, $600 and $1000 respectively. You may continue to use your licensed copy of the product and distribute end user product after the support contract expires if you choose not to renew.

(*) a licensee is defined as one developer and one embedded product

Posted in new product. Tags: , . No Comments »

eMOS Whitepaper

eMOS – an embedded message passing real time OS

eMOS is a real time OS for embedded systems with a preemptive message passing kernel at its core. The message passing API provides a uniform model for supporting additional software stacks such as UART driver, File System, USB stack, TCP/IP and CAN library etc.


Posted in new product. Tags: , . 5 Comments »

New ad and new products, oh my!

We just submitted a new ad to Circuit Cellar Inc. It should appear in their Nov issue. (Note: the young woman demonstrating her eBox kit IS a student, not a professional model. :) )

Meanwhile, we have a few new major and minor product releases in flight, so many that it is almost tough to keep track of them. Some highlights:

  • As blogged in a previous entry, the Parallax Propeller is an exciting new microcontroller that brings the power of multiprocessing to embedded market.  We are now prototyping a XMM (external memory model) scheme where programs can be stored in external memory, in as much as multi-megabytes of storage. With the 8 32-bit cores in the Propeller and combined them with huge amount of program memory, this could be a potent combination for experimenters.
  • Atmel is aggressively pushing out their new XMega versions of the AVR devices. Our AVR compiler already provide the basic support and we will be releasing a beta version of the Application Builder that works with the XMega soon.
  • Also in development is a CAN library for the AVR. We will be releasing the base version soon which will support the CAN128 and will be included as a part of the compiler package. Forthcoming are higher level APIs and faster performance and integration with a RTOS.

I should expand on the last entry a little bit more. We will be releasing an  embedded message passing OS, hence named eMOS, tentatively in Nov 2008. It has a preemptive scheduler with task priorities and round robin scheduling. Comparing to a cooperative kernel, it has higher overhead on RAM usage but it allows very natural use of “functions as tasks” model. The philosophy is that as much as possible, the RTOS should not impose restrictions on the user programs.


Posted in new product. Tags: , , . 3 Comments »

In the Beginning…

Our first compiler product was a low cost ($39!!!) C compiler for the HC11. The ’11 was great for its time: the documentation is a standard that most CURRENT microcontroller documents could take lessons from; the chip was easy to use, even in the era of burning your own EEPROM and erasing them using UV light, and the HC11 E2 was a charmer since it has its own builtin 2K of EEPROM, back in the late 80s!

But I digress, ImageCraft had an earlier beginning. Back in the days when I was in the graduate school, I got very interested in MIT’s Rodney Brook’s subsumption architecture (*) and I did my Master thesis on a subsumption based C kernel (demonstrated with a RC-converted robot named Ripley). Then I decided to see if I can commercialize the kernel. As with all product launches, the naming took longer than the development time (ok, I exaggerated), and the kernel ended up being called REXIS, short for REal time eXecutive for Intelligent Systems. I forgot exactly how it happened, but someone at the Canada Forestry paid us a lump sum of $1500 to port REXIS to the 68000. They were embarking on a decade long project to build autonomous forest tending robots and REXIS fitted the bill, and thus ImageCraft was born… They actually sent us a VHS tape of the robot in action. It’s a huge 4 legged walking robot, able to negotiate rough terrain. I wonder if the clip is on youtube :-)

To close the story, it didn’t make much sense to sell a HC11 C kernel suitable for robotic uses when most roboticists/students could not afford a $1500 compiler, so I decided to write and sell a low cost HC11 compiler…

REXIS morphed into the simpler uExec, which we published in a Circuit Cellar article and is available on our website for several targets. One person added messaging API and another person ported it to the M16C. Unfortunately, I have not gotten these enhancements. In any case, I still have a soft spot for REXIS and I may resurrect it in a more modern form one of these days.

(*) funny enough, Brook’s eventual company started by one of his students, iRobot, is one of our customers…