Select Page

Embedded software design: Developing requirements and refining architectures

“According to experts, predictive maintenance will be the norm for virtually all rotating machinery within the next five to ten years. The rapid development of sensor technology and artificial intelligence is further accelerating this pace. The embedded systems connected to the Internet of Things (IoT) are placing increasingly complex demands on design. Those who develop well-thought-out requirements in advance and consistently refine the architecture with software design ensure software and product quality.

Placement in the development process

In the development process, software design is ordered according to the software-Requirements and architecture development and before implementation. Development today is incremental and iterative, not waterfall-like. Figuratively speaking, software design represents the bridge between architecture and implementation.

The system intelligence in IoT and Industry 4.0 products very often resides in the embedded software. Its complexity is currently increasing rapidly. Many companies have now recognized the necessity of embedded software requirements gathering and embedded software architecture development. The logical consequence: using software design to refine the software architect's results before implementation..

Topics from embedded software design

Fig. 1: Topics from embedded software design

Independent of C++ with an object-oriented approach

Object-oriented software supports positive software quality attributes such as extensibility, maintainability, portability, reusability, and much more. In object-oriented software development, you can program constructs such as classes, objects, associations, aggregation, composition, inheritance, and polymorphic interfaces not only in C++ but also in C.

Design principles help with clean code

Not least due to the growing popularity of the "Clean Code Developer" initiative in recent years, the topic of "developing high-quality software" remains highly relevant. Adhering to simple principles like DRY, KISS, SLA, SRP, and POLS helps developers write high-quality software.

Develop faster with design patterns

Design Patterns These are tried-and-tested solutions to recurring challenges in software development. The more design patterns you know, the faster your software development will go. Design patterns can be divided into generational, structural, and behavioral patterns.

Design patterns specifically for embedded software can be grouped into the following topics: functional safety, access security, reliability, hardware access, parallelization, resource access, and multicore.

Separate vending machine functionality from the application

Generic (universally valid) behavior in embedded software is very often designed and implemented using state machines. But how do I model (document) and implement the state machine?

The particular challenge in implementing this in C lies in strictly separating the automation functionality from the application. This approach significantly improves the software quality characteristics.

Operating system required

More complex software often offers the possibility of meaningfully (quasi-)parallel processing of tasks within the software. This is achieved by incorporating mechanisms such as multithreading, synchronization, and communication from an (embedded/real-time) operating system into the design.

When developing an IoT (Internet of Things) application, you are usually forced to use an operating system due to the integrated communication stacks.

Callback structures as the method of choice

To enable decoupled communication between software architecture elements, such as software layers, callback structures are often the preferred method. Various design and implementation approaches exist, including those with or without an operating system, object-oriented or procedural, and with or without polymorphism (static or dynamic).

Hardware driver concepts and interrupts

If you do not (want to or are not allowed to) use the drivers supplied by the silicon manufacturer or generated by tools, and your operating system does not provide I/O management, you also have the option of developing a driver and interrupt service concept that best meets your software requirements.

Refactoring

Not every developer has the opportunity to start from scratch with a completely new embedded software development project. Often, the focus is on maintaining and extending existing software that has matured and evolved over more than ten years. This makes significant changes difficult, as side effects inevitably arise.

If you decide against a fresh start, the software must be restructured step by step so that the side effects disappear or don't occur in the first place. Restructuring means optimizing planned projects on a small scale (with data, functions, classes, and objects) and, if necessary, adapting the software architecture on a larger scale.

Conclusion

Every embedded software developer must be aware of the high relevance of software design. This knowledge leads directly to improvements in software and, consequently, product quality.

This expertise qualifies you as an embedded software developer for the next step in your professional career. Take advantage of this opportunity and acquire the necessary specialist knowledge in the MicroConsult seminar „Embedded software design and patterns with C.

Further information

MicroConsult Training & Coaching on Embedded and Real-Time Programming

MicroConsult Training & Coaching on the topic of software quality

MicroConsult Expertise in Embedded and Real-Time Software Development

MicroConsult Newsletter

With the MicroConsult newsletter, you'll stay on the pulse of the embedded world. Look forward to proven practical knowledge, real professional tips, and current events – directly from our experts for your project success.

Subscribe now!

Published by

Rouven Braden

Rouven Braden