We may earn an affiliate commission when you visit our partners.
Course image
Farhoud Hosseinpour

This course is all about practical programming and problem-solving!

After completing this course, you will have the knowledge to plan and set up a real-time system both on paper and in practice.

Read more

This course is all about practical programming and problem-solving!

After completing this course, you will have the knowledge to plan and set up a real-time system both on paper and in practice.

The course centers around the problem of achieving timing correctness in embedded systems, which means to guarantee that the system reacts within the real-time requirements.

Examples of such systems include airbags, emergency breaks, avionics, and also multi-media systems like video playback and QoS in web servers.

The course teaches how to plan real-time systems, in theory, using established mathematical proofs and how to implement them in practice by using the most common scheduling methods.

We also learn and how to program the system in the C language using the FreeRTOS real-time kernel.

Finally, we have a look at the future of real-time systems namely multi-core real-time systems!

This course focus on the learn-by-doing approach with many examples and real-world programming assignments.

We have 5 modules, each with a gentle graded quiz in the end and one peer-reviewed programming assignment.

In case you have no experience with C programming, please check you a practical course like:

https://www.coursera.org/learn/arduino-platform

The course is actually quite fun!

-Simon Holmbacka / Åbo Akademi University

Ideate. Innovate. Iterate with EIT Digital

Enroll now

What's inside

Syllabus

Introduction to Real-Time Systems
Here is where it all starts! We will make a brave attempt to start your future career in real-time systems! This week starts by learning the basic building stones in real-time systems and the system parameters required to successfully construct a real-time system. We introduce you to the corner stone of real-time systems, namely the scheduler – and its task in real-time schedules. You learn also what kind of real-time guarantees are needed in which systems. Concretely, you will learn (1) What is needed to create a real-time system (2) Where real-time requirements are needed. (3) The task and job structure and the parameters needed to schedule a task. (4) Difference between pre-emptive and non-pre-emptive tasks. This course is also part of a Blended Master Programme in Embedded Systems.
Read more
Static Scheduling
In this week we start to actually do some scheduling. We firstly have a look at the simplest type of scheduler – the clock driven scheduler. After this we deepen our learning with the fixed priority scheduler and the monotonic schedulers. We learn how the priorities are determined using these schedulers and we learn when/when not to use these schedulers. Secondly we learn how to determine if a system is overloaded in order to validate schedules without complete system simulation.Concretely, after attending this week you will be able to: (1) Schedule a set of tasks with the clock driven scheduler, with the fixed priority scheduler, with the monotonic schedulers. (2) Determine if a system is overloaded using the total-utilization method and the Urm method. (3) Program FreeRTOS to schedule a set of tasks using the fixed priority scheduler
Dynamic Scheduling
In the previous week we learned the limitations of the total-utilization method and the Urm method. We start this week off by extending these tests to tasks with short response times. The new method is also, as usual, used in practice! We then focus on improving the optimality of real-time schedules. This is done by learning the principles behind dynamic scheduling methods. Two new schedulers using the dynamic scheduling principle is learned and used in practice with a few examples; the LST scheduler and the EDF scheduler.Concretely, you will learn: (1) How to determine feasibility of a set of tasks using the time demand analysis method. (2) How to schedule a set of tasks using LST and EDF. (3) To determine when a dynamic scheduler is appropriate and when it is not appropriate.
Non-Periodic Jobs
All things are easy and nice when not caring about non-periodic jobs. When including non-periodic jobs, the schedulers must take these into account to make a feasible schedule, which we learn this week. The problem is that a non-periodic job can arrive at any time, even if a periodic job is already scheduled. We learn both how to optimize a schedule for non-periodic jobs and how to validate a schedule when non-periodic jobs arrive to the schedule. Concretely, we will learn: (1) How to use the slack stealing method to optimize a schedule with non-periodic jobs (2) How to use the LRT scheduler to optimize a schedule with non-periodic jobs (3) How to use the deferrable server to optimize a schedule with non-periodic jobs (4) Formally verify a schedule with non-periodic jobs
Real-Time Operating Systems
This week is what we all have been waiting for! We will deepen our learning of FreeRTOS, its kernel and the functionalities. We demonstrate the importance of predictable computer architectures for example when determining the context switch and factors influencing this overhead. As we head towards the future, we finish this course by introducing you to multi-core real-time systems and scheduling methods for multi-core real-time systems. Concretely, you will learn: (1) The internal mechanisms of FreeRTOS, for example mutexes/semaphores and message queues. (2) Multi-core computer architectures for real-time systems. (3) Multi-core scheduling methods.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Helps learners achieve timing correctness in embedded systems, which is needed in airbags, emergency breaks, and avionics
Explores mathematical proofs to plan real-time systems and uses the FreeRTOS real-time kernel to implement them
Introduces multi-core real-time systems and explores multi-core scheduling methods, which are important for the future of real-time systems
Provides hands-on practice through many examples and real-world programming assignments, which helps learners apply the concepts they learn
Led by Farhoud Hosseinpour, who is experienced in real-time systems
Requires familiarity with C programming

