Real‐time embedded software is responsible for observing and controlling systems in the physical world. Because of this role, it has timeliness requirements above and beyond that of traditional software: when it produces results is often as important the results themselves. The real‐time challenge, compounded with the usual difficulties of producing correct, complex software systems, makes producing real‐time embedded software all the more difficult.
Such software runs on digital computing hardware, is usually structured following principles from real‐time scheduling, and often implements algorithms derived from control theory. Effective development of such software requires knowledge of these three fields.
Low‐level concerns such as memory‐mapped I/O, polling, and interrupts are discussed first, followed by a discussion of how to simulate concurrency and PThreads. An introduction to real‐time scheduling theory follows, including a discussion of the rate‐monotonic approach. The article ends with a discussion of real‐time operating systems and the future of real‐time embedded software.