Fog Creek Software
Discussion Board

How to get started in embedded programming?

I've seen some references to articles on and, as a side effect of browsing that site, I realized this is the programming I want to do.

I've always been obsessive about how the thing works at low, low level, and high school buddies scolded me for never moving beyond assembly when they did the same thing (and it looked better) in Turbo Vision or whatever

What should I do to creep my way into firmware?

Saturday, November 15, 2003

Embedded is a still a broad field.  It's generally
divided into low level people, infrastructure people,
and domain people who happend to need an embedded

Low level people do board support packages and
drivers. They work closely with hardware.

Domain people are making the product like a switch,
breaking system etc.

The middle people bridge the two worlds.

VxWorks is the most popular real-time OS. You
can get a copy of that and do something.
Same for QNX.

Then be able to say you did something and know the
field cold. Then take any job for any pay to get

son of parnas
Saturday, November 15, 2003

The easiest way to get started is to get a job at an embedded systems comany :-)

The cheapest way to get started is to grab an old 486 or something off of eBay, and load up DOS on it.  Start screwing around with the inport() and outport() functions.  Write a serial port communication program.  Write something to use the parallel port.  Write an interrupt service routine.  Toggle a few registers.  Write to some regions in memory.  Learn how DEBUG works.  Make some BIOS calls. 

Believe it or not, DOS is HUGE in the embedded market (embedded x86 anyway).  There are a couple of free compilers that support DOS targets.  You can still buy Borland 3.0.  Personally, I like OpenWatcom for its robust 32-bit DOS extender.

Once you've got a handle on DOS, you can probably start looking at some real-time operating systems.  Wind River (the makers of VxWorks) don't even want to talk to you unless you're going to buy a couple of thousand licenses.  QNX has a really slick bootable demo you can download and play with.  Windows CE has a time-limited demo that you can download.  Download them and start playing.  That can help you get a feel for things like "hard" real-time and multithreading.

There's also a handful of embedded and real-time Linuxes you can play with.

To branch out beyond x86, you can grab a single-board computer that powered by an ARM or PowerPC chip.  The last couple of pages of Embedded Systems Programming (, are filled with ads for cheap SBCs that you can buy to play with.

Also, it's a good idea to grab a few books, and start reading them.

Myron A. Semack
Saturday, November 15, 2003

Metrowerks has a couple on online courses on embedded systems at  I just checked the site, and there was a class on Motorola DSP programming and one of OSEKturbo realtime OS development.

Ben Combee
Saturday, November 15, 2003

A good resource is Steve Ciarcia's "Circuit Cellar" magazine, or the online version at , to get ideas for projects or to get an overview of embedded technologies. Plus, lots of embedded equipment and support companies catering to startups advertise there. This guy and his writers have been a player in the low end and hobbyist segment of embedded systems for at least 15 years.

Also, it's worth noting that the embedded field is indeed huge. There is the "embedded" of programing single chip processors like the PIC or the 8051, and not even really using an OS in that context; or using DOS, which is only a thin artifice of an OS; or using some system like the Wind River stuff that  offers true multiprocessing. Plus there is a plethora of hardware configurations.

HOWEVER - jobs in embedded are *VERY TOUGH* to get. The *only* reasons that I would do anything with embedded are for fun, or to develop my own product idea. I advise to not pursue embedded as a career today.

Why: just as manufacturing has left the US, so too have the design jobs associated with making things. And manufacturing was one of the big uses of embedded skills.

Oh, did someone say DOD? Yes, OK, except that most contractor companies cherry-pick for their competitor's people because it streamlines the clearance process. I have a huge AFB almost in my backyard and I can assure anyone that DOD is a closed camp. It's hard to get in and it's VERY hard to get out and get employable in the commercial world again.

Bored Bystander
Saturday, November 15, 2003

It's not so much about the tools or software.  The best way is to look for companies that actually make and ship some physical thing, like a clock, TV, car etc.

Might help to learn Chinese too ;)

Saturday, November 15, 2003

Oh yes, since this is more of engineering type job rather than IT, you won't be looking at the big salaries you might be able to get some day being an "analyst" or contractor, so think long and hard about how interested you are in the field...

Saturday, November 15, 2003

Most of the embedded programmers that I know have electrical engineering degrees. You should consider getting one if you are really interested or at least take some related classes.

Bit Banger
Sunday, November 16, 2003

I got into it through PIC controllers and gameboy programming.

M. Beddid
Monday, November 17, 2003

Yeah, on marketability - the biggest downside to specializing in embedded programming is that EVERY company you approach will down your past work. The excuse is always, uniformly, that nothing about your past work applies, since your past work was unique and the new work is unique in a different way.

I mean, no friggin' DUH, but what always sells is product recognition, not "talent."

If you're looking for a reliable career path, embedded generally isn't it. Companies generally have embedded programmers by the balls. It's the main reason I got out of it.

Bored Bystander
Monday, November 17, 2003

*  Recent Topics

*  Fog Creek Home