Archive for February, 2011

What is Arduino?

Friday, February 18th, 2011 Michael Barr

Believe it or not, artists, hobbyists, and other “makers” have discovered embedded computing. Increasingly, they’re turning to an open source hardware platform called Arduino to put firmware inside their creations. Over 100,000 of these inexpensive embedded systems have apparently been sold for use in prototyping and in a range of low-volume “products.”

What is Arduino?

Arduino is the name of a family of related circuit boards, which includes the Arduino One shown in the photo below. The official website of the Arduino project is

Arduino Uno Circuit Board

Like many open source projects, there appears to be a lot of branching from the original design. So what follows is a generalization. Arduino is based on the Atmel AVR microcontrollers, such as the ATmega328. The ATmega328 is an 8-bit MCU with on-chip memory in the form of 32K flash, 2K SRAM, and 1K EEPROM. In the Arduino designs, the processor is generally clocked at 16MHz.

There are also a whole host of pin-compatible extension boards, containing displays, buttons, sensors, actuators, network interfaces and/or wire-wrap prototyping areas.

The Arduino IDE is an open source cross-platform tool (i.e., written in Java) that is based on the avr-gcc compiler (a variant of the GNU compiler for 8-bit AVRs). Though you can program in the “Arduino language,” this is really just a set of function calls that gets translated into C–so you can also program in C or C++ if you prefer.

An open source bootloader (0.5K) makes downloading your programs to the Arduino board easy.

Should you care about Arduino?

As a professional embedded software developer, I don’t have much use for a prototyping board like the Arduino. I’m generally handed a custom board by a hardware designer on my team. And many of you design both the hardware and the software for your projects. So why should we care about Arduino?

I don’t think I know the answer to this question yet. But it is very interesting to find embedded software being used by such a diverse group of artists, hobbyists, and entrepreneurs. What do you think?

Embedded Software Community Survey Findings

Monday, February 14th, 2011 Michael Barr

In addition to blogging here and tweeting (there), I also write a monthly e-mail newsletter about embedded software that is called Firmware Update. More than 15,000 embedded software developers are currently subscribed to this newsletter. Here’s what I learned in a recent survey of those newsletter readers, in which 452 individuals participated.


Embedded software engineers are spread all over the world. Of the survey respondents, only 40% are located in the United States; California houses about 1/4 of those. Two other well represented countries are India (9%) and Canada (7%). The remainder of respondents are spread across some 43 other countries, from Argentina to South Africa. Every continent but Antarctica is on the list. It’s amazing how quickly the world is shrinking because of the Internet, isn’t it?


According to this survey, the average age of an embedded software engineer is approximately 37 years. Overall, approximately 55% are between 20 and 39 years of age and 45% are between 40 and 69. Just one respondent is 70 or over and none are under 20.


Here I’ll admit to being a bit shocked: we are as a group far more educated than I thought going into the survey. Approximately 49% of respondents hold a graduate degree. These are mostly Master of Science degrees, of course. But almost 1 out of 20 of us holds a PhD. On the flipside, just 5% of respondents said they are practicing embedded software with only a high-school diploma or 2-year degree.

As I expected, we’ve mostly been educated as Electrical Engineers. Over 55% of all the undergraduate and graduate degrees held by respondents were EE degrees. Interestingly, Computer Engineering was slightly more popular than Computer Science among the rest. Though I offered a free-form “Other” textbox and quite a few folks entered something there, there were no large percentage of other degrees. Only Mechanical Engineering, Math, and Physics stood out as at least occasionally repeated answers. (Winner for most surprising answer: Psychology.)

Employment and Team Size

The number of unemployed respondents was about 3%. The vast majority of the rest are paid as full-time salaried employees. But approximately 15% of us are consultants (“on a per project basis; at times multiple clients simultaneously”) or contractors (“by contract to one large company for a set length of time”). And some of the consultants also have a full-time job or a contractor position.

The total number of embedded software engineers employed at the same company varies widely, from 1 to over 1,000. But the single most common choice was 2-4. In my mission to improve the quality of embedded software across industries, I’ve seen first hand that one of the reasons for poor quality is that a small team of firmware engineers working at a company that specializes in other types of engineering or product design tends not to be connected into the latest best practices.

The number of embedded software engineers on respondents’ current projects is smaller, of course, and ranged from 1 to over 200. Not surprisingly, project teams with more than 20 firmware engineers are quite rare (just 5%). On the flip side, teams with just a single firmware engineer are quite common (almost 25%). The average team size seems to be around 1.5-2.


As I planned the survey, I hoped to distinguish three types of experience: electronics design, embedded programming, and other programming. So I asked three distinct questions, each with the same answer choices.

