Well I closed the deal to do some embedded work on an I/O chip that has an ARM core in it. I'm afraid it's very much under nondisclosure, so I can't be very specific about what I will be working on.
The client is sending me his eval board (a development kit built into a large briefcase!) and the chip manufacturer emailed an NDA to sign. An hour after I faxed the signed NDA to them, the manufacturer's support engineer emailed a whole bunch of useful information.
I wanted to have a desktop system to practice ARM programming on so I asked on the debian-arm mailing list. Someone is selling me a used Corel Netwinder for $350. You can also buy new and somewhat fancier ARM Netwinders for $550 to $600 from Netwinder.net. They have Crusoe based systems as well.
Whee!
This first job is quite small, but the client has a lot of other work waiting after this. Having the small job will allow me to get familiar with the chip before I do the other more difficult jobs he wants.
I discussed this on the ACCU list and based on what they said and what I found in their embedded systems book reviews section I'm going to get the following books, the first two right away because that's all I can afford so far:
- Programming Embedded Systems in C and C++ by Michael Barr
- Debugging Embedded Microprocessor Systems by Stuart Ball
- Embedded Microprocessor Systems 2nd Ed by Stuart Ball (there's a third edition coming soon but I can't wait, unless it's published before my next paycheck arrives!)
- Software Design for Real-Time Systems by J.E. Cooling ($$$ and hard to get)
I have a bunch of linux kernel books and one embedded linux book already.
Also here are some good websites for emedded stuff:
- Linux Devices.com
- Circuit Cellar - get all the past issues on CDROM for $114!
- Embedded Systems Programming - I signed up for a free subscription to the magazine today
- Quest - writings on embedded software methodology
- The Ganssle Group - offers a free embedded newsletter that is archived online. Apparently this guy is somewhat controversial
I'm very excited about this. I've been trying to find a way to break into embedded programming for over a year.
Help Me Get Into Embedded Systems Programming
I've had the idea for about a year that I should go into embedded systems programming. One reason for this is that many of the things I strive to achieve in my programming (efficiency and reliability) are valued in the embedded world much more than in the desktop GUI market. Another reason is, at least when I was looking a few months ago, I saw lots of job and contract ads looking for embedded programmers that offerred much higher pay than what I was seeing for GUI work.
Another reason is that I think the efforts the industry giants are putting into moving applications to the server (stuff like .Net and web services) are going to kill the GUI application market.
There are a couple of problems though. The embedded systems market has this whole huge body of knowledge and practice that I'm mostly unfamiliar with.
I have done some kernel-level work (mostly in the Mac OS, but I have tinkered with the Linux and the old BSD-based Sun OS kernels) and I've done a lot of work in 68000 and PowerPC assembly code. I also have a bachelor's degree in Physics and have done a lot of experimental work, and took courses in analog and digital electronics at UC Santa Cruz. But I know I have a lot to learn.
So here's how you can help me: recommend books I can read that can help me get started in embedded programming. I'm interested in both theoretical books (like architectural theory for embedded OSes) and I'm also interested in really practical things (like hands-on project books for hooking up toasters to 8-bit microcontrollers), techniques for day-to-day development and debugging, as well as books on learning electronics.
You can either post your recommendations in your diary here or email them to crawford@goingware.com.
One recommendation I can pass on is that my friend Tom Cumming (who's been doing embedded work since he was a kid) recommended I read Circuit Cellar magazine (I hadn't seen their website until just now - it looks real good). Actually I have read circuit cellar from time to time since it was a Byte magazine column, and I know it to be very good.
The book I used for both my analog and digital classes in school was the first edition of The Art of Electronics. The classes were actually taught by the physics department, and were intended to teach physics students to design and build their own instrumentation. Horowitz and Hill take a very different approach to teaching electronics than is traditional for electrical engineering textbooks. I remember professor dorfan saying that EE profs held a very low opinion of the book, but it was a hit with physicists and physics students.
I actually started reading it again a few months ago when I was interviewing for a job writing electronic cad software, but I got sidetracked. I'll pick it up again.
I also read a book last year that I think is called "embedded linux programming" or something like that, but I can't find my copy just now. But it was very good. It had a particularly clear explanation about what happens when booting an x86 linux system. And I have the books "Linux Device Drivers", "Understanding the Linux Kernel", "Kernel Projects for Linux", and Moshe Bar's "Linux Internals".
Anyway, any suggestions you have are greatly appreciated. Embedded Linux programming of course is a big interest but I'm also interested in other embedded OSes - there are a lot of things Linux can't do, like support multitasking in less than 64k of ram, which I think eCos can do.
Of course, a big problem is finding the time to study all these books, even the ones I already have!
The other problem is breaking into the embedded world. No one wants to hire anyone without paid work experience, and even though I've been working as a programmer for fifteen years, I don't really have anything on my resume yet that I can claim as embedded work.
But I have some happy news. I think I will be getting a small contract very soon writing the software that runs on an embedded ARM processor aboard an I/O chip. This would be very good work for me, and would finally give me a toehold into the industry.
I thought it would be helpful to have an ARM-based desktop machine to learn more about ARM assembly code and OS programming, so I asked around and have found someone who wants to sell me a very-slightly-used Corel Netwinder, an ARM-based Linux box. Debian supports ARM now, so the guy is going to install Woody on it for me.
Wish me luck.