What does professional embedded software development mean?
Based on the software architecture refined in the software design, you as a software developer implement (program) it in a structured, procedural, object-based or object-oriented manner using the programming language C or C++.
In doing so, you adhere to the architectural and design specifications as well as the programming guidelines (coding guidelines, Coding Style Guide) and confirm this through reviews or static code analysis tools. MISRA C and MISRA C++ These are sets of rules for programming safety-critical software in the automotive sector. These coding rules also serve as a reference in other fields, such as medical technology.
Coding of embedded and real-time software with Embedded C (EC) and C++ (EC++)
Embedded C (EC) and Embedded C++ (EC++) are not standalone standards, but merely describe the use of the programming languages C and C++ for coding embedded and real-time software.
Real-time (RT) means determinism (predictability). A distinction is made between hard real-time and soft real-time. With hard real-time, you guarantee adherence to your time constraints (e.g., deadlines, response times) in all cases, unlike with soft real-time. What about soft real-time? You develop real-time strategies to meet real-time requirements.
In embedded and real-time programming, as a software developer, you know exactly what you are programming and how: Where is a variable located, and what is the real-time behavior of the software? You understand the consequences for your target and your toolchain (compiler, linker, locator) at the machine code level (assembler code). As an embedded and real-time software developer, you use programming constructs from the C and C++ programming languages that support typical quality characteristics, such as low resource consumption, high performance, guaranteed response times, functional safety, and reliability, while avoiding constructs that contradict these goals.
Low-level programming
In low-level programming, you use Embedded C (EC) and Embedded C++ (EC++) to directly access the peripheral registers of the hardware (driver programming). You also gain expertise in the specifics of interrupt programming.
Real-time operating systems (RTOS)
For simple and sequential software, you program the runtime architecture in an endless loop (while(1), a "super loop," or a "main loop"). If the software is more complex and you reach the limits of manageability for controlling the software flow using an endless loop, then the use of a... Embedded operating system (Rreal-tim Operating Ssystem RTOS).
To achieve this, you divide the software into individual functions (so-called tasks), identify (quasi-)parallel execution paths, and define repetition times, timeout times, and data dependencies for your software functions (tasks). The advantage of an operating system is that operating system services are available for all control, communication, and monitoring functions. For example, when defining each task (independent software function), you can specify when this task must be processed and whether the processing occurs on time (automatic monitoring of the task timeout). As a software developer or software architect, you select the appropriate operating system (OS) based on system requirements, operating system selection criteria (e.g., single-core or multi-core RTOS, with or without a memory protection service, etc.), and an operating system list (overview). You distinguish between two types of operating systems: embedded operating systems and real-time operating systems.
Examples of operating systems
Embedded Linux, RT Linux, Linux Kernel, FreeRTOS and CMSIS-RTOS as an ARM operating system.
What is the best operating system?
There is no single "best" operating system, except perhaps for your specific application. Not every operating system is automatically real-time capable. You can also choose to design and program your own operating system or mini-operating system.
Use of the operating system
When using the operating system, you as a software developer will successfully meet the challenges if you know the basics, components, definitions, tasks, functionalities and application use of the following operating system mechanisms:
Process management, task management, thread management, scheduling methods (cooperative scheduling, preemptive, time-based, time-triggered, priority-based, time-slice, round-robin, earliest-deadline-first EDF), synchronization (event, signal), resource management (binary semaphore, counting semaphore, mutex, critical section), interrupt management, time management, internal communication (message queue, mailbox, shared memory, pipe, socket, message-based), memory management and I/O management (input/output management).

Image: Task states and their transitions in the operating system
Multicore in hardware and microcontroller architectures
In modern hardware architectures and Microcontroller architectures (Microcontroller architectures) are increasingly bringing multicore and multiprocessor (homogeneous and heterogeneous) architectures to the forefront of development. This presents a completely new challenge for most embedded and real-time software developers. As a software developer, you know what you absolutely must consider when programming in C and C++ together with one or more operating systems on a multicore or multiprocessor platform.
With modern debugging and tracing methods, you can optimize your software in a targeted manner and in the shortest possible time.
MicroConsult offers a quick introduction to the world of real-time operating systems (RTOS) and embedded software programming in EC and EC++.
Real-time: Embedded programming and operating systems – our training courses & coaching
Do you want to bring yourself up to date with the latest technology?
Then find out more about training courses/seminars/workshops and individual coaching sessions offered by MircoConsult on the following topics: Embedded programming and Embedded operating systems.
We deliver our content to you through both in-person and live online training sessions.
Embedded C: Programming methods and tools for embedded applications
This training focuses on low-level C programming for 8-, 16-, or 32-bit microcontroller architectures. You will learn to recognize and avoid common pitfalls and stumbling blocks of the C programming language. You will learn how to program a hardware abstraction layer according to a software architecture model and gain an overview of the entire product lifecycle.
Training – Embedded C: Programming methods and tools for embedded applications
Embedded C++: Object-oriented programming for microcontrollers with C++/EC++ and UML
In a concise format, you will gain an overview of the entire development process – software analysis, design, implementation, and testing. The focus is on the design of software systems using UML and their implementation in the C++ programming language. Another important aspect is meeting the specific software quality requirements of embedded systems, for example, regarding runtime and code efficiency, as well as avoiding or detecting programming errors early on using programming guidelines such as those offered by the MISRA C++ standard.
Training – Embedded C++: Object-oriented programming for microcontrollers
Embedded C++ for Advanced Users: Object-Oriented Programming for Microcontrollers with C++/EC++
You can use advanced C++ constructs in embedded and real-time applications and assess their efficiency (resource consumption and performance).
For training – Embedded C++ for advanced users: Object-oriented programming
Embedded multicore microcontrollers in practice
In this practical training course, you will learn the essential mechanisms of multicore microcontrollers and their capabilities. You will efficiently master new challenges in working with multicore thanks to the experience gained through numerous practical examples.
For training – Embedded multicore microcontrollers in practice
Multithreaded programming and multicore programming
This training shows how the properties of multithreading systems can be used, or which problems need to be solved in order to make the best possible use of processor performance – especially in modern multicore systems.
Training – Multithreaded programming and multicore programming
Develop clean, efficient, and robust C++ software using classic object orientation and modern C++ language features – the path to clean code
Software development as a craft – 'Software Craftsmanship' – The path to 'Clean Code'‚
Design patterns (not only) for embedded systems
You will learn under what conditions classic design patterns can be profitably used in resource-constrained embedded systems. Patterns particularly suitable for this purpose will be explained using hardware-related or other applications typical of embedded systems. Special emphasis will be placed on evaluating storage space and runtime costs.
Training – Design Patterns (not only) for Embedded Systems
Embedded software design and patterns with C
You will learn the programming principles and design patterns essential for embedded software development, be able to program them in C, and apply them in your projects. You will master object-oriented programming and the implementation of state machines in C. You will be familiar with the mechanisms of an embedded/real-time operating system and implement hardware drivers, interrupt concepts, and callback structures in C – taking "Design for Test" into account. Through refactoring, you will improve the quality of existing C program code (legacy code).
Training – Embedded Software Design and Patterns with C
Software architectures for embedded systems and real-time systems
They are familiar with the terminology and meaning of software architecture; the tasks and responsibilities of software architects and their role in the project; and state-of-the-art methods and techniques for developing software architectures. They have the ability to coordinate, document, and communicate software architectures with project stakeholders, as well as to independently carry out the essential steps of software architecture design.
Training topic: Software architectures for embedded systems and real-time systems
Modern C++: The most important language changes from C++11 to C++20
This C++ course will introduce you to all the essential new features of C++11 and C++14, enabling you to use them to write more efficient and maintainable code. It includes an introduction to the fundamental principles of compile-time metaprogramming with templates, which has gained power through "variadic templates" (introduced in C++11), the implementation of which is further simplified by "fold expressions" (planned for C++1z).
For training – Modern C++: The most important language features from C++11 to C++14
RTOS Fundamentals and Application: Mechanisms and their use in runtime architectures for embedded and real-time systems
They understand the mechanisms of modern real-time operating systems and can therefore develop new software runtime architectures and maintain existing ones – regardless of the specific real-time operating system product. They can document and communicate software runtime architectures.
Training – RTOS basics and application
RTOS application: Development of runtime architectures for embedded and real-time systems
They are able to develop new software runtime architectures and maintain existing ones using modern real-time operating systems (RTOS) – regardless of the specific real-time operating system product.
For training – RTOS application
Linux system programming
They are familiar with the programming interface (API) of the Linux/Unix operating system according to the POSIX standard and the Single UNIX Specification. They are proficient in using system calls, know the implementation of the file system, and understand the process model.
Training – Linux system programming
Embedded Real-Time Linux: From Bootloader to Real-Time System with Yocto (Linux RTOS)
Are you tasked with building an embedded Linux target? How do I get started? What do I need? How do I achieve a real-time capable system? This training focuses on the design and operation of an embedded Linux system with hard real-time capabilities.
Training – Embedded Real-Time Linux: From Bootloader to Real-Time System with Yocto (Linux RTOS)
Embedded Linux architecture: Kernel driver development
How do I develop a kernel driver? What do I need to consider for embedded and real-time systems? A fundamental understanding of kernel architecture is essential for developing a high-performance driver. This is precisely where the training comes in.
Training – Embedded Linux Architecture: Kernel Driver Development
Linux Multithreaded/Multicore Programming
This training demonstrates how to best utilize the processor performance of Linux systems – especially with modern multicore architectures. It is aimed at software developers who need to develop new applications or optimize existing ones, and is particularly suitable for use with embedded Linux systems.
Training – Linux Multithreaded/Multicore Programming
Embedded Linux software development
This training covers the development of software for embedded Linux. All aspects of low-level development are addressed and practiced using the relevant development tools.
Training – Embedded Linux Software Development
Embedded Linux for testing and support
Once an embedded Linux project is fully developed, the next steps involve testing, support, and service. This training provides those who haven't developed a Linux system but are responsible for its maintenance with a systematic introduction to the finished system.
For training – Embedded Linux for testing and support
Zephyr – the little brother of the Tux
Are you tasked with building a Zephyr target? How do you begin? What do you need? This seminar focuses on the design and operation of a Zephyr system with hard real-time capabilities, using only freely available open-source software.
PXROS-HR Certified RTOS
After completing the PXROS-HR training, you will be familiar with the mechanisms and concepts of this real-time operating system for the Infineon TriCore architecture. You will understand the RTOS application and its connection to the TriCore™ Memory Protection Unit (MPU) mechanism.
For training – PXROS-HR Certified RTOS
Software law: Liability risks when using embedded software and open-source software
They are familiar with the typical legal liability risks associated with embedded software, as well as the legal structures that are important in connection with the use of open source software in their own company or towards customers.
Training – Software Law: Liability Risks When Using Embedded Software and Open Source Software
All training courses on the topic of embedded programming and operating systems
Coaching – Real-time: Embedded programming and operating systems
MicroConsult's coaching services offer the significant advantage that our experts directly contribute their knowledge and experience to your solution process, thereby directly impacting project success. Together, for example, we analyze the potential applications and benefits of new software engineering or management methods, develop concrete implementation measures, and then put them into practice.
Coaching – Real-time: Embedded and real-time operating systems
Coaching – Real-time: Embedded programming
Training & coaching on the topics of our portfolio can be found here. here.
We deliver our content to you through both in-person and live online training sessions.
Real-time: Embedded programming and operating systems – Expertise
Valuable expertise on the topic Real-time embedded programming and embedded operating systems is available for free download:
Expertise: Real-time embedded programming and embedded operating systems
You can find expert knowledge on the other topics in our portfolio here. here.
