embedded software boot camp

Is a Smartphone an Embedded System?

Thursday, January 27th, 2011 by Michael Barr

When I wrote my first book about embedded programming, back in the late 1990’s, I carefully defined the term embedded system as follows:

An embedded system is a combination of computer hardware and software, and perhaps additional mechanical or other parts, designed to perform a dedicated function. In some cases, embedded systems are part of a larger system or product, as is the case of an anti-lock braking system in a car. Contrast with general-purpose computer.

I think this language still does a good job of capturing the difference between embedded and general-purpose computers. (In a sign of the times that is simultaneously uplifting and depressing to me, this exact language has been literally copied all over the Internet, mostly without any citation whatsoever.) But there have always been gray areas in the middle and the consumer electronics market is moving toward even greater blur.

Smartphones and tablet computers–like the Apple (Nasdaq:AAPL) iPhone and iPad, as well as the many Android-powered devices–clearly lie somewhere between embedded system and general purpose computer. Indeed, it has been helpful to me at times to think of Apple as a company that has profited by moving away from designing configurable and openable general purpose computers and toward designing more restricted and clearly physically closed embedded systems faster than its competitors.

So far this year, I’ve been finding time to play around with iPhone programming. (My first app has nothing to do with embedded systems, so won’t rate a mention in this blog even after it releases.) And I’m happy to report that in several ways the experience of writing iOS applications is similar to embedded programming. You program mostly in C (wrapped in a layer of Objective-C). And you must worry about writing code that uses the processor and memory efficiently. I feel right at home!

However, programming for iOS is also like programming for big general-purpose computers in that there are vast API libraries available to separate you from the hardware and low-level driver details. And there’s more memory and CPU available than in the vast majority of embedded systems.

Smartphones and tablet computers truly are at the crossroads between embedded systems and general purpose computers. If you are coming to them from the perspective of a firmware developer, you can think of them as merely very high end embedded systems. Or if you are coming from the world of general-purpose computing, you can think of them as resource-constrained computers reminiscent of an earlier era. Either way, you’re bound to find some things you like about these new programming platforms and others that you don’t.

P.S. I’ll have lots more to say about Objective-C in a later post.

Tags: , ,

3 Responses to “Is a Smartphone an Embedded System?”

  1. Michael – Enjoyed your topic. Having spent considerable time working with with smartphones and tablets recently, they certainly feel like extremely complex embedded systems with exciting new features enabling them to be used in an even greater number of use cases. I can see a time when mobile embedded devices completely replace our traditional personal computing systems. I sure like burning new software in my iPhone better than my old embedded devices.

  2. Hi Mike

    I appreciate the broad definition of embedded systems. I use a similar definition as well. I see the iOS and Android smart phones as a sign of things to come to embedded systems, greater capability, complexity as well as more powerful hardware. As embedded engineers, we will (continue to) be called upon to build more and more complex systems. We’re going to need to grow our capabilities to help manage the growing device capabilities.


  3. Luke says:

    When do powerful general purpose embedded systems (like smartphones) become general purpose computers?

Leave a Reply