Ask embedded programmers what tools they use, and you'll usually find a common thread: C/C++, an integrated development environment (IDE) or their favorite editor/debugger, and a standard library or platform like Microsoft .NET.
These tools work for most applications. But what happens when the situation turns into hammering a nail with a screwdriver? The screwdriver gets a good workout. Programmers who are more adventurous or enlightened look for a new tool.
Programmers often overlook scripting languages in embedded applications. Usually, they lack the speed of C, and their runtime framework is large. These issues aren't a problem on a PC with lots of horsepower, gobs of memory, and hard disks that hold hours of movies. But they can be limitations in an embedded environment. Processing power and memory capacities continue to grow, though, especially with the advent of low-cost 32-bit microcontrollers.
The base code size typically is the issue for most scripting systems because they're often designed to be feature-rich. In some cases, it's possible to strip down a system to its minimum components, so developers only have to pay the space price for the features they require. This is similar to how developers must already prune a real-time operating system and runtime libraries for C applications. Also, the result application is often smaller since the runtime generally handles the heavy lifting.
Scripting languages have many advantages, like a more flexible type system and better text handling functions that will benefit some applications. It's very easy to write simple applications quickly, and they're apt to be more portable than C code. They also tend to be more dynamic, as some languages support runtime compilation. This is handy for debugging, but it's also useful for making a device more flexible or customizable.
For example, many embedded network devices implement a Web server and generate HTML pages that are viewed using a Web browser that usually runs on a powerful PC. What happens if that PC could be used to handle some of the chores normally done by the embedded device?
Developers looking to be even more daring might consider non-mainstream possibilities such as Scheme, a variation on Lisp. A number of Scheme platforms such as Per Bothner's Kawa Scheme generate Java bytecodes, making them scripting systems that can coexist with Java applications.
Are you using a scripting system in your embedded application? Let me know at [email protected]. They might make a great Design Brief.