Here’s my interpretation of the answers:

  • Over 60% of embedded software developers also design hardware–at least from time to time–or came to programming after first working as a hardware designer. That’s a big number. Shockingly, it’s an even bigger number than the percentage holding an EE degree cited above. The average number of years of hardware design experience is around 8.5
  • The average amount of embedded programming experience is approximately 12 years.
  • The average number of years of other programming experience is about 7.5.

In other words, embedded software developers are jacks of all trades. Many of us weave back and forth in our careers, and even sometimes within a single project, between electronics or chip design, writing low-level embedded software, and writing software for PCs, websites, and other platforms.

Baltimore, Technology, and Startups

Monday, February 7th, 2011 Michael Barr

In the coming weeks and months, I’ll be expanding the range of subjects that I blog–and tweet–about. For the last five years I have been focusing my writing in these venues almost exclusively on the development of embedded software. Although embedded systems is my first and foremost passion, I maintain several other interests worthy of attention. Three of these subjects are Baltimore, technology, and startups. For me, these subjects are intertwined with embedded.


I was born and raised in Charm City and have lived and worked within about 35 miles of downtown Baltimore in all of the years since; I’m writing this from about 10 miles out. I’m thus a proud Baltimoron (er, Baltimorean?). Though the whole Old Bay seasoning/Maryland crab cakes thing never caught on with me (I’m a vegetarian, hon) I maintain many ties to The City That Reads and, as a result, struggle to this day with the proper pronunciation of words like museum, wash, and sink.

Now, Baltimore is not particularly known for its embedded software jobs. Yet Jack Ganssle and Nigel Jones as well as many top-notch embedded system designers are located right here. Unfortunately, most of the local embedded developers would have to kill you if they told you what kinds of systems they design. (Suffice it to say that the folks over at nearby NSA and their many subcontractors make a heck of a lot more receivers than they do transmitters.)

You’ll be hearing more from me about what’s going on locally here in Baltimore, because that’s my community. Local is the new global, after all.


As much as I truly love working in the field of embedded systems, I recognize that what we do is typically everything but state of the art. At a very high level, our specialty is putting decades old processor technology and trusted reliable software languages and libraries into previously unthinkable applications–in a diverse set of domains, from medical devices to automobiles. That’s why we mostly still use the C programming language.

However, like most good technologists, I maintain an active interest in what’s going on in the state of the art in my field. On the software side, what seems to be hottest right now is cloud computing, smartphone apps, and big data.

I read and think a lot about all of this. And from now on I’ll be passing along bits and pieces that I hope you’ll find interesting too.


Finally, though I am principally an engineer, I also have an MBA. And for over 12 years I have run a successful small business (i.e., Netrino). I’ve also been involved in a few technology startups that didn’t go so far. And I really enjoy interacting with other entrepreneurs, helping them refine their ideas, and sharing what I’ve learned as a businessman. (Over the years, Netrino has also helped a number of startups develop prototype embedded systems.)

This year all of this stuff seems to be coming together in my world. That’s partly because Baltimore has a rapidly expanding technology startup community. The heart of this community is at the Emerging Technology Center in downtown Baltimore, where I’ll be increasingly making time to get involved. There’s also the wonderful Baltimore Node Hackerspace, where Baltimore, technology, and startups actually intersect with embedded systems design.

I think these additions to the topics covered here and in my twitter feed will make for an even more interesting read. I hope you agree and would love to hear your thoughts in the comments below.

Social Networking for Engineers

Friday, February 4th, 2011 Michael Barr

Would your best friend describe you as a particularly “social” person? Do you like to “network” and meet new people? If you’re an engineer, your answer is probably something like,

“Um, no and no. Now can I slink back to my cube, Mr. Nosy McSales Guy?”

The growth of “social networking” in its many forms is a remarkable phenomenon that’s proving powerful enough to reshape the economic landscape and trouble despotic regimes. For example, if (6 year old!) Facebook were a country it would already be the world’s 3rd most populous.

That we the engineers–who ultimately make stuff like this possible–are mostly a loose band of individuals self-selected for our lack of people skills (a key trait that allows us to sit in cubes all day focusing deep-deep-deep on new technology) may explain why so many of us are luddites when it comes to using this “social” technology.

Some of us rationalize that we don’t like connecting with people offline, so why would we do that online. Others that reading status updates from other people will take valuable time away from more important stuff. This fun video sums it all up,

“Until recently, wasting time on computers was the domain of engineers alone. Now even my Nana wants to keep me up to date on the status of her cats!”

But there’s a lot of value in social networking for engineers. Here’s how I use three social networking websites and why you should join them too.

LinkedInmy cloud-based self-updating address book

Every user on LinkedIn creates a “public profile page”, which is something like a resume. Your profile gives your current job title, the name of your employer, and the nearest big city. If you want, your public profile also has space for you to expand on what you do in your current job or in your career generally. You can also list where you went to University, what you majored in, and your past employment history–complete with praise quotes from former colleagues and managers.

