Wednesday, April 20, 2005
Finally, A Real Embedded System
One of the reasons I took my current job was the opportunity to work on embedded systems. For years I've been doing desktop and server applications, and have gotten bored with them, so the chance to do some embedded stuff was attractive. Unfortunately, after taking the job, I was disappointed to learn that all of our "embedded" applications were running on Windows 98. They were essentially no different from a desktop application, except that the user input was a touch screen instead of mouse and keyboard.
Now, I've got a chance to work on a real embedded system. Yesterday we were given samples of the new single-board computers being considered for use in the next generation of some of our products. The boards have 200-MHz processors, 32 MB of RAM, and a whole bunch of serial ports. Our job is to figure out how much work will be required to port our existing application to this hardware. Our current hardware platform has a 1.1-GHz x86 processor and 128 MB of RAM, so there are concerns that we may need to re-design our application to fit into a smaller memory space and still meet the timing requirements with a slower CPU. We really don't know what the hardware requirements are, as there are no accurate means of measuring the CPU and memory usage of our application on Windows 98.
I know some developers will laugh at the idea of calling a 200-MHz machine with 32 MB of RAM an embedded system, or a "constrained platform." There are embedded-systems developers who work on machines with speeds measured in kilohertz instead of megahertz and memory sizes measured in bytes instead of megabytes. Obviously, this machine is closer to a server than to a digital watch, but it has no video, no keyboard, no mouse, and no hard drive. It has half the CPU speed and half the RAM of my PDA. So it is definitely different from what we've been using.
One big open question is which OS we will be running on this thing. The board's manufacturer recommends embedded Linux, and that's what's loaded on the boards out of the box. However, our existing applications are written for Windows, and our development staff is more familiar with Windows than with Linux, so there is some desire to go with Windows CE. I am an "OS agnostic" (I don't really care what OS we go with) but I think in this case Linux makes more sense. If we had a GUI, or needed to interact with Microsoft applications or technologies, then CE would make sense, but all we're doing is serial-port I/O, LAN and dial-up communications, and some file management, so I think Linux fits the application better.
Another concern with trying to use Windows CE is that the manufacturer has not yet provided CE device drivers for the board. They promise them by the end of the month, but they have been promising them by the end of the month every month since December. We need to have this system ready in a few months, so delays in getting full support for the OS increases our risk.
I've written embedded apps for QNX, VxWorks, Palm OS, Windows CE, and Linux. The POSIX=style environments (QNX, VxWorks, Linux) are a lot easier to use due to all the POSIX-style development and debugging tools out there. I like being able to just hook up a VT100 or telnet into a box and do everything from the command line. Unfortunately, I seem to be in a minority. Everybody else wants the fancy IDEs and emulators and other glitzy stuff that you can get for Windows CE development. They think writing apps for CE will be just like writing apps for Windows 98 and XP, and there will be little need for retraining. I think they are wrong, but I won't be able to convince them.
In theory, I am just managing and mentoring the guy who is really doing all this evaluation. However, this is my first chance to work on something that interests me, so I'm going to be as involved as I can be. I'm even thinking about going in to the office on my days off to play with the new toy. I can't decide whether that is healthy or not.