- Real-Time Operating Systems (RTOS)
- Real-Time UML
- General UML
- Object-Oriented Techniques
- Real-Time and Embedded Systems
- C Programming
- C++ Programming
- Dependable Software
- Important Reads
- Papers and Documents
- This book deals with the fundamentals of operating systems for use in real-time embedded systems. It is aimed at those who wish to develop RTOS-based designs, using either commercial or free products.
Available from Amazon (Kindle version)
This book is suitable for:
- Engineers, scientists and mathematicians) moving into software systems.
- Professional and experienced software engineers who are entering the embedded field.
- Programmers who have little or no formal education in the underlying principles of software-based real-time systems.
The material covers the key ‘nuts and bolts’ of RTOS structures and usage (as you would expect, of course). In many cases, it shows how these are handled by practical real-time operating systems. After studying this, a beginner can see how to implement RTOS-based designs and should be confident to take on such work.
Now, that’s the easy part; the really challenging aspect is how to best structure the application software in the first place. If your design is poorly-structured then, no matter which RTOS you use, you are very likely to run into problems of reliability, performance, safety and maintainability. This is why the book places great emphasis on ways to structure the application software so that it can be effectively implemented using an RTOS.
- Designing Concurrent, Distributed, and Real-Time Applications with UML
This is an excellent book for applying UML to real-time systems. Its strength is in the design phase and has a good, pragmatic approach to using UML. We would consider it an intermediate-to-advanced text. It is not a book to learn UML from.
- Doing Hard Time: Developing Real-Time Systems with UML, Objects, Frameworks, and Patterns
Powel Douglass, Bruce
A book best suited to the undergraduate or someone not familiar with real-time systems. Good coverage of OO ideas, but a bit heavy on the use of patterns, etc. Not our favourite book, but many people really like it. Probably complements Gomaa’s book as it is a beginner-to-intermediate text.
- Real-Time UML Developing Efficient Objects for Embedded Systems,
Powel Douglass, Bruce
Probably not worth buying as most of the material is contained within the previous book.
- UML Distilled: A Brief Guide to the Standard Object Modelling Language – 2nd Edition
Fowler M. and Scott K.
Probably still the best overview book on UML (though contains little specific real-time material). Only 200+ pages, so not a tome.
- The Unified Modelling Language User Guide
Booch et al
A comprehensive tutorial on UML, though the real-time aspects are limited. There are mixed reactions to this book but (in our opinion) it is well and clearly written.
- The Unified Modelling Language Reference Guide
Rumbaugh et. al.
A comprehensive encyclopaedia of UML v1.3. Includes a CD-ROM with a hyperlinked version of the book.
- The Unified Software Development Process
Jacobson et al
A useful book that demonstrates how the different parts of UML fit together for software development processes
- Writing Effective Use Cases
Currently the best coverage of the basics and applications of use cases. An essential read for anyone trying to make use cases work.
- Design Patterns - Elements of Reusable Object-Oriented Software
Gamma, E. et al,
The book that started the pattern wave. This book is predominately aimed at the designer/developer. Anyone looking to implement UML designs should read this book. However, you will need a reasonable knowledge of an OO language (specifically C++, Java or Smalltalk) to understand the example code. This book is referred to as the GoF (Gang of Four) book.
- Pattern-Oriented Software Architecture: A System of Patterns (Volume 1)
Buschmann, F. et. al.
John Wiley & Sons
Probably a better introduction to patterns than the GoF book (above), but also a useful companion. The difference between this and the GoF book is that this covers three different levels of patterns (architectural, design and language-specific) whereas the GoF book is theds to mix these.
- Object-Oriented Software Engineering - A Use Case Driven Approach
Jacobson, I et al,
The book that defined “Use cases” and set the foundation for the Rational Unified Process (RUP). It is still a very good book and shows how to use the Jacobson’s Interface-Control-Entity stereotypes in the UML Profile on software design.
- Using CRC Cards,
A book covering the “Class-Responsibility-Collaboration” technique for object analysis and design. Borrow it rather than buying it if possible.
- Designing Object-Oriented Software,
Wirfs-Brock R. et al,
Given its published date, this is still a very readable book. It brought the ideas of CRC and Responsibility Driven Design (RDD) to the mainstream audience.
- Real-Time Object-Oriented Modeling
Selic et. al.
John Wiley & Sons, Inc.
If you are trying to understand Rational Rose-RT (Real-Time), then this book will fill in the gaps.
- Component Software: Beyond Object-Oriented Programming
Szyperski takes a difficult subject and makes it appear simple. An outstanding introduction to the world of components in a jargon-free, pragmatic approach. Thinking about reuse? This covers a lot of the sticky areas when try to build practical component-based software.
- Object-Oriented Metrics: Measures of Complexity
A very extensive coverage of the use of metrics for OO projects.
- Software Engineering for Real-Time Systems
A definitive text for any embedded real-time software developer.
- Real-Time Software Systems,
This gives coverage of both structured (data-flow) and OO design techniques.
- Real-Time Systems Design and Analysis - An Engineers Handbook, 2nd Edition.
IEEE Press, NJ.
ISBN 0780 334000
Might at first seem somewhat old as it has relatively little coverage of OO issues. An underrated book with a very strong embedded real-time focus.
- Front Panel: Designing Software for Embedded User Interfaces
A book looking at user interfaces from the perspective of the embedded system. Uses the MicroC/OS-II RTOS for example code. Also coverage of C++ for embedded systems.
- Small Memory Software: Patterns for Systems with limited memory
Weir, C. & Nobel, J.
By small memory, they mean PDA (Personal Digital Assistant) not your 8051! In addition, the code is C++ and not C based. It covers areas such as small data structures, memory allocation, compression, and secondary storage. However, for anyone doing embedded development and using a Real-Time Operating System, then this book should prove very useful.
- MicroC/OS-II: The Real-Time Kernel
Labrosse, Jean J.
A book to expose the inner workings of a real-time operating system. All code supplied on a CD-ROM and written in C. The kernel has been ported to many platforms. This kernel is also used by a number of other books.
- TCP/IP Lean: Web Servers for Embedded Systems
Want to see how to put a web server on a PIC? The book is hard going (a lot of C code which can be quite difficult to follow), but it is a far easier introduction to TCP/IP and web servers than more traditional texts.
- Patterns for Time Triggered Embedded Systems: Building reliable applications with the 8051 family of microcontrollers
Pont, Michael J.
Everything you have ever wanted to know about the 8051 and more. Exactly 1000 pages!
- An Introduction to the Design of Small-Scale Embedded Systems
A good coverage of the principles of embedded systems with small processors (PIC, 80C51, 68HC05/08). Not a code book. An undergraduate text, but may be useful to a pure software person who wants to understand the embedded environment better.
- An Embedded Software Primer
Simon, David E.
A book appropriate for someone with little or no experience in programming embedded systems. Uses the MicroC/OS-II operating system for examples. All code is in C.
- The C Programming Language - ANSI C Version, 2nd Ed.
Kernigan B.W. and Richie D.M.,
Prentice-Hall Software Series,
The definitive book by the creators of the language. Still the major reference book for many C programmers. Not a book to learn C from, but a useful reference.
- C Traps and Pitfalls
Published in 1989 and still one of the “must read” books for the new C programmer. It is the sort of book that you may read only once, so borrow it if possible. But still a good book to have on your bookshelf. After completing our C programming course, it is the first book we always advise people to read.
- Expert C Programming, Deep C Secrets,
van der Linden, P.,
There are a number of “advanced” C books. This is our particular favourite. The writing style makes it easy to read, there is good use of humour, and it has been well thought through. We cannot recommend it highly enough.
- Safer-C: Developing Software for High-integrity and Safety-critical Systems
If you are a professional programmer using C in safety related applications and you haven’t read this book, then shame on you! All embedded software engineers using C should read this. Go out and buy it now.
- The Standard C Library,
This book does a number of things. Firstly, it teaches you everything you have ever wanted to know about the C Standard Library. Secondly, it teaches you a lot about how to write and test libraries. Finally, it has a full source description of the library that has some very impressive C code.
- Guidelines for the use of the C Language in Vehicle Based Software
The Motor Industry Research Association
A very good starting point for a company based C coding guidelines. However, also see http://www.knosof.co.uk/misracom.html for some useful comments on the guidelines.
- The C++ Programming Language, 3rd Ed.,
The definitive book by the creator of the language. Still the bible for most C++ programmers. The 3rd Edition is a significant improvement from the first two. Though it is still not a book to learn C++ from.
- C++ Primer, 3rd Ed.,
Lippman S.B. and Lajoie J.,
An Alternative to Stroustrup for many people. Personally, I found it very hard going.
- Effective C++, 2nd Ed.,
This is the book we always advise as the first book to read after doing a C++ course. Packed full of guidelines for writing good C++.
- More Effective C++
Do not attempt to read this until you have through the first of Meyers’ books. Still a very good read.
- Effective C++ CD-ROM
A CD based version of Meyer’s two “Effective” books.
- The C++ Standard Library: A Tutorial and Reference
Josuttis, Nicolai M.
Until this book appeared, coverage of the Standard Library tended to be at the back of C++ programming books (e.g. both Stroustrup and Lippman have sections on the Standard Library), usually being very poor. This is another “must have” book if you are using the C++ Standard Library.
- Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
As with the other Meyers’ books, there is a wealth of pragmatic useful information contained in these pages. A good complement to Josuttis’ book.
- Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
Think you’re good at C++? Read it and weep. Alternatively check out Sutters “Guru of the Week” website.
- Efficient C++
Bulka, D. & Mayhew, D.
Many C programmers do not move to C++ as they believe it is an inherently slow and fat language. This excellent book demonstrates how to write good, efficient and highly performing C++ code. We would consider this an intermediate-to-advanced book. A “must” read for anyone using C++ in the real-time field.
- Large Scale C++ Software Design
Lakos, John S.
This book is slightly dated as it pre-dates namespaces, templates, etc. However, it has some gems of information on how to reduce coupling at both design and build time (if it was written today it would be a “pattern” book). Also, as it pre-dates namespaces, etc. EC++ programmers will find it a very practical text.
- The Design and Evolution of C++
If you are interested in how the language became what it is then this is a fascinating read (e.g. what is the representation of the NULL pointer?).
- The Annotated C++ Reference Manual,
Ellis M.A. and Stroustrup B.
A useful book in the sense that many other books reference this when clarifying certain points. It is a good complement to a general C++ text.
- C++ Templates: The Complete Guide
Vandvoorde, D. and Josuttis, N.M.
The book you have probably been waiting for. New compliers have dramatically improved their support of templates. This book simply and easily guides you through the use of templates. Extremely well written and useful.
- Modern C++ Design: Generic Programming and Design Patterns Applied
We would recommend reading the C++ Templates complete guide before tackling this book. There is a certain amount of overlap between the two, but this goes much, much deeper. You come away with a mixture of awe and terror based on what you can do with C++ templates.
- Safeware - System Safety and Computers
An absolute must for anyone who needs to develop software with any amount of safety requirements.
- Computer Related Risks
Neumann is the moderator of the RISKS news forum. In this book he has collected together over 15 years worth of computer related failure (including the original sources). This is just a great read to appreciate how many ways software systems can fail.
- Digital Woes - Why We Should Not Depend on Software,
An excellent thought-provoking book which requires little in the way of software knowledge to understand its message. We recommend it to anybody striving to bring professionalism to software development.
- Software failure: management failure,
This book is a collection of (mostly) sad stories concerning project failures. It should be compulsory reading for anybody taking up a software project management role for the first time (and maybe even a few practising managers?).
- The Mythical Man Month
If you are a professional software engineer and you haven’t read this, shame on you (again?). First written over 25 years ago (recently re-released) it is still as good a read now as it was then. As they say “Buy it, read it, use it”.
- A Discipline for Software Engineering
Humphrey, Watts S.
Humphrey is best known for the development of the Capability Maturity Model (CMM). This is a scaled down version for the individual. It teaches you habits and techniques to help plan, track, and analyse your own software development
- Software Engineering: A Practitioner’s Approach (European Edition) – Fifth Edition
Pressman, Roger S
A comprehensive coverage of the field of software engineering. An excellent reference text though not always easy to navigate around.
- Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software
Smith, C.U. & Williams, L.G.
If you are in the field of performance engineering then you will already know Connie Smith’s name. This book supersedes her previous (superb) book on Software Performance Engineering (SPE). It is up-to-date and uses UML notation to describe the subject area.
- The psychology of everyday things
Norman, Donald A.
Basic Books Inc.
This is an outstanding book concerning how things are designed and how they ought to be designed. It is highly readable, extremely useful and full of common-sense. We don’t normally feature ‘old’ books but it is worth trying to track this one down via your library.
Back to top
- Miller, G.A., The Magical Number Seven, Plus or Minus Two, Psychological Review, Vol.63, Part 2, pp81-97, March 1956.
- Beck, K and Cunningham, W. A laboratory for teaching object-oriented thinking, proceedings OOPSLA’89, pp1-6, October 1989.
- Leveson, Nancy. “Intent Specifications: An Approach to Building Human-Centered Specifications”, IEEE Trans. on Software Engineering, January 2000.
Real-Time Embeddedd Software Websites
- Guru of the week – Herb Sutter
- Scott Myers
- Alistar Cockburn – Use cases
- Stroustrup’s home page
- How to write Unmaintanable Code – an excellent read and widely practiced
- Embedded C++
- Nancy Leveson’s Home Page
- Software Engineering Institute
- MicroC/OS-II Home Page
- Design Pattern Repository
- Objects by Design: List of Free and Commercial UML tools (including Linux platform)
- C and C++ Style Guides
- IEEE Computer Society Technical Committee on Real-Time Systems (TCRTS).
Usenet real-time newsgroup
News: comp.realtime; comp.arch.embedded