When you “connect” to another LinkedIn user, they get to see your private information too. This includes (by default) your e-mail address and phone number, as well as the names of your other connections. The majority of LinkedIn users seem to have on the order of 100 connections once they get setup. Your “in” list consists mostly of current and past colleagues, perhaps some classmates or other chums, etc.

Although it is not specifically advertised this way and has many other valuable features, I think of LinkedIn as primarily my cloud-based self-updating address book. It’s an address book in that I can easily search for your phone number or e-mail address once we connect. If I can’t remember or spell your last name, I can search by first name and anything else I can remember about you, like the name of an employer. And, as long as you take the few minutes to update your profile page and contact info each time you change jobs, we’ll never lose touch with each other. Wow!

I’ve used LinkedIn to easily reconnect with old friends as well as to stay connected to colleagues, friends, and pretty much anyone who hands me their business card. Although I also have an offline address book, that’s now much smaller than it used to be–and just for tracking those phone numbers and e-mail addresses that I use on a weekly or monthly basis.

There are smartphone apps for LinkedIn and I have one on my iPhone, but I rarely use it. I don’t visit LinkedIn every day or even every week. Instead I visit the LinkedIn website in little bursts–such as just after a conference–or when I want to find someone’s phone number. I’ve also turned off most of their automatic e-mails at this point, though those can be useful prompts when you’re just getting started.

You can view my public profile at If we’ve met somewhere (online or off), feel free to send me an invitation.

Twittermy own private specialized news service

Twitter is something completely different. In fact, it is hard to describe what twitter is. That’s partly because it is many different things to many different people. For example, I often hear people say they don’t use twitter because they don’t want to know what their friend Joe had for lunch. But I’ve been using Twitter almost two years and have never learned what anyone had for lunch there.

Thus rather than try to describe Twitter or its capabilities, I’ll just tell you how I use it as an engineer. I currently “follow” 276 twitter users. Just a handful of these are “friends”, though a larger set are “acquaintances”; most I’ve never met. When one of the users that I follow writes something (in the lingo, “tweets”), I see it in a timeline of recent posts. All of the posts are short text (maximum 140 characters). I usually check in on this timeline 1 or 2 times a day, at which point I scan them for interesting bits of information; except for sometimes following links to longer articles, this activity takes on the order of 15 minutes a day tops.

I DON’T follow users who tweet a lot–say more than ten times per day (a quick look suggests they collectively average less than one per day)–for long. And I DON’T follow users that tweet what they ate for lunch. In fact, I ONLY follow users that typically include a link in every tweet. That is, what they are doing is feeding me a headline of possible interest; if it is of interest and I have time, then I follow the link to read more.

The vast majority of the users I follow are in the embedded systems design community. Some are engineers. Some are marketers. Some sell tools that I use. Some are just in software or engineering more broadly. A few cover hobby interests of mine. The best tweeters always stay on topic, in their area of expertise–just as I try to do by posting from a narrower topic area than I read.

From reading these streams of short headlines I stay vastly more up to date on the technologies and products and subjects of most interest to me than was ever possible before. I’ve basically stopped reading newspaper websites and some blogs and read twitter instead. (But just like printed newspapers, when you don’t have time to keep up, the old stuff just drifts to the bottom of the stack where you may never get to it.)

By the way, I read and post Twitter messages almost exclusively from an app (Twitterific) on my iPhone. I hardly ever visit the Twitter website directly. I prefer the user experience of the app and can easily find spare minutes to read from my phone while away from my desk.

You can view a timeline of my tweets at If you find the kinds of links I post there interesting, feel free to “follow” me. Unlike most other social networking services, you can follow anyone on Twitter just for knowing their handle.

Deliciousmy Internet memory book

Delicious is an Internet bookmarking service that can be social if you want it to be. By bookmarking service I mean that it’s an alternative to the long list of bookmarks you’ve probably been keeping in your browser.

Rather, as I come across interesting web pages during Internet research, I save those I think I may want to come back to sometime later in delicious. There are a number of advantages of keeping bookmarks in this way:

  • you can add notes to each bookmark
  • you can categorize (“tag”) each bookmark in as many ways as you want (e.g., “embedded” + “bloggers”)
  • you can search for a previous bookmark by keyword or tag
  • your bookmarks are not tied to a specific browser on a specific computer

After using Delicious for more than five years, I now keep just 12 bookmarks in my web browser. These are links that I use daily or weekly. One of those is a shortcut to add the page I’m on to delicious; another to my delicious history.

Delicious can be social in that you can easily share links with friends and see what’s popular across all users and things like that. I never use any of those features. (For one thing, what’s popular on the whole site never includes the stuff about embedded software that I’m most passionate about.) But though I don’t connect to other delicious users much I do make the majority of my bookmarks public–so you can browse or search them too.

You can see my public bookmarks at

Please share your experiences with social networking and suggestions for other useful services in the comments below. (I do use Facebook, by the way, but not for professional purposes.)