CMPE 117: Embedded Software Catalog copy CE117. Embedded Software. S Introduction to software design for embedded systems. Emphasis on real-time embedded systems as follows: fundamentals of scheduling for real-time systems, real-time operating systems, and real-time protocols for distributed real-time systems; time-triggered and event-triggered paradigms for embedded software development, their tradeoffs, and languages and tools for development of embedded software. Prerequisite(s): Computer Science 111. Enrollment limited to 50. L. DeAlfaro Explanation of prerequisites CMPS 111: Operating systems. Students need to have a basic understanding of the notions of process, (non-real-time) scheduling, mutual exclusion, and distributed processing. Required skills to pass the course. 1. Understanding of the main paradigms used in developing software that interacts with its environment (via device drivers), and in particular, of the event-triggered and the time-triggered paradigms. 2. Ability to evaluate the feasibility and performance of real-time scheduling algorithms, including algorithms for the scheduling of aperiodic, periodic, and mixed tasks. 3. Ability to code multi-tasking real-time code that handles the communication between embedded devices, as well as control tasks on each device. 4. Ability to develop code in high-level languages for embedded software/hardware codesign, such as Esterel. Core topics (must be taught) 1. Time-triggered vs. event-triggered embedded systems. 2. Servicing interrupts: principles of real-time device drivers. 3. Aperiodic task scheduling. 4. Periodic task scheduling. 5. Scheduling with precedence constraints. 6. Programming multi-tasking real-time software. 7. Synchronous languages for embedded design, and the Esterel language. 8. Distributed embedded systems: tradeoffs and implementation. 9. Introduction to hardware/software codesign. 10. Achieving consensus and shared knowledge in distributed embedded systems. Optional topics 1. Power management in embedded systems. 2. Real-time networking protocols: TTP, CAN bus. 3. Fault-tolerance and reliability in embedded systems. 4. Introduction to embedded software verification. 5. Tools for embedded software design. 6. Time distribution and synchronization in distributed embedded systems 7. Matlab toolsets: stateflow, simulink. Core lab exercises 1. Coding for the Lego Mindstorms (C language) 2. Smart Mindstorm light seeker robot (C language) 3. Ad-hoc networking with the Lego Mindstorms (C language) 4. The light seeker revisited (Esterel language) Optional lab exercises 1. Coordinating a swarm of robots to achieve a task (C language) 2. A robot pet (Esterel) Related courses: CMPE 121/L: Microprocessor System Design. This course provides an introduction to the hardware design of microprocessor systems, as well as on the software aspect of low-level device-driver programming. This course is a good complement to CMPE 117 (Embedded Software), emphasizing the hardware and low-level software design of embedded systems. It would almost be appropriate to list CMPE 121 among the prerequisites of CMPE 117, except for the fact that, in the course and in the lab for 117, there is no need to be specifically acquainted with hardware design or assembly langauge programming. Hence, the course is a (stronly suggested) complement, rather than a prerequisite. CMPE 123/L: Advanced Microprocessor System Design. This course complements CMPE 117 (Embedded Software), presenting the hardware side of embedded system design. Texts "Hard Real-Time Computing Systems: Predictable Scheduling Algorithms & Applications" by Giorgio C. Buttazzo. Kluwer Academic Publishers, 1997. This is a very good book on real-time scheduling, that illustrates all the basic algorithms (and many non-basic ones) in a systematic way, proving also their optimality with respect to various criteria. It is very good pedagogically for the students to be able to see how the proofs are structured. The book also covers principles of real-time operating system kernel design, and principles of device driver design. This is the main book for the course; the first half is covered in detail, while the latter part is followed only in a sketchy way as the class moves on to new topics. "The Esterel V5 Language Primer" by Gerard Berry, 1999. This text, made available in electronic format, is the standard introduction to programming in Esterel. Esterel is a language used for embedded software/hardware design and codesign, and it is often used in the development of software/hardware for control systems. It is a good example of a novel class of high-level languages for embedded systems that have been developed in the last ten years. Additionally, compilers for various embedded platforms are available, making possible to use Esterel in the lab. Optional Textbook: "Real-Time Systems: Design Principles for Distributed Embedded Applications" by Hermann Kopetz. Kluwer Academic Publishers, 1997. This is a book that emphasizes the time-triggered approach to embedded system design. The approach proposed in the book is the leading one for the design of high-reliability embedded software, such as the one used in cars, aircraft, transportation systems (whenever repeatability and reliability are paramount). The author is a leader both in academia and industry on the topic. The book is excellent, but somewhat narrowly focused. The course presents the content of some chapters, but the book is presently listed as optional for the course. Lecture notes are also distributed during the course, along with other suggested reading made available in electronic format. Prepared by Luca de Alfaro, 10/02 Revised by Luca de Alfaro, 11/03