Real-Time Operating Systems (RTOS)

Real-Time Operating Systems (RTOS)

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.

Cooling, Jim. Lindentree Associates. Available from Amazon (Kindle version). 2014

This book is suitable for: 

  • Students
  • 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. 

Real-Time UML

Designing Concurrent, Distributed, and Real-Time Applications with UML.

Gomaa, Hassan. Addison-Wesley. ISBN 0-201-65793-7. 2000
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. Addison-Wesley. ISBN 0-201-49837-5
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. Addison-Wesley. ISBN 0-201-32579-9. 1998.
Probably not worth buying as most of the material is contained within the previous book.

General UML

UML Distilled: A Brief Guide to the Standard Object Modelling Language – 2nd Edition

Fowler M. and Scott K. Addison-Wesley. ISBN 0-201-65783-X. 1999.
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. Addison-Wesley. ISBN 0-201-57168-4. 1999
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. Addison-Wesley. ISBN 0-201-30998-X. 1999
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. Addison-Wesley. ISBN 0-201-57169-2. 1999
A useful book that demonstrates how the different parts of UML fit together for software development processes

Writing Effective Use Cases

Cockburn, Alistair. Addison-Wesley. ISBN 0-201-70225-8. 2001
Currently the best coverage of the basics and applications of use cases. An essential read for anyone trying to make use cases work.

Object-Oriented Techniques

Design Patterns - Elements of Reusable Object-Oriented Software

Gamma, E. et al. Addison-Wesley. ISBN 0-201-63361-2. 1995.
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. ISBN 0-471-95869-7. 1996

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. Addison-Wesley. ISBN 0-201-54435-0. 1992.
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

Wilkinson, N.M.. SIGS BOOKS. ISBN 1-884842-07-0. 1995.
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. Prentice Hall. ISBN 0-13-629825-7. 1990.
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. ISBN 0-471-59917-4. 1994
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, Clemens. Addison-Wesley. ISBN. 998
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

Henderson-Sellers, Brian. Prentice Hall. ISBN 0-13-239872-9. 1996
A very extensive coverage of the use of metrics for OO projects.

Real-Time and Embedded Systems

Software Engineering for Real-Time Systems

Cooling, Jim. Addison-Wesley. ISBN 0-201-59620-2. 2003
A definitive text for any embedded real-time software developer. 

Real-Time Software Systems

Cooling J.E. ITC Press. ISBN 1-85032-274-0. 1997.
This gives coverage of both structured (data-flow) and OO design techniques. 

Real-Time Systems Design and Analysis - An Engineers Handbook,  2nd Edition.

Laplante, P.A. IEEE Press, NJ. ISBN 0780 334000. 1997
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

Murphy, Niall. R&D Books. ISBN 0-87930-528-2. 1998
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. Addison-Wesley. ISBN 0-201-59607-5. 2001
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. R&D Books. ISBN 0-87930-543-6. 1999
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

Bentham, Jeremy. CMP Books. ISBN 1-929629-11-7. 2000
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. Addison-Wesley. ISBN 0-201-33138-1. 2001

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

Wilmshurst, Tim. Palgrave. ISBN 0-333-92994-2. 2001
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. Addison-Wesley. ISBN 0-201-61569-X. 

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.

C Programming

The C Programming Language - ANSI C Version, 2nd Ed.

Kernigan B.W. and Richie D.M. Prentice-Hall Software Series. ISBN 0-13-110362-8. 1988.
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

Koenig, Andrew. Addison-Wesley. ISBN 0-201-17928-8. 1989
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. Addison-Wesley. ISBN 0-201-49841-3 
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

Hatton, Les. McGraw-Hill. ISBN 0-07-707640-0
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

Plauger, P.J. Prentice Hall. ISBN 13-131509-9 
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. ISBN 0-95-241569-0.
A very good starting point for a company based C coding guidelines. However, also see for some useful comments on the guidelines.  

C++ Programming

The C++ Programming Language, 3rd Ed.

Stroustrup B. Addison-Wesley. ISBN 0-20-88954-4. 1997.
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. Addison-Wesley. ISBN 0-201-82470-1. 1998.
An Alternative to Stroustrup for many people. Personally, I found it very hard going.

Effective C++, 2nd Ed.

Meyers S. Addison-Wesley. ISBN 0-201-92488-9. 1998.

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++

Meyers S. Addison-Wesley. ISBN 0-201-63371-X. 1996.
Do not attempt to read this until you have read 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. Addison-Wesley. ISBN 0-201-37926-0. 1999
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

Meyers, Scott. Addison-Wesley. ISBN 0-201-74962-9. 2001
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

Sutter, Herb. Addison-Wesley. ISBN 0-201-61562-2. 2000
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. Addison-Wesley. ISBN 0-201-37950-3. 1999
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. Addison-Wesley. ISBN: 0-201-63362-0. 1995 

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++

Stroustrup B. Addison-Wesley. ISBN 0-201-54330-3. 1994.
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. Addison-Wesley. ISBN 0-201-51459-1. 1990.
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. Addison-Wesley. ISBN 0-201-73484-2. 2002

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

Alexandrescu, Andrei. Addison-Wesley. ISBN 0-201-70431-5. 2001

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.

Dependable Software

Safeware - System Safety and Computers

Leveson, Nancy. Addison-Wesley. ISBN 0-201-11972-2. 1995.

An absolute must for anyone who needs to develop software with any amount of safety requirements.

Computer Related Risks

Neumann, P.G. Addison-Wesley. 0-201-55805-X. 1995.
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

Wiener, Ruth. Helix Books. ISBN 0-201-40796-5. 1994.
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

Flowers, Stephen. Wiley. ISBN 0-471-95113-7. 1996

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?).

Important Reads

The Mythical Man Month

Brooks, F. Addison-Wesley. 

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. Addison-Wesley. ISBN 0-201-54610-8. 1995
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. McGraw Hill. ISBN 0-07-709677-0. 2000

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. Addison-Wesley. ISBN 0-201-72229-1. 2002
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. ISBN 0-465-06709-3. 1988
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.

Real-Time Embeddedd Software Papers and Documents

Real-Time Embeddedd Software Websites

Usenet real-time newsgroup

News: comp.realtime; comp.arch.embedded

Real-Time Embedded Software Magazines