Aaron Clarke - Embedded Systems Consultant
Since I received my first computer for a Christmas present at age 14, I have been fascinated with computers. My interest started out with programming, but I wanted to learn more about how they worked and how to build one myself. This led me to pursue electrical and computer engineering and eventually into embedded systems development.
My favorite software tool has to be Emacs. I can do just about any programming task I need from within Emacs and I think I am more productive with it than with any integrated development environment.
I was bringing up an embedded Linux system and was brought in to the project late after the hardware was set. I couldn’t get any support or even a data sheet direct from the processor vendor. I had a few development boards and our prototype to work with. I found an initialization problem that affected the prototype and one of the development boards. I was finally able to get the initialization to work by setting a certain register multiple times with the same setting. This might have been obvious from the chip errata, but I found this out by using a web translation of a Chinese blog post with some code examples for the processor. Solving this problem did not show any special skill on my part, a search engine gave me the link to the code, but it was difficult because everything that I checked looked correct. Most bugs look easy or obvious once you fix them. This reminds me of a favorite quotation from Sherlock Holmes “You know a conjurer gets no credit when once he has explained his trick; and if I show you too much of my method of working, you will come to the conclusion that I am a very ordinary individual after all.”
Every useful reference I can find. One of my first professors scolded me for borrowing an engineering book for an open book test. He let me use it, but told me I should buy a copy for myself to build my library and that a good collection would benefit me throughout my career. I have found his advice very prescient. I think it has saved me a lot of time over the years. I tend not to reinvent the wheel, and it reduces the learning curve when faced with new technology. I do have some favorite authors, Stevens for his network programming books, Petzold for Windows development (I write a lot of test programs for embedded devices), and Axelson for PC interfacing.
I developed the firmware for a few different high-tech toys that were mass produced and now very much enjoyed by my own children. These were also very challenging projects with many advanced features such as an LCD, touchscreen, USB, video/audio decoding and a real time operating system. I enjoy a challenge and it’s really great when all of your hard work comes together and becomes something that people enjoy using.
I was able to design improvements to an instruction set for a digital signal processor for a large semiconductor company. We had an application that required highly optimized assembly code running on a fixed point DSP. It was easier for them to change the instruction set than to increase the clock rate of the processor, so I rewrote all of the time critical routines with a small set of proposed new instructions. They agreed that the time critical routines couldn’t be optimized further and designed the new processor to my specifications. I doubt I will ever get another opportunity to design an instruction set. This was about 15 years ago, I think a better solution today would be to use programmable logic to offload some processing tasks.
I’m just starting a project that uses the Android open accessory development kit for an industrial product. The kit reference hardware uses an Arduino board and Oleg Mazurov’s USB host shield. This is a great project for me because I have a lot of experience developing an embedded host using almost the same hardware. The only challenge is that I will be bringing up a new board using a Microchip PIC instead of the Atmel AVR microcontroller. This design is going to be used to interface to a number of sensor types.
I was the software lead on a large firmware project and needed to outsource part of the development so I used a few embedded system consultants. I also helped evaluate consultant’s proposals for other development groups. I learned a lot more about the consulting business working in that position and that led me to consider it for myself. I started when I found a start-up company that needed help developing a new consumer electronic product.
I plan on developing a single board computer and software development kit to go with it. I would like to offer the kit as a starting point for consumer product development. I would offer my services to customize the kit and design new devices based on it. I have a lot of details to work out but I think this will have many benefits. For example, I would be able to specialize on a processor family, and increased code reuse.
There are many young people today who are interested in embedded systems designs because of consumer robotics like Lego Mindstorms and DIY electronics products like Arduino. It should be very interesting when these people start their own companies. I think they realize that many useful products are not on the market, and more advanced products are possible. In fact, many are making them now with Arduinos, 3D printers or inexpensive PCB protoboard houses. The combination of open software, open hardware, and low cost prototype production should allow many more innovative and useful products to exist in the future.