07-Dec-2025: bare metal and FreeRTOS examples up to and including practice session 13 have been migrated to Simplicity SDK Suite v2025.6.2.
This repository contains a presentation providing an introduction to embedded systems. The targeted audience is machine learning application developers, who want to better understand what an embedded system is, and how it can/must be used.
The presentation DOES NOT provide information about machine learning.
The following topics are covered:
- Interfaces: GPIO, ADC, UART, SPI, I2C
- Software development over bare metal
- Software development with an RTOS
Practice sessions provide hands-on experience of the presented concepts.
The hardware target for the practice sessions is the Silicon Labs EFR32xG24 Dev Kit, based on the EFR32MG24 wireless System on Chip (SoC).
This presentation is used as a support for the 22-hour course taught at IMT Atlantique in January.
Silicon Labs Simplicity Studio 5 (based on Eclipse CDT) is used for bare metal (i.e. no RTOS) practice sessions and for FreeRTOS-based practice sessions.
Simplicity Studio 5, abbreviated as SSv5 hereinafter, can be installed on Linux, Apple macOS (Arm or Intel) and Microsoft Windows.
The sections below explain how to create a Linux virtual machine (VM) so that the configuration specific to SSv5 can be isolated from your other projects. A drawback is that the host PC must be powerful enough and must have enough memory (a minimum of 8 GB must be assigned to the VM).
You can also decide on installing SSv5 directly on the OS of your PC. In this case, you can refer to the instructions provided by Silicon Labs. But be prepared to possibly have to spend some time tinkering with your setup on your own :-)
Important
Be sure to install version 5 of Simplicity Studio, not version 6.
As mentionned above, the practice sessions use the following hardware:
- Basic knowledge of Git - git user manual
- Basic knowledge of GitHub - About GitHub and Git
- Basic knowledge of Linux (knowing the most common commands...) - An Introduction to Linux Basics, from DigitalOcean
- Basic knowledge of VirtualBox (knowing how to create a virtual machine...) - VirtualBox end-user documentation
- Good knowledge of one programming language
C language is used, for the practice sessions. This Standford Computer Science Education document provides a good presentation of the language.
- Create a Linux Mint VM, configure it and install Simplicity Studio
- Get an EFR32xG24 Dev Kit (see the link provided in the Hardware section above.
- If you need it, spend some time browsing the documents listed above (Git, GitHub, Linux, C, etc.)
- Ensure that you can build and program the sample application, as presented in the lm-efr32-simplicityStudio repository (the one linked in list item 1 just above)
The presentation is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
The source code is licensed under the GNU General Public License v3.
Solutions to the practice sessions are available to IMT Atlantique students attending the course, and to sponsors. To become a sponsor, check the sponsorship page.
- Preamble
- Document history
- Licenses
- Credits
- How to navigate
- Foreword
- Who am I?
- Needs of embedded ML applications
- Technical domains
- Presentation goal
- Introduction
- Hardware progress
- Embedded applications
- Microcontrollers and boards
- Reminders: memory
- Microcontroller
- Board architecture
- Important characteristics?
- Some common microcontroller families
- Arm cores
- STM32
- EFR32
- ESP32
- RISC-V
- Software development - Introduction
- Cross development
- Debugging
- Interfaces - Part 1
- GPIO
- Hardware API
- Execution environments
- Bare metal
- RTOS
- OS
- Practice sessions:
- Hello World! in bare metal
- A debug session
- Peripherals
- Sensors
- Actuators
- Interfaces - Part 1 - continued
- More about GPIO
- Practice sessions:
- Display button state changes
- Make the red LED blink
- Software development - Design pattern
- Finite State Machine
- Interfaces - Part 2
- ADC
- UART
- SPI
- I2C
- Practice sessions:
- ADC: convert an analog signal
- UART: send characters to the PC
- UART: echo received characters
- SPI: get data from the inertial sensor
- I2C: get data from the temperature sensor
- Software development - Part 3
- Floating-point arithmetic
- Memory: code and data
- Memory: static, automatic and dynamic storage
- Stack and heap
- How an application starts
- Interrupts and background task
- Sleep modes
- Practice sessions:
- GPIO and interrupt
- Timer and interrupt
- Application and interrupts
- More about what an RTOS is
- Problems and solution
- Soft and hard real time
- Benefits
- Drawbacks
- Components
- Tasks
- States
- The scheduler
- Practice session:
- Creating and starting a task
- Concurrency control
- Shared resources
- Critical section
- Mutex
- Priority inversion
- Deadlock
- Semaphore
- Practice sessions:
- Sharing data bug
- Mutex
- Semaphore
- Communication
- Queues
- Benefits
- Practice session:
- Using a queue
- Time-stamped button presses
- A log server
- Concurrency summary
- Time
- Timer
- Time functions
- Device time
- Memory allocation
- Dynamic memory allocation
- Drawbacks
- Middleware