views:

642

answers:

8

What embedded programming/design books would you suggest? With embedded I mean near to hardware programming in ASM and C/C++. I'm looking something related to best practices in embedded programming/design. Operation system could be Linux, Real Time Linux or any other RTOS.

+2  A: 

Programming Embedded Systems in C and C++
http://www.amazon.com/Programming-Embedded-Systems-C/dp/1565923545

Robert Harvey
Please note that the mentioned book is 10 years old, but has a new revision called "Programming Embedded Systems: With C and GNU Development Tools": http://www.amazon.com/Programming-Embedded-Systems-Development-Tools/dp/0596009836
E Dominique
+1  A: 

I haven't actually read it, but the FreeRTOS eBook might be one way to go for learning about an RTOS. If you're not familiar, FreeRTOS is an open-source (modified GPL) RTOS, written in C and "Designed to be small, simple and easy to use." The eBook "describes both general multitasking concepts and FreeRTOS specifics", so it sounds like it could be a very worthwhile learning tool.

Mark Rushakoff
+2  A: 

I've only read Programming Embedded Systems, and I think it's a good, general guide, to embedded programming. It taught me how to think about programming embedded systems (think microcontrollers, not system-on-chips) and how it differs from PC programming.

The nice thing about this book is that it condenses a lot of important best practices, includes stuff like various ways of performing memory testing and so on.

There are surely many other good books, and I think two or three together would provide a very nice overlap in different aspects of embedded programming.

EDIT: I see there's a newer edition. Also, it seems you are asking for system on chip systems, which might be a bit different than pure microcontrollers -- so see if you can get further suggestions from others.

csl
I'm not particularly looking for system on chip solution. Maybe in some cases it could be a good alternative. Embedded programming is a very broad field. Yes your are right, I'm most likely looking a combination of books to get a good view from different perspectives to embedded programming.
Velho Kerho
+2  A: 

Jean Labrosse's Book on Embedded Building Blocks and there is a discussion on using an RTOS: Embedded Systems Building Blocks 2ND EDITION and his book on microCOS: MicroC/OS-II, The Real-Time Kernel 2ND EDITION

If you are going to be doing network programming: TCP/IP Lean: Web Servers for Embedded Systems

and if you need a simple UI, start with: Front Panel: Designing Software for Embedded User Interfaces

embedded Linux: Embedded Linux Primer: A Practical Real-World Approach

simon
+7  A: 

Here's my list:

Note that there are a ton of other books that deal with proper software design, design patterns, embedded hardware design, processor-specific details (ARM, MSP430, PIC, DSPs, etc.) but the books listed above all have information that is both broad & deep.

The first 3 books cover the ins & outs of firmware design. Watchdog timers, interrupts, drivers, re-entrancy, etc..

The Samek book is solid. Embedded systems are inherently event-driven (if the the event is a periodic timer). This book presents an entire framework (including a preemptive kernel) to handle hierarchical statecharts & event-driven systems.

The Labrosse book is a classic on real-time kernels / RTOS principles. I've seen it on the bookshelf of almost every engineer I visit. There is a brand-new book on his newest kernel, uC/OS-III but it's $200 (with board) and I haven't read it yet. His "Building Blocks" book is useful too, although it's a bit dated.

Dan
+1 Practical UML Statecharts - Miro
kenny
+1  A: 
"Practical UML Statecharts in C/C++" by Miro Samek.

this book safed my life some years ago. Not only does it tell you how implement event driven systems easily and robustly but also sheds light on the concepts of RTOS.

Code uses Sameks framework QF that i use for all my embedded designs since then.

Sameks site

Pankratz
A: 

To really be a good embedded programmer, you need to understand the hardware. So in addition to the books the others listed, I recommend The Art of Electronics by Horowitz and Hill.

In addition to that one, I suggest Troubleshooting Analog Circuits by Bob Pease. This one doesn't sound like it applies to software but I think it does. Pease does a very good job at explaining how to diagnose problems in complicated systems with a systematic approach - something every programmer needs to know.

JayM
A: 

I cannot recommend these books high enough:

Computer Systems: A Programmer's Perspective
Building Embedded Linux Systems 2nd Edition

Along with Programming Embedded Systems: With C and GNU Development Tools, 2nd Edition, which others have mentioned already. I am in total agreement on having a solid understanding of computer hardware/electronics also.

Dale Ragan