Save this course

Save Development of Real-Time Systems to your list so you can find it easily later:
Save

Reviews summary

Solid introduction to real-time systems

Learners say this Excellent, clear, very useful and well-rounded course provides an extensive practical knowledge of real-time systems fundamentals with engaging assignments, nice exercises, and meaningful examples. Though it's considered well-designed, some learners suggest improvements to the review system.
Course concepts are illustrated with real-world examples using FreeRTOS.
"It's one of the best courses I had. The most important thing is that possibility of illustrating the course theoretical concepts with real examples using a well-known OS such as FreeRTOS."
Learners believe this course is a great value.
"I would highly recommend this course to anyone looking to expand their knowledge and skills in "Development of Real-Time Systems". It was an excellent investment of my time and money, and I am confident that the skills I learned will serve me well in the future."
The assignments, including the programming assignments are engaging and complement the concepts well.
"Great course!It provides a lot of bases about scheduling in RTOS, with practical exercises of coding."
Course support and feedback can be slow.
"Considering that the course is quite old, the teacher moved away from Abo University (so it's not clear who should give support), what I did not like is th peer review mechanism. Sometimes you need to wait a long while to get feedbacks or to give some, considering that the population taking this course is quite small."
Speaking pace is good, but the language used is complex and delivery is unclear.
"Very useful information but it was difficult to follow at times."
"The material and the way of teaching also was too dry. The language used was far from 'easy to understand' and doesn't deliver the information easily."
Course covers task schedulers for real-time operating systems.
"The course focuses only on the part of real-time systems called task schedulers."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Development of Real-Time Systems with these activities:
Review Basic C Programming Concepts
Ensure a solid foundation by refreshing your C programming skills. This will help you confidently implement real-time scheduling algorithms and navigate the complexities of embedded systems.
Browse courses on C Programming
Show steps
  • Review online tutorials or books on C programming.
  • Solve coding challenges or practice problems.
  • Build a small C project to demonstrate your understanding.
Attend Industry Webinars on Real-Time Systems
Connect with professionals and gain insights into real-world applications of real-time systems. Webinars offer a valuable platform to expand your network and stay abreast of industry trends.
Show steps
  • Research upcoming industry webinars on real-time systems.
  • Register for relevant webinars and attend them.
Organize a Study Group for Real-Time Concepts
Enhance your understanding through collaboration. By forming a study group, you can engage in discussions, quiz each other, and collectively tackle challenging concepts.
Show steps
  • Find fellow students interested in forming a study group.
  • Establish regular meeting times and a dedicated study space.
  • Prepare discussion topics and assignments for each session.
Eight other activities
Expand to see all activities and additional details
Show all 11 activities
Virtual Study Group on Real-Time Systems
Join or form a virtual study group to discuss concepts, solve problems, and share knowledge with peers, fostering collaboration and deeper understanding.
Browse courses on Real-Time Systems
Show steps
  • Identify or establish a virtual study group through online platforms.
  • Set regular meeting times and establish a communication channel.
  • Prepare discussion topics and problems related to real-time systems.
  • Engage in active discussions, sharing perspectives and insights.
  • Encourage peer feedback and support in understanding complex concepts.
Practice Scheduling Simulation
Practice scheduling simulations to enhance understanding of scheduling methods and their impact on system performance.
Browse courses on Real-Time Systems
Show steps
  • Set up a simulation environment for a real-time system.
  • Define the system parameters, including tasks, resources, and timing constraints.
  • Implement different scheduling algorithms (e.g., fixed priority, dynamic priority).
  • Run simulations and analyze the performance of each algorithm.
  • Compare the results and identify the most effective scheduling algorithm for the given system.
  • Repeat the process for different system configurations and scenarios.
Online Tutorial on FreeRTOS
Follow guided tutorials to learn about the architecture, functionality, and application of FreeRTOS in real-time systems.
Browse courses on FreeRTOS
Show steps
  • Register for an online course or tutorial on FreeRTOS.
  • Complete the tutorial modules, covering topics such as task creation, synchronization, and interrupt handling.
  • Practice implementing FreeRTOS in a sample project.
  • Troubleshoot any issues encountered during the implementation.
  • Complete the tutorial assessment to demonstrate your understanding.
Implement a Real-Time Scheduler in C
Solidify your understanding of real-time scheduling concepts by implementing a scheduler in C. This will help you develop a deeper appreciation for the practical aspects of real-time system design.
Show steps
  • Review the concepts of real-time scheduling.
  • Choose a scheduling algorithm (e.g., Round-Robin, Priority-Based).
  • Design and implement the scheduler in C.
  • Test and debug your implementation.
Design a Real-Time System for a Specific Application
Apply course principles to design a real-time system for a specific application, considering factors such as timing constraints, resource utilization, and fault tolerance.
Browse courses on Scheduling
Show steps
  • Define the requirements and specifications for the real-time system.
  • Identify and analyze the system parameters, including tasks, resources, and timing constraints.
  • Select and implement appropriate scheduling algorithms.
  • Perform feasibility analysis to ensure the system meets the timing requirements.
  • Prepare a comprehensive design document outlining the system architecture, algorithms, and analysis results.
Participate in a Real-Time Systems Workshop
Immerse yourself in a hands-on workshop where you can apply your knowledge, collaborate with peers, and receive expert guidance. Workshops provide an intensive learning experience that can significantly enhance your understanding.
Browse courses on Scheduling Algorithms
Show steps
  • Research and identify suitable real-time systems workshops.
  • Apply and register for the workshop.
  • Actively participate in the workshop activities and discussions.
Explore Advanced Scheduling Techniques
Expand your knowledge by delving into more advanced scheduling techniques. This will prepare you for handling complex real-time systems that require sophisticated scheduling algorithms.
Show steps
  • Study research papers or online tutorials on advanced scheduling.
  • Implement a specific advanced scheduling algorithm in a simulated environment.
  • Analyze and compare the performance of different scheduling algorithms.
Develop a Whitepaper on Real-Time System Design
Synthesize your learning by creating a comprehensive whitepaper on real-time system design. This will challenge you to organize and articulate your knowledge, while also contributing to the broader understanding of the subject.
Browse courses on Scheduling Algorithms
Show steps
  • Research and gather information on real-time system design.
  • Organize and structure your whitepaper.
  • Write the whitepaper, ensuring clear and concise language.
  • Proofread and edit your whitepaper.

Career center

Learners who complete Development of Real-Time Systems will develop knowledge and skills that may be useful to these careers:
Real-Time Systems Engineer
A Real-Time Systems Engineer designs, develops, and maintains real-time systems. This course will help you build a foundation in the principles and practices of real-time systems engineering. You will learn how to plan and schedule real-time systems, and how to implement them using real-time operating systems.
Embedded Systems Engineer
An Embedded Systems Engineer develops and integrates hardware and software components into embedded systems. This course may be helpful in providing you with the skills to design and implement real-time operating systems and to schedule tasks and resources in embedded systems.
Software Engineer
A Software Engineer designs, develops, and maintains software systems. This course may be helpful in providing you with the skills to design and implement real-time software systems. You will learn how to schedule tasks and resources in real-time systems, and how to program real-time operating systems.
Hardware Engineer
A Hardware Engineer designs, develops, and maintains hardware systems. This course may be helpful in providing you with the skills to design and implement real-time hardware systems. You will learn how to design and test hardware components, and how to integrate them into real-time systems.
Maintenance Engineer
A Maintenance Engineer maintains and repairs software and hardware systems. This course may be helpful in providing you with the skills to maintain and repair real-time systems. You will learn how to diagnose and troubleshoot problems, and how to perform maintenance and repairs.
Systems Analyst
A Systems Analyst analyzes, designs, and implements information systems. This course may be helpful in providing you with the skills to analyze and design real-time systems. You will learn how to identify and prioritize requirements, and how to develop and evaluate system designs.
Systems Engineer
A Systems Engineer designs, develops, and integrates complex systems. This course may be helpful in providing you with the skills to design and integrate real-time systems. You will learn how to identify and prioritize requirements, and how to develop and evaluate system designs.
Quality Assurance Engineer
A Quality Assurance Engineer ensures that software and hardware systems meet quality standards. This course may be helpful in providing you with the skills to develop and implement quality assurance processes for real-time systems. You will learn how to identify and mitigate risks, and how to improve the quality of real-time systems.
Test Engineer
A Test Engineer tests and evaluates software and hardware systems. This course may be helpful in providing you with the skills to test and evaluate real-time systems. You will learn how to develop and execute test plans, and how to analyze and interpret test results.
Safety Engineer
A Safety Engineer designs and implements safety systems. This course may be helpful in providing you with the skills to design and implement safety systems for real-time systems. You will learn how to identify and mitigate hazards, and how to develop and evaluate safety systems.
Reliability Engineer
A Reliability Engineer ensures that software and hardware systems are reliable. This course may be helpful in providing you with the skills to develop and implement reliability processes for real-time systems. You will learn how to identify and mitigate risks, and how to improve the reliability of real-time systems.
Robotics Engineer
A Robotics Engineer designs, builds, and maintains robots. With your knowledge of real-time systems, you can ensure that a robot responds quickly and accurately to its environment. This course may be helpful in providing you with the skills to program robots to respond to sensor data in real time and to plan robot movements and trajectories.
Educator
An Educator teaches students about a particular subject. This course may be helpful in providing you with the skills to teach students about real-time systems. You will learn about the principles and practices of real-time systems engineering, and how to develop and deliver effective teaching materials.
Technical Writer
A Technical Writer creates and maintains technical documentation. This course may be helpful in providing you with the skills to create and maintain technical documentation for real-time systems. You will learn how to write user manuals, technical reports, and other technical documentation.
Project Manager
A Project Manager plans, organizes, and executes projects. This course may be helpful in providing you with the skills to manage real-time systems projects. You will learn how to plan and schedule projects, and how to manage risk and resources.

Reading list

We've selected 28 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Development of Real-Time Systems.
This introductory book on real-time systems covers theoretical foundations as well as practical applications. It will provide you with a good understanding of the fundamentals of real-time systems and help you apply those theories into practice.
Provides a comprehensive overview of real-time systems from a predictable approach. It will help you understand the different types of real-time systems and how to design and implement them in a predictable manner.
Comprehensive guide to real-time embedded systems. It covers a wide range of topics, including hardware and software design, scheduling algorithms, and performance evaluation.
Provides a comprehensive overview of real-time systems, including their design, analysis, and implementation. It valuable resource for anyone who wants to learn more about this important topic.
This classic textbook offers a comprehensive treatment of real-time systems and programming, providing a solid foundation for further exploration.
Provides a comprehensive overview of real-time systems design and analysis. It will help you understand the different aspects of real-time systems design and analysis and how to design and implement real-time systems in a systematic manner.
Provides a comprehensive overview of real-time systems design. It will help you understand the different aspects of real-time systems design and how to design and implement real-time systems in a systematic manner.
Great introduction to embedded system design. It covers a wide range of topics, including hardware and software design, programming techniques, and debugging.
Explores the theoretical foundations and practical aspects of real-time programming, providing a deeper understanding of the concepts and techniques involved.
Comprehensive guide to embedded systems design using the ARM Cortex-M3 processor. It covers a wide range of topics, including hardware and software design, programming techniques, and debugging.
Provides a comprehensive overview of embedded systems, including hardware, software, and design techniques. It will help you understand the fundamental concepts of embedded systems and how to apply them in practice.
Classic text on computer architecture. It provides a comprehensive overview of the field, including topics such as instruction set architecture, memory hierarchy, and performance evaluation.
Great introduction to computer systems performance analysis. It covers a wide range of topics, including queuing theory, scheduling algorithms, and performance modeling.
Comprehensive guide to the ARM Cortex-M3 processor. It covers a wide range of topics, including hardware and software design, programming techniques, and debugging.
Great introduction to programming embedded systems. It covers a wide range of topics, including hardware and software design, programming languages, and debugging techniques.
Explores the use of Java in real-time systems, providing insights into the challenges and opportunities of Java-based real-time programming.
This practical guide focuses on C programming for embedded microcontrollers, complementing the course's emphasis on FreeRTOS programming.
With its emphasis on embedded real-time systems, this book complements the course by providing insights into the design and programming of such systems.
Serves as a valuable reference for those interested in the technical details of ARM Cortex-M microcontrollers, which are commonly used in embedded real-time systems.
Provides a practical guide to embedded software development in C, focusing on embedded systems programming techniques.
Provides a general understanding of operating systems concepts, which can be beneficial for grasping the foundations underlying real-time operating systems.
This widely-used textbook offers a comprehensive overview of operating systems, providing a broader context for understanding real-time systems.
This practical guide provides a comprehensive overview of embedded Linux programming, offering insights into its use in real-time systems.
Great introduction to operating systems concepts, including scheduling, memory management, and file systems. It is written in a clear and concise style, and it is suitable for both beginners and experienced programmers.
Provides a comprehensive overview of real-time systems design and analysis. It valuable resource for anyone who wants to learn more about this topic.
This textbook provides a well-rounded introduction to embedded systems, offering a broader perspective on the field and its applications.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Development of Real-Time Systems.
Real-Time Mission-Critical Systems Design
Capstone: Autonomous Runway Detection for IoT
Real-Time Embedded Systems Theory and Analysis
Software Engineering: Introduction
Building Applications with RISC-V and FreeRTOS
Asynchronism using .NET Core: Implement a banking system
Mastering RTOS: Hands on FreeRTOS and STM32Fx with...
AI Agentic Design Patterns with AutoGen
Building, Deploying, and Monitoring Your First Apache...
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser