The Internet of Things on AWS – Official Blog

AWS Makes It Easier for Embedded Developers to Build IoT Applications with Additional Preconfigured Examples for FreeRTOS on Armv8-M Architectures

FreeRTOS is a real-time operating system for small, low-power devices. AWS maintains stewardship of the FreeRTOS kernel, a free and open operating system for microcontrollers that embedded developers have trusted and evolved for more than fifteen years. In the eighteen months that AWS has maintained the FreeRTOS project, we’ve updated it to use an MIT License, added security and connectivity libraries with Amazon FreeRTOS, and contributed support for the open RISC-V instruction set architecture (ISA).

Today, AWS announces availability of additional preconfigured examples for device manufacturers. Embedded developers can use these examples to more easily create IoT applications for microcontrollers that use the Armv8-M architecture on the officially supported FreeRTOS kernel. The latest MIT-licensed FreeRTOS multi-threading kernel release includes new, preconfigured example projects supporting Nuvoton, NXP, and STMicroelectronics that demonstrate the FreeRTOS Armv8-M port on Arm Cortex-M33 and now also Arm Cortex-M23 hardware. These examples, along with the officially supported FreeRTOS port for Armv8-M, provide users with a choice of hardware and build environments.

The FreeRTOS kernel Armv8-M port uses the memory protection unit (MPU) and TrustZone-M features of the Armv8-M core. Application writers can write sandbox code that must remain trusted to ensure system integrity or code that they simply want to keep private. The kernel can run in the secure or non-secure execution environments provided by the TrustZone-M hardware (commonly known as the secure side or secure world and non-secure side or non-secure world, respectively). Typically, security-focused functionality like secure boot, encryption, decryption, and management of keys and certificates are expected to execute on the secure side, and other features (including the kernel itself) on the non-secure side.

When the kernel is executed on the non-secure side, support for the floating point unit (FPU), memory management unit (MPU), and TrustZone are all compile-time options. Non-secure tasks (or threads) can call secure-side trusted functions that, in turn, can call back to non-secure functions, all without breaching the kernel’s prioritized scheduling policy. That flexibility makes it possible for application writers to create non-secure FreeRTOS tasks that interact with trusted secure-side firmware they created themselves or is provided by third-party open source or proprietary vendors. When the kernel is executed on the secure side, support for the FPU and MPU are compile-time options, but tasks cannot call non-secure functions.

The preconfigured examples show how to create partitioning by using dummy functions on the secure side, the entry points to which are exported to and called from the non-secure side. Those examples also show how to configure the MPU to provide FreeRTOS tasks with memory access rights, as appropriate for the task purpose and privilege.

Getting started
To get started quickly, download FreeRTOS source code from SourceForge and use these preconfigured examples:

  • NXP LPC55S69-EVK Development board with LPC55S6x MCU based on Arm Cortex-M33. Product Page | Preconfigured Example
  • Nuvoton NuMaker-PFM-M2351 with NuMicro-M2351 MCU based on Arm Cortex-M23. Product Page | Preconfigured Example
  • STMicroelectronics Nucleo-L552ZE-Q Development board with STM32L5 MCUs based on Arm Cortex-M33. Product Page | To obtain FreeRTOS code for STM32L5, please contact your local STMicroelectronics sales office or distributor.

To learn more, visit