When working for one of my clients I learned about Emma (or rather EMMA :-) pattern and it got me quite intrigued. As far as I know, it's never been published anywhere, and frankly, there aren't many publications about embedded systems architecture anyway.
In the meanwhile, Burkhard Stuber from Embedded Use gave a talk about Hexagonal Architecture* pattern and argued in his newsletter that:
"In my talk at Meeting Embedded 2021, I argue that the Hexagonal Architecture should be the standard architecture for UI applications on embedded devices. As software and system architects we should never have to justify why we use the Hexagonal Architecture. In contrast, the people, who don't want to use Hexagonal Architecture, should justify their opinion."
However, at the time of this talk, these ideas werent yet communicated, but at the moment I still think that even for UI-based applications on embedded devices EMMA could also be an option!
The EMMA architecture was successfully used in embedded devices at my client's, it follows an interesting idea and it wasn't published outside of the company before. So I secured an OK from my client and presented it for the general public!
The Talk
As they gave me permission to blog and speak about it, I gave a presentation on EMMA at the emBO++ 2021** conference:
- here are my slides: EMMA Software Architecture Pattern for Embedded Systems.pdf
- and here is the recorded talk:
The general TOC of the talk looks like this:
- General intro about architecture patterns
- and also about embedded software architectures - Motivations and trade-offs
- the motivation for an the trade-offs taken in the EMMA pattern - Overview of EMMA
- its layers, the various conventions it imposes on developers, the standard project structure
- the basic control flow
- the startup phase - Use Case 1
- Bootloader on a Device Control MCU - Use Case 2
- Target Tests for a Device - Use Case 3
- Qt GUI on Yocto Linux and iMX-6
EMMA Architecture
And here it is, the short, non-formal description of Emma architecture pattern.
The name of the pattern is an acronym of:
- E – event-driven (asynchronous events for communication)
- M – multi-layered (layering to organize the )
- M – multi-threaded (i.e. threading has to follow guidelines)
- A – autonomous (i.e. minimal interfaces)
The motivation of the pattern is to avoid designs like this:
which, unfortunately, tend to spring to life in many programming projects!
The inspiration for the pattern comes from the ISO's seven layer model of a networking stack:
We can clearly see, that there are analogies between networking stack decomposition and embedded architecture layers! This is what got me interesten in first pplace
When to use EMMA? The original design argues that it is good for:
- Low-power 8-bit MCUs
- Cortex M0-M4 class, 32-bit MCUs (e.g. STM32F4xx), RTOS, C
But in a recent project we also used it for:
- Cortex A class, Linux, C++, Qt, UI
I'd say that it can be naturally extended to UI-driven embedded devices, where the A7 (Application) layer isn't a message loop but a Qt-based UI!
Thus it can be seen as an alternative to Hexagonal Architecture*, offering the one benefit, that it follows the more widely known Layered Architecture pattern!
---
** emBO++ 2021 | the embedded c++ conference in Bochum, 25.-27.03.2021
No comments:
Post a Comment