How to Turn Your Embedded Device into an Embedded Platform
In this session, you will learn about SEGGER emApps, a software package for creating and executing apps -- small programs that can be dynamically loaded and executed in an embedded system.
With emApps, new functionality can be added to an embedded system at any time, with no need to alter a validated core system. This enables new features or enhancements to be deployed in the field while maintaining system stability and security.
The key features of emApps are small code size, high performance, and security. Apps run on a virtual CPU specifically designed by SEGGER for this purpose, and they are executed by a call to the emApps executor, which implements the instruction set.
App capabilities are defined by an API table in firmware, giving a firmware developer full control over the exact functionalities available to them. It is even possible to grant different rights (API tables) to different apps running in a system.
Throughout the session, you will see various demonstrations about how apps can be developed, built, tested, deployed, loaded, and run on an embedded system using SEGGER emApps.
What this presentation is about and why it matters
How do you turn a device that ships as fixed firmware into something that can accept new capabilities later, without turning the codebase into a maintenance burden? Axel Wolf approaches that question with a product-focused walkthrough of SEGGER’s mApps framework, using microcontroller-based devices, in-circuit programmers, and live board demos as the anchor. He shows the moving parts involved in a platform-style architecture, from stable base firmware and APIs to app loading, sandboxed execution, and host-side development tools. This is useful for engineers who need to balance updateability, constrained resources, and long-term product evolution.
Who will benefit the most from this presentation
- Embedded software architects who are evaluating how to separate base firmware from optional functionality
- Firmware engineers working on microcontroller products with tight memory or update constraints
- Technical leads responsible for device customization, partner extensibility, or post-deployment feature updates
- Engineers building production programming or flashing tools and looking for a more modular model
What you need to know
You will get more from this session if you are comfortable with embedded firmware and the basic shape of a microcontroller application.
- General familiarity with RTOS-based firmware, middleware, and drivers
- Basic understanding of APIs and compiled embedded binaries
- Some exposure to deployment or update mechanisms such as USB or over-the-air delivery
Glossary (terms used in this talk)
- RTOS (Real-Time Operating System): An operating system designed to provide predictable timing behavior for real-time applications.
- mApps: A modular application framework that lets optional functionality run alongside a stable base firmware. It is typically used to separate product-specific capabilities from the core device image.
- Virtual CPU: An execution environment that runs code inside a managed, software-defined processor abstraction rather than directly on the main hardware CPU. It is commonly used to isolate untrusted or optional components.
- API (Application Programming Interface): A defined set of functions or services exposed by one software component for another to call. APIs create stable boundaries between a host system and code built on top of it.
- Executable app: A compiled software package that can be loaded and executed by a target system or runtime. In embedded systems, this can be used to distribute optional behavior independently from the core firmware.
Toolbox (mentioned in this talk)
- Visual Studio Code: A lightweight source code editor with broad language support and extension-based integration. It is often used for embedded development and can pair well with containerized workflows.
- SEGGER Ozone: A graphical debugger for embedded systems that integrates with common debug probes. It is often used for source-level debugging and target inspection.
- SEGGER J-Link Software and Documentation Pack: A vendor package that provides host-side tooling for working with J-Link debug probes. It includes utilities such as a GDB server and RTT viewer for debugging and console output.
- Segger SystemView: A real-time recording and visualization tool for RTOS-based embedded systems that captures context switches and API calls to analyze runtime behavior.
- SEGGER Embedded Studio: An embedded IDE for editing, building, and debugging target software. It is commonly used as the development environment for MCU-focused projects.
- mApps: A framework for loading and running modular applications on constrained embedded devices. It provides a way to extend device behavior without replacing the full base firmware.
Final thoughts
Practical and product-centered, this session gives viewers a clear vocabulary for thinking about embedded devices as extensible platforms rather than fixed images. The value is less about a single implementation recipe and more about the architecture, workflow, and operational tradeoffs behind modular firmware. It will be especially helpful for people who own a device roadmap, a firmware architecture, or a production update strategy. The talk has a strong demo-driven feel, and it makes a familiar embedded problem look much more open-ended.
This overview is AI-generated from the session transcript. Spot an issue? Let us know.
Hello Zoe, Thanks for your comment!
It’s fundamentally about efficiency. You're right - if your system already runs Android, then emApps is probably not the best idea. But Android requires a powerful processor and massive memory resources. emApps is built for resource-constrained microcontrollers. Our executor engine is incredibly small—around 2.5 KB. It provides the modularity and virtualization of a container, but in a footprint that can actually run on the smallest of devices.
I enjoyed your presentation, Axel! You mentioned several times that user apps are loaded into RAM; even if that's where they're run from, there's still a way for them to be stored in Flash (and then loaded into RAM at startup) so they survive a power cycle, right?
To clarify: After an app is delivered to an application, it is up to the application code to store the app in some kind of non-volatile memory, e.g. in on-chip Flash, external QSPI Flash, external SD card, etc. That part is out of scope as far as emApps is concerned.
But emApps doesn't monopolize the internal Flash, right? So once I flash the emApps firmware, I should still be able to store my apps in that same piece of Flash alongside the emApps firmware and then the AppLoader can somehow find them and load them into RAM at start-up.
Like, I don't need external memory to store my apps, right?
Correct. As long as you have unused on-chip Flash sectors available that can hold your app(s) and a method to write the app(s) to those sectors, you're good.
Yes, that's correct!
Excellent presentation Axel! Can you suggest a NXP eval board to try emApps with?
Thanks!
emApps runs on small and resource-limited microcontrollers — starting at 64 KB of flash memory. So any NXP eval board should work.
Do you have any particular NXP MCU family in mind?
Maybe an eval board for one of the new MCX MCUs would be good?
Hi Axel, I have both FRDM-MCXN947 and FRDM-MCXA156 boards.
This is really cool!
Can’t wait to try this in a modular application I’ve been toying with. What I find promising about this idea is how easily it could provide feature updates on the fly.
Thanks for your positive comments!
Also curious about the overhead that is introduced. My products are almost entirely battery operated (decent sized batteries with backlit LCDS so there is room for overhead if it's only a few %).
Thanks for reaching out!
emApps runs on small and resource-limited microcontrollers — starting at 64 KB of flash memory.
See here: https://www.segger.com/products/virtualization/emapps/#resource-usage
Is EmApps dependent on certain CPU architecture features like a MMU or hardware virtualisation?
Thanks for your interest in emApps!
No. emApps runs on small and resource-limited microcontrollers — starting at 64 KB of flash memory.
Also see: https://www.segger.com/products/virtualization/emapps/#resource-usage
Thanks for the info. This setup is better than having some emulator/simulator that runs on a non-target non in-situ env. The fact that the source code is built into an .exe/bin is basically containerizing it and running it on the real target hardware. This is great as that target should exhibit similar execution times, interactions as if on the real thing. What is the general execution overhead since there's a virtual MCU layer for the translation/interpretation?
Thanks for your comments!
Your questions is closely related to the question from Oleh.
Please see: https://www.segger.com/products/virtualization/emapps/#performance
Thank you! How much performance overhead does it introduce?
Thanks for your question!
The virtual instruction set is highly efficient. Fewer instructions are required, and execution remains close to native speed — even for compute-intensive tasks. Overall app performance depends on the speed of the CPU the executor is running on and on the instructions used.
The emApps executor’s performance translates into 18 host-system instructions (or clocks) per virtual S32 instruction (CPI). Depending on the instructions calling internal operations, firmware operations, or hardware (which is often the case for CPU or compute-intense code), the CPI ratio can further improve. Finally, the S32 instruction-code density is usually better than the host system's code density, which further improves performance.
Also see: https://www.segger.com/products/virtualization/emapps/
Thank-you for a short and brief introduction. Can you please tell about the licensing cost.
Thanks for reaching out!
Please send an email to sales@segger-us.com for licensing questions.








This seems like a bad idea, more of a security risk than benefit, with a high chance of breaking basic functionalities.
Android might be better suited for this, with reviewed supply chain in market place.