Supplemental files and examples for this book can be found at http://examples.oreilly.com/9780596009830/. Please use a standard desktop web browser to access these files, as they may not be accessible from all ereader devices.
All code files or examples referenced in the book will be available online. For physical books that ship with an accompanying disc, whenever possible, weve posted all CD/DVD content. Note that while we provide as much of the media content as we are able via free download, we are sometimes limited by licensing restrictions. Please direct any questions or concerns to .
Foreword
If you mention the word embedded to most people, theyll assume youre talking about reporters in a war zone. Few dictionariesincluding the canonical Oxford English Dictionary link embedded to computer systems. Yet embedded systems underlie nearly all of the electronic devices used today, from cell phones to garage door openers to medical instruments. By now, its nearly impossible to build anything electronic without adding at least a small microprocessor and associated software.
Vendors produce some nine billion microprocessors every year. Perhaps 100 or 150 million of those go into PCs. Thats only about one percent of the units shipped. The other 99 percent go into embedded systems; clearly, this stealth business represents the very fabric of our highly technological society.
And use of these technologies will only increase. Solutions to looming environmental problems will surely rest on the smarter use of resources enabled by embedded systems. One only has to look at the network of 32-bit processors in Toyotas hybrid Prius to get a glimpse of the future.
Though prognostications are difficult, it is absolutely clear that consumers will continue to demand ever-brainier products requiring more microprocessors and huge increases in the corresponding software. Estimates suggest that the firmware content of most products doubles every 10 to 24 months. While the demand for more code is increasing, our productivity rates creep up only slowly. So its also clear that the industry will need more embedded systems people in order to meet the demand.
What skills will these people need? In the PC world, one must be a competent C/C++ programmer. But embedded developers must have a deep understanding of both the programming languages and the hardware itself; no one can design, code, and test an interrupt service routine, for instance, without knowing where the interrupts come from, how the hardware prioritizes them, the tricks behind servicing that hardware, and machine-level details about saving and preserving the systems context. A firmware developer must have detailed insight into the hardware implementation of his systems peripherals before he can write a single line of driver code.
In the PC world, the magic of the hardware is hidden behind an extensive API. In an embedded system, that API is always written by the engineers that are developing the product.
In this book, Michael Barr and Anthony Massa show how the software and hardware form a synergistic gestalt. They dont shy away from the intricacies of interrupts and I/O, or priority inversion and mutexes.
The authors appropriately demonstrate building embedded systems using a variety of open source tools, including the GNU compiler suite, which is a standard tool widely used in this industry. eCos and Linux, both free/open source products, are used to demonstrate small and large operating systems.
The original version of this book used an x86 target board, which has been replaced in this edition by an ARM-based product. Coincidently, as this volume was in production, Intel made an end-of-life announcement for all of its embedded x86 processors. Readers can be assured that the ARM will be around for a very long time, as its supported by an enormous infrastructure of vendors.
The hardware is inexpensive and easily available; the software is free. Together they represent the mainstream of embedded systems development. Readers can be sure theyll use these tools in the future.
Buy the development kit, read the book, and execute the examples. Youll get the hands-on experience that employers demand: building and working with real embedded applications.
Jack Ganssle
Preface
First figure out why you want the students to learn the subject and what you want them to know, and the method will result more or less by common sense.
Richard Feynman
Embedded software is in almost every electronic device in use today. There is software hidden away inside our watches, DVD players, mobile phones, antilock brakes, and even a few toasters. The military uses embedded software to guide missiles, detect enemy aircraft, and pilot UAVs. Communication satellites, deep-space probes, and many medical instruments wouldve been nearly impossible to create without it.
Someone has to write all that software, and there are tens of thousands of electrical engineers, computer scientists, and other professionals who actually do. We are two of them, and we know from our personal experiences just how hard it can be to learn the craft.
Each embedded system is unique, and the hardware is highly specialized to the application domain. As a result, embedded systems programming can be a widely varying experience and can take years to master. However, one common denominator across almost all embedded software development is the use of the C programming language. This book will teach you how to use C in any embedded system.
Even if you already know how to write embedded software, you can still learn a lot from this book. In addition to learning how to use C more effectively, youll also benefit from the detailed explanations and source code associated with common embedded software problems. Among the advanced topics covered in the book are memory testing and verification, device driver design and implementation, real-time operating system internals, and code optimization techniques.
Why We Wrote This Book
Each year, globally, approximately one new processor is manufactured per person. Thats more than six billion new processors each year, fewer than two percent of which are the Pentiums and PowerPCs at the heart of new personal computers. You may wonder whether there are really that many computers surrounding us. But we bet that within five minutes you can probably spot dozens of products in your own home that contain processors: televisions, stereos, MP3 players, coffee makers, alarm clocks, VCRs, DVD players, microwaves, dishwashers, remote controls, bread machines, digital watches, and so on. And those are just the personal possessionsmany more such devices are used at work. The fact that every one of those products contains not only a processor, but also software, is the impetus for this book.