Hello, welcome to real-time systems. This is an introduction for the course: Real-Time Embedded Systems Concepts, and Practices. My name is Sam Siewart, and I'm your instructor for the course. I hope you will enjoy this, and I just want to give you an idea of what we're covering, what our learning objectives are, and what you'll be getting into. A little bit first on my background, and I hope you'll all take some time to meet your cohort students as well. You'll certainly have lots of opportunity to do that during peer reviews as well as working on your own, on assignments that are auto-graded, and quizzes, and so forth. This is the first course in a four-course series, so we'll talk a little bit about that as well. But first who I'm I, why I'm I teaching this? Well, first of all it's based on 24 years in industry working on real-time embedded systems. I spent 12 years working first at NASA Johnson Space Center, I worked on shuttle ascent and entry guidance, flight software and mission control. I specifically worked on some features like transatlantic abort for the shuttle. I then went on to work at University of Colorado with the NASA Jet Propulsion Lab while I was pursuing my advanced degrees, and also with Ball Aerospace in the Jet Propulsion Lab, and the Spitzer Space Telescope and that took 12 years. The next 12 years I was really working on telecommunications: datacom, telecom, storage and networking, embedded systems and digital video. That gave me a nice balance of commercial experiences as well as large-scale kinds of systems that you find more in say, the government and a larger organizations like that. Throughout my career prime to joining academia about eight years ago, I really have worked on real-time instrumentation machine vision including the Spitzer Space Telescope, which was retired recently here in 2020. I've worked on unmanned aerial systems since obtaining my PhD in the year 2000. Off an on, I've worked on robotics at CU Boulder, arctic sensor systems at University of Alaska. Aerial robotics has been my main focus in my engagement with Embry-Riddle Aeronautical University. I have worked on software engineering at NASA Johnson and Jet Propulsion Lab, and the shuttle and deep-space programs. I've also worked from chip design level up on firmware as well as software with the Intel Corporation, Emulex which is now part of Broadcom I believe, and start-ups focused on I/O chips, networks, and storage in general. For the past eight years I've been in Academia, focused on research and teaching. Presently with the California State University as an Associate Professor in computer science, but also as an Associate Adjunct with University Colorado and a Co-founder of the embedded systems engineering program at the University of Colorado in the year 2000 immediately following my PhD work. For the years between 2014 and 2020 at Embry-Riddle Aeronautical where I'm still an Associate Adjunct, Professor in computer and software engineering. I also have done some consulting and graphics, storage, and networking UAS and UAV. What are you going to learn in this course? That's probably really what you want to know. Hopefully, I have convinced you that I'm qualified to present this material to you from not only a theoretical and conceptual viewpoint, but from a hands-on practice experience viewpoint. My goal in this first course is to get you to a beginning practitioner level. If you take subsequent courses in the series, upon completion of the series be an intermediate to advanced practitioner, ready to perhaps dig into more in-depth research or research and development, if you complete the entire series. If you take just this one course as a beginning practitioner, you'll know quite a bit more and be able to work and collaborate with others who maybe make this more of their primary discipline. This first course is great, so that you really know what real-time systems are and how they're different from non real-time. First of all, we cover options for real-time systems, cyclic executives, real-time operating systems, and traditional operating systems with real-time extensions. The course takes an approach of the last option, so if you acquire a Raspberry Pi and you use that running Linux and use the POSIX real-time extensions. The reason we do that is that's the most convenient for students working at home and taking this course asynchronously. There is material that we've used at The University Of Colorado for VxWorks, RTOS that you will also find in the optional textbook I have, that you can purchase for this course, and there are examples of cyclic executives throughout the course. You'll learn terminology, the challenges of real-time systems, and how to deal with timing constraints and performance that are deadline oriented as opposed to throughput oriented. You will be familiar with not only the basic concepts, but rate monotonic concepts and principles, specifically for best efforts systems, soft real-time and hard real-time. You'll learn how to put into practice rate monotonic scheduling, make use of the rate monotonic least upper bound, perform timing analysis, and make use of the POSIX real-time extensions for general operating systems. Found in quite a few operating systems, including FreeBSD, Linux, Oracle, Solaris. There are a number of options, we use Linux mostly because of convenience and availability and to keep you focused on learning, especially in this first course, the basic concepts and practices. But as we go through this series, you use the same platform, and we just dig deeper. What you learn could also be easily applied to other types of platforms which will be covered as we go through the series. I always point out you have other options like cyclic executive on a smaller more deeply embedded micro, as well as an RTOS or the approach we're taking. You will know by the end of this course what it means to use a priority preemptive run to completion scheduler, which is quite different from fair scheduling. In Linux, that's called SCHED_FIFO, and in POSIX real-time in general. Any POSIX real-time compliant operating system, you'll learn about the difference between interference and blocking and the challenges of dealing with that, fixed priority and dynamic priority options for software services. For completeness, we'll talk about hardware options where you use no software as well, that is a possibility. We'll talk about coding practices on Linux with POSIX real-time extensions of the nitty gritty, the details of how do I code services, will have a number of code walk-throughs. Some of them as part of the material built-in in the material, some of them as optional code walk-throughs that may help you as you implement code to address the assignments we have, and in the final course, the project that we have for you. Use of rate monotonic analysis on multi-core systems. This is really important today, many systems are multi-core today. This helps, but it also adds extra challenges. Then finally methods of test and verification. In the series we go deeper on each one of these topics. If you take the first course you should have an introduction basically to everything you need to know about real-time systems. Then if you complete the whole series you'll go in depth on all of these areas. Let's talk about the series for a moment since this is the first course in the series. The series is four courses, and these are really high-level statements of learning objectives. Of course from the first course you'll have a good understanding of rate monotonic concepts and principles. In the second course we going deeper into the math models and we look in more in depth not only at hand timing analysis, but automated methods for timing analysis. We really dig into theory and analysis methods deeper in the second course compared to the first course which is more focused on concepts and basic practices. Overall, we take a view in by the time you complete the two courses in the series of the hardware/software interface as a resource view. In other words how do I effectively use processing, memory, IO in a power efficient manner with limitations that I may have for things like flash storage. That is a fundamental view of the hardware/software interface when we talk about the hardware and software and how you define that interface and how you manage it and so forth. Throughout the series, we remind you about implementation methods including cyclic executive, RTOS, and the real-time extensions to a traditional OS. The fourth option that's always implied is no software, solve all of the real-time problems with hardware we'll mention that throughout the course. But this course is focused on software working with hardware rather than hardware only. Our service design focus is on software services, but we will talk about state machines and the possibility of defining your services as state machines where they could be, for example FPGA implementations rather than software implementations. Hardware architectures for real time systems is covered more in the third course of the series as well as device interfacing, the mission critical systems. The third course in the series is more focused on design, whereas the first two are focused on first basic concepts and practices, theory and analysis, then we move into design. The fourth course in the series asks you to build what sounds like simple working system called a synchronome using machine vision in real-time. But it is actually fairly challenging, so much more challenging than it first appears. It's certainly not impossible. I've had many students be completely successful in implementing it. Most are successful with the simple one hertz goal that we have for machine vision, and I would say maybe only 10 percent aren't successful with the 10 hertz goal that we have for machine vision. It's a good challenge but it's certainly not impossible. But either way you learn to put theory into practice and you really in the final course learn to use methods of validation and verification, real-time requirements, and timing constraints to get something to work that you've built yourself. If you go through the entire series, you can really consider yourself an intermediate to advanced practitioner who has some experience building a system. Those are our goals and I hope you enjoy this course. I hope you consider staying with us for all of the courses in the series. Thank you very much.