Releases: ARMmbed/mbed-os
mbed-os-5.1.1
The mbed OS 5.1.1 release is now on GitHub.
- RTOS - fix joining a terminated thread.
- K64F name fix for cmsis and hal.
mbed-os-5.1.0
This is the release note for the mbed OS 5.1.0 release. It summarises the major changes in this version of mbed OS, as well as the requirements for partners looking to support this release on development platforms.
The mbed OS 5.1.0 release is on GitHub.
About this release
This release marks significant changes and enhancements that have accelerated features of our roadmap, opened up the applicability of mbed OS to many more IoT use cases, and unlocked compatibility with our mbed OS 2 "Classic" ecosystem.
Version summary
The headline changes in this release are:
- RTOS - mbed OS now incorporates an RTOS. This much-requested feature provides native thread support to the OS and applications, simplifying development and integration of complex and robust application components like networking stacks. It also enables both blocking and non-blocking design patterns. The RTOS requires very limited system overhead.
- Tooling - we have simplified the tooling and introduced native support for building and testing across the ARM Compiler 5, ARM GCC Embedded and IAR compiler toolchains. A command line interface script (mbed CLI) now drives the established mbed OS 2 build system to build the OS and associated developer applications and components. Dependencies are explicitly pinned to provide full reproducibility of builds. The target and toolchain can be selected independently of each other, and we run CI on mbed OS across all these compiler toolchains on every commit. yotta is not used in this release.
- Compatibility - the introduction of the RTOS and changes to tooling have allowed the possibility of compatibility with the mbed OS 2 ("Classic") ecosystem. We have taken this opportunity to re-base and merge the two development lines so that we now have just one platform and one set of tools. Existing partners can take advantage of investments made in mbed over the years, and both new and existing partners need to invest in only one project. Developers can benefit from all legacy components and libraries, alongside the existing and new features of mbed OS.
These architectural changes enable merging the mbed OS 2 and mbed OS 3 codebases, websites and ecosystems, and are marked with a major revision update - mbed OS 5 (2+3=5!).
Our mbed OS 5.0.1 was an internal version available only to partners, and mbed OS 5.1.0 is the first generally available.
Based on these changes and the hard work of our partners, mbed OS target support is also accelerated. This release supports multiple target platforms from multiple partners, with more ports regularly made available on a newly introduced minor release tick every two weeks.
The following sections provide more details of these and other changes in this release.
Core
RTOS
mbed OS now incorporates an RTOS.
The RTOS core is based on the widely used open-source CMSIS-RTOS RTX, providing an established kernel that can support threads and other RTOS services on very tiny devices. The RTOS primitives are always available, so that drivers and applications can rely on features such as threads, semaphores and mutexes. The RTOS is initialised ahead of entering the main() thread, enabling components to rely on RTOS facilities even if the core application is single threaded.
The implementation is based on CMSIS-RTOS RTX 4.79.0, and we will be tracking and contributing to the development of CMSIS-RTOS releases, allowing us to pick up support for new versions and architectural features such as TrustZone for Cortex-M.
The MINAR eventing-only scheduler is not included in this release. An alpha version of a more flexible event scheduler library is available, supporting the same design patterns within RTOS threads and components. This library will be merged and managed as part of the core OS codebase once it reaches release maturity.
Drivers and support libraries
There is now driver support for a wide range of standard MCU peripherals across the extended target platforms:
- DigitalIn, DigitalOut, DigitalInOut
- InterruptIn
- PortIn, PortOut, PortInOut
- BusIn, BusOut, BusInOut
- AnalogIn, AnalogOut
- PwmOut
- I2C, I2CSlave
- SPI, SPISlave
- Serial
Improved API documentation is now available here.
These drivers have been internally upgraded to integrate thread safety logic, while maintaining compatibility with the mbed OS 2 APIs. This has been done within the generic components of the drivers to avoid changes to the different HAL implementations.
A new Callback
class supersedes FunctionPointer
(still supported) to provide a more flexible and neater syntax for capturing and calling static function and class member callbacks. It now uses the same class regardless of the number of arguments on the callback.
C libraries
The C libraries provided with each of the supported toolchains have been integrated into mbed OS, including implementation of thread safety support.
Security
uVisor
uVisor has been upgraded to support the RTOS.
We have made the modifications CMSIS required to allow uVisor to hook interrupts. These will be upstreamed to future CMSIS releases.
uVisor now includes a disabled mode for ARMv7-M and ARMv6-M architectures that maintains code compatibility even when uVisor is not present or active, enabling a smooth software upgrade path as platforms introduce support for uVisor.
Crypto
The crypto libraries now support:
- An insecure NULL entropy mode to simplify support during development.
- A HAL API for providing strong entropy sources based on a hardware TRNG.
- A reasonable strength entropy source based on non-volatile storage.
mbed TLS
We have integrated version 2.3.0 of mbed TLS, providing TLS and DTLS support for services.
See the mbed TLS 2.3.0 release note.
Please note, applications using mbed TLS on boards that have not yet implemented hardware entropy support must use the NULL ENTROPY configuration to build. However, please be aware that no security will be offered by mbed TLS in those cases.
Connectivity
The sockets API has been revised to support:
- Multiple stacks
- Multiple interfaces
- Synchronous and asynchronous APIs
We have successfully applied this to Ethernet, 6LoWPAN Mesh and WiFi interfaces.
We've introduced an 802.15.4 MAC HAL to enable simplified porting of the 6LoWPAN and Thread stacks to different 802.15.4 radios. This release includes ports for multiple transceivers.
We have released a 6LoWPAN Border Router reference application and an associated Linux-based Access Point example that demonstrates 6LoWPAN nodes connecting via an Access Points to the mbed Device Connector service. A development Thread Border Router is also available to mbed Partners.
We've extended our Bluetooth Low Energy (BLE) API to support user-defined scheduling policies. This maintains compatibility with mbed OS 2 BLE applications, while allowing developers to take advantage of the RTOS to design more efficient solutions. The Bluetooth API is now supported across multiple vendor silicon, covering both SoC and MCU plus Transceiver chipset arrangements.
Services
mbed OS integrates the latest mbed Cloud Client, providing connectivity and management services from mbed Device Connector.
See the mbed Device Connector site.
Tools and workflow
We've reworked the tools and workflows to address feedback from previous releases on the use of yotta and the desire for backward compatibility with mbed OS 2 (“Classic”). In this release we build the OS, components and applications using modified versions of the mbed OS 2 build scripts.
mbed CLI
You can use a new top level command line interface (mbed CLI) to drive the build, package management and test scripts. It is also a natural integration point for IDEs.
Dependencies
This release does not use yotta; applications depend instead on a single mbed OS repository where all dependencies are pinned, making applications reproducible and simplifying development and management.
Code compatibility and toolchain support
Code is compatible with c99/C++03, and doesn't use any C++11 or C++14 features.
We now support building and testing across multiple toolchains (ARM Compiler 5, GCC ARM Embedded, IAR). Supporting these three toolchains is a requirement for partner ports.
The build tools now emit static RAM and FLASH sizes and a top level breakdown on every build.
Exporting to Third Party IDEs
We support generation of project files to enable opening mbed OS projects in Keil MDK, IAR Workbench and other environments. This is useful for development and launching debug sessions, and can be achieved from mbed CLI or the mbed Online Compiler.
mbed Enabled
We've formalised the mbed Enabled program, providing versioned compliance criteria and technical requirements for boards, on-board interfaces and end products.
The following resources are available:
- The mbed Enabled requirements documents, available on the site.
- The mbed Enabled application form.
Targets
Thanks to our partners' hard work, including an onsite workshop, the mbed OS 5.1 release already supports the following targets:
- Seeed Arch Pro (ARCH_PRO)
- [Silicon Labs Pearl Gecko (EFM32PG_STK3401)](h...
mbed_lib_rev80
First alpha release for the NRF51822 target (to be tested in the online IDE)
mbed_lib_rev79
- Add LPC1549 Target
- Change "us_ticker" implementation to 32-bit timer for NUCLEO_L152RE and NUCLEO_F401RE
- Update KL05Z CMSIS-CORE
mbed_lib_rev78
- Add KL05Z Target
- Fix LPC11XX InterruptIn
- Fix NUCLEO boards us_ticker
- Fix NUCLEO_L152RE AnalogOut
mbed_lib_rev77
Main changes:
- Add target NUCLEO_F030R8
- Add target NUCLEO_F401RE
- Add target NUCLEO_F103RB
- Add target NUCLEO_L152RE