This in-depth technical course teaches programmers how to effectively use Ada for developing safety-critical and resource-constrained embedded software. It provides a comprehensive overview of low-level programming techniques, multi-language interfacing, interrupt handling, and interacting with common peripherals from an Ada-oriented perspective. Real code samples demonstrate techniques using the Ada Drivers Library.
Recommended for: Beginner to intermediate readers interested in embedded systems programming. This course provides a comprehensive introduction to embedded systems development using the Ada programming language, making it suitable for those new to Ada as well as those with some prior experience.
You will:
- Gain a solid understanding of the Ada programming language and its core features, including strong typing, modular programming, exceptions, and concurrency handling.
- Learn about the principles of low-level programming, such as querying implementation limits, specifying data representation, and working with unchecked programming constructs.
- Explore techniques for interfacing Ada with other programming languages, like C, for multi-language development in embedded systems.
- Study how to interact with various types of devices, including non-memory-mapped and memory-mapped devices, and perform dynamic address conversion.
- Discover the use of general-purpose code generators, as well as key language features like Volatile, Atomic, and Full_Access_Only.
- Understand the Ada language-defined interrupt model and learn how to handle interrupts effectively in embedded systems.
- Explore the Ada Drivers Library and how it can simplify the development of embedded software.
- Get an introduction to the SPARK subset of Ada and its use for formal verification and proving program integrity.
- Learn best practices and design patterns for writing robust and secure embedded software in Ada.
Detailed Overview
Designed to teach embedded systems programming in Ada, the content covers fundamental topics like customized data representations and memory mappings. It explores advanced concepts such as standardized foreign language interfacing, asynchronous interrupt processing, and interfacing with common devices. Throughout, readability, portability, and deterministic behavior are emphasized as Ada advantages. Real code leveraging the open-source Ada Drivers Library demonstrates accessing timers, ADC/DACs, displays and sensors. Systems programming idioms illustrate embedded challenges mapped directly to Ada’s standard features. The course equips programmers to develop robust, maintainable embedded applications in Ada across all levels, from lowest hardware abstraction to application layer. It serves as both a technical reference and learning guide for engineers seeking Ada’s safety/security advantages in critical projects. Introduction to Ada and embedded systems concepts is expected.
Citation
Patrick Rogers. Introduction to Embedded Systems Programming. AdaCore, 2024. https://learn.adacore.com/courses/intro-to-embedded-sys-prog/index.html.
Licensing
This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license. The full text of the license is available at https://creativecommons.org/licenses/by/4.0/.
Download

