Dynamic C : $200
Dynamic C is Z-World’s compiler for the Rabbit series of micro-controllers. The Rabbits are based on the venerable Z-80 architecture, and Z-world (soon to be renamed Rabbit Semiconductors) has managed to make a series of very affordable and versatile processing modules, including Ethernet Connectivity. The compiler includes an IDE used to perform the compilation, loading and debugging of the program.

The biggest issue you will face when using Dynamic C is the non-standard mechanism used by the compiler. Dynamic C does not have the normal concept of source files compiled to an object module, and the various objects linked together to produce the final image. Instead, it uses one .C file to hold the main program, and in essence, it includes a bunch of .lib files (really source files) which it compiles together to produce the firmware image.

Dynamic C does not have a normal #include directive. Instead it has a #use directive, which imports the above mentioned .LIB files. Since it does not have header files, functions are declared using a special type of comment:

/*** BeginHeader SerInitialize */
void SerInitialize(void);
/*** EndHeader */
void SerInitialize()
{ ... }

Dynamic C also extends the standard C language with the concept of CoState and CoFunctions. It is a way to perform multi-tasking, but much of the multi-tasking guts are hidden from the user. One the surface, this is appealing, but one quickly runs into limitations imposed by this particular approach.
The problem with this approach is that the code you write can’t easily be used as-is in a standard compiler. This makes it difficult to retarget some of the code, to run unit tests for example. If you have an extensive code base making use of the Dynamic C extensions, it would be nigh imposible to move to a different compiler, or easily reuse that code.

The libraries that come with Dynamic C are extensive and provide an good amount of functionality. The whole TCP/IP stack is present, including DHCP, an HTTP server and other functionality. Standard functions are also available to access the Rabbit’s 6 serial ports.

Z-world rolls out new versions of the compilers fairly regularly. As a result of the compiler architecture, whenever a new processor module comes out, a new version of Dynamic C must also be released. Unfortunately, there has been a few instances where upgrading the compiler has proved problematic. Some of it has been related to major changes performed to the TCP/IP stack between release 8 and 9 of the compiler.

At heart, Z-World is a hardware company. Their bread and butter is selling their processors and processor modules. Their compiler is only an enabler; after all, if there was no compiler, nobody would choose their processors. Ultimately, the historical decision to have their own dialect of “C” does developers a disservice.

Unless you absolutely need the support for the latest & greatest Rabbit processor (the R4000), or you already have a significant investment in Dynamic C code, there is at least one other alternative compiler out there you should seriously consider.