mbed-os-5.6.0
About this release
The Arm Mbed OS 5.6.0 release helps to further simplify the internet of things (IoT) and embedded product development with the addition of several new features, such as tickless RTOS scheduler support to enable long periods of low-power sleep and IPv6 support to cellular stack to provide enhanced web connectivity. The release also adds several new drivers and platform APIs, support for IAR Embedded Workbench v8.1 and hardware security enhancements. In addition, this release contains many minor fixes and enhancements and brings support for 93 target development boards. In the release note below, we summarize some of the key updates to Mbed OS as a part of the Mbed OS 5.6.0 release.
One additional change you may have noticed is developer.mbed.org is now os.mbed.com. We have updated our URL for consistency across the website. The community should experience no significant changes or issues due to this change because all redirects are in place.
Core OS
Tickless RTOS Scheduler
Power consumption is one of the most important design requirements for IoT devices. Meeting the power budget is becoming very challenging as the systems today include more sensors, faster responses and more connectivity. Mbed OS introduces the Tickless RTOS Scheduler to help achieve the design of low power systems.
Support Tickless Operation: In tickless operation, you don’t have to make a tradeoff between high-frequency timing interval, which consumes more power, and low-frequency timing interval, which results in suboptimal time keeping, because the scheduler schedules the next timer tick in response to the next event rather than a fixed timer tick.
Integration with Mbed OS: The Tickless RTOS Scheduler is integrated in the native OS and based on the low power ticker. The Tickless RTOS Scheduler is already integrated in the Ticker API. The specifications are released to help other boards support the implementation of the low power timer and Tickless scheduler. We are working with Mbed silicon partners to enable support for the Tickless Scheduler on all Mbed Enabled boards.
Support for Arm Cortex-M23 and Cortex-M33 devices
Connected devices are growing at a fast pace, and according to Gartner, there will be more than 20 billion connected devices by 2020. As the number of IoT devices grows, the devices are becoming an increasingly attractive target for cybercriminals. Security is becoming one the most important product requirements for IoT devices. Arm has announced Arm Cortex-M23 and Cortex-M33 processor architecture, which includes TrustZone for Armv8-M and provides hardware-enforced isolation between trusted and untrusted resources while maintaining the efficient exception handling and determinism that have been the hallmark of all Cortex-M processors.
Mbed OS 5.6.0 release provides initial support for Arm Cortex-M23 and Cortex-M33 based devices. This release includes support for RTX and tools for GCC only. This release is an instrumental step in supporting upcoming Arm Cortex-M23 and Cortex-M33 MCUs. You will benefit from support for Arm Cortex-M23 and Cortex-M33 as the new development boards including those processors start to come out.
New drivers and platform APIs
In the Mbed OS 5.6.0 release, we have also added several new drivers and platform APIs. Following are some of the notable additions.
CriticalSectionLock Class: CriticalSectionLock class enables the code to run with interrupts disabled. More information is available in the API.
DeepSleepLock Class: DeepSleepLock class enables the code to run with deep sleep locked. More information is available in the API.
Mbed_error: Mbed_error prevents recursion if error is called again. More information is available in the API.
NonCopyable Class: NonCopyable class allows the creation of classes whose objects cannot be constructed using a copy constructor or assigned to another. It forces the classes copy constructors to be private. More information is available in the API.
Apart from the features described above, Mbed OS 5.6.0 also includes several new features, improvements in current APIs and HAL specification to ensure cross platform support of all APIs. You can find all the changes on GitHub.
Connectivity
Cellular stack now supports IPv6 along with previous IPv4
Cellular connectivity is widely used for connecting IoT devices. It is prominent in mobility, such as smart cars, and devices operating in remote areas, such as oil fields. According to Ericsson, 10% of all IoT devices by 2021 will be connected by cellular connectivity.
Mbed OS already includes the cellular point to point stack with IPv4 connectivity, and in Mbed 5.6.0, we are releasing cellular stack supporting IPv6. IPv6 is being widely adopted because it allows almost unlimited (3.4*10^38) addresses, and IPv4 only allows up to 4.3 billion addresses. More information is available in the cellular documentation.
Security
Update to Mbed TLS 2.6.0
Mbed TLS is an open source, portable, easy to use, readable and flexible SSL library. It enables you to include cryptographic and SSL/TLS capabilities in your embedded products.
The Mbed OS 5.6.0 release supports the latest release of Mbed TLS 2.6.0. The Mbed TLS 2.6.0 fixes an authentication bypass issue in SSL/TLS. More Mbed security information is available in the security documentation.
Targets and tools
Thanks to our partners’ hard work, Mbed OS 5.6 adds eight new target platforms and now supports 93 target platforms. We’ll continue to add targets in our biweekly patch releases as partners work with us on support.
Support for IAR Embedded Workbench for Arm v8.1
Mbed OS 5.6.0 enables initial support to IAR Embedded Workbench for Arm v8.1, which is the latest IAR compiler to support Arm MCUs. Although the default compiler version for IAR remains 7.8.x, you can also build the codebase using IAR 8.1 (builds without dependencies on archives). The current support for IAR Embedded Workbench for Arm v8.1 is limited only to the Mbed CLI tool, and we plan to migrate to the IAR Embedded Workbench for Arm v8.1 as a default IAR toolchain in Mbed OS release 5.7.0.
Support for Arm Compiler 6
Mbed OS 5.6.0 adds early support for the latest and most efficient version of the Arm compiler, the Arm Compiler 6. This version is based on the LVVM framework, optimized to best use hardware features. You can read about the Arm Compiler 6. The current support for Arm Compiler 6 is limited only to the Mbed CLI tool, and we plan to migrate to Arm Compiler 6 as a default in Mbed OS release 5.7.0.
Testing
Mbed OS is designed to significantly reduce cost and time for embedded software development by providing production quality code and toolset. We are committed to delivering high-quality code working across all supported boards and platforms. To ensure that all the features of the code meet our quality control requirements, we have built an automated testing environment and processes that perform rigorous testing on the code. Following are some of the highlights of our testing framework.
Continuous integration framework:
The continuous integration framework is designed to make sure that every new feature and change in Mbed OS is tested to ensure:
- For every new feature, we create tests that we then deliver to our partners. For every board to be Mbed Enabled, we need our partners to successfully conduct these tests.
- Partners test the changes on their board before submitting a Pull Request (PR) on GitHub.
- Once the PR is submitted, then the gatekeepers manually review the code to make sure it meets all the coding guidelines and code standards.
- Once approved by gatekeepers, the code goes through the automated test setup where code is added to Mbed OS for testing and examples built across all the platforms, such as IAR, ARM and GCC.
- During the testing phase, we select the combination of boards and devices that support a variety of peripherals, MCU cores and features to select maximum coverage.
- To make sure that the Mbed OS code is compatible with all the IDEs, we test that the code exports properly to all the compilers.
- We merge the PR only if the all the above is successful.
Following are the summary results for testing conducted for Mbed OS 5.6.0.
- Total test time is 5,770 hours on actual development boards.
- We have added 94 new test cases since the Mbed OS 5.5.0 release to test new and existing features on Mbed OS. The number of total test cases is 312.
- We performed 361,440 example builds since the Mbed OS 5.5.0 release.
- The total number of binaries built is 12,826,080 since the Mbed OS 5.5.0 release.
We plan to share more details about testing processes, such as our out of box testing coverage and system testing, in upcoming release blogs.
Known issues
We publish Mbed OS as a collection of modules on GitHub. Issues are raised in the specific repositories and then tracked internally. The purpose of this document is to provide a single view of the outstanding key issues that have not been addressed for this release. It is a filtered and reviewed list based on priority and potential effect. Each item summarizes the problem and includes any known workarounds, along with a link to the GitHub issue (if applicable). We welcome any comments or proposed solutions.
For more information about an issue, contact us on the forums.
Handshake Messages are not fragmented as per MaxFragmentLength Extension Negotiation
- Description: "Once a maximum fragment length other than 2^14 has been successfully negotiated, the client and server MUST immediately begin fragmenting messages (including handshake messages) to ensure that no fragment larger than the negotiated length is sent. " In Mbed TLS, only the application data is fragmented and the handshake messages are not.
- Workaround: Disable MaxFragmentLength Extension Negotiation.
- Reported Issue: Mbed-TLS/mbedtls#387
- Priority: MAJOR
IP addresses in the X.509 certificate subjectAltNames
- Description: Parsing IP addresses in the X.509 certificate subjectAltNames is not supported yet. In certificate chains relying on IP addresses in subjectAltNames a
BADCERT_CN_MISMATCH
error is returned. - Workaround: Merge branch https://github.com/ARMmbed/mbedtls/tree/iotssl-602-san-ip into your copy of Mbed TLS before building the application. It is still in EXPERIMENTAL stage; use it at your own responsibility!
- Reported Issue: Issue reported by a customer in email.
- Priority: MAJOR
Mismatch of root CA and issuer of CRL not caught
- Description: The
x509_crt_verifycrl()
function ignores the CRL when the CRL has an issuer different from the subject of root CA certificate. - Workaround: Make sure that the issuer of the CRL and the root CA certificate's subject are the same before passing them to
x509_crt_verifycrl()
. - Reported Issue: Reported by a partner.
- Priority: MAJOR
Mbed TLS causes stack overflow in Mbed OS targets
- Description: The stack memory usage of some Mbed TLS features is higher than 4 KB, which may cause stack overflow errors when running with Mbed OS in constrained embedded environments, which are particularly limited in RAM.
- Workaround: The amount of stack required depends on the application and what features of the library it chooses to use. More intensive, demanding tasks may not be possible on more limited, constrained devices, so we recommend designing for the limitations of the target device or choosing a device suitable for your application.
- Reported Issue: ARMmbed/mbed-os-example-tls#14
- Priority: MAJOR
Commissioner does not retransmit message when it receives retransmission
- Description: There are two issues with DTLS handshake retransmission. First, the joiner fails to correctly parse received records because it does not correctly handle queued retransmissions received. Second, the commissioner may cause a deadlock as it does not retransmit certain records after it receives retransmission as instructed in RFC6347 Section 4.2.4.
- Workaround: There is no known workaround.
- Reported Issue: openthread/openthread#1207
- Priority: MAJOR
Self Test Failure with Some Hardware Accelerators
- Description: Most HW acceleration engines (if not all) require the parameters to be from contiguous memory. All the self tests use test vectors that are defined in the
.bss
section, which means these are not contiguous. This causes the self test to possibly fail, when implementing HW accelerated engines. - Workaround: There are no known workarounds
- Reported Issue: Reported by the development team.
- Priority: MAJOR
uVisor does not support nested interrupts
- Description: When running an application with uVisor enabled, nested interrupts are not supported.
- Workaround: There is no available workaround at the moment.
- Reported Issue: ARMmbed/uvisor#345
- Priority: Major
On ARMv7-M targets supporting uVisor, the RTOS runs with the same privilege of uVisor
- Description: The current architecture of uVisor and of RTX require the RTOS to run with the same privilege of uVisor. As such, the RTOS is considered as trusted.
- Workaround: There is no available workaround at the moment.
- Reported Issue: ARMmbed/uvisor#235
- Priority: Major
Mesh networking applications fail to compile with IAR on non-secure platform
- Description: If the target has no defined hardware entropy module, then Mbed TLS support is disabled on the build time. This leads to compilation warnings on some Nanostack related modules and compilation failure when using IAR toolchain.
- Workaround: There is no available workaround at the moment.
- Reported Issue: ARMmbed/mbed-os-example-mesh-minimal#91
- Priority: Major
UARTSerial asserts if debug is enabled
- Description: UARTSerial attempts to claim a mutex from interrupt context. If debug is not enabled, this fails silently, and the driver works as intended. If debug is enabled, the system stops in the assert.
- Workaround: Turn off the debug build.
- Reported Issue: #4537
- Priority: Major
Link in GettingStarted.html generated by mbed export
is incorrect
- Description: The link generated by
mbed export
in the file GettingStarted.html is out of date. - Workaround: Navigate to the correct document by going to the Handbook and selecting "Third party development tools" in the "Development tools and aids" section.
- Reported Issue: #5149
- Priority: Minor
Assembling fails for make_armc5 exporter in Windows upon update of Mbed OS
- Description: After updating Mbed OS on Windows and exporting to
make_armc5
, the assembler will complain ofInvalid line start
andUnknown opcode __FPU_PRESENT
. - Workaround: Remove the
mbed-os
directory, and recreate it from the upstreammbed-os
Git repo. - Reported Issue: #5145
- Priority: Minor
Realtek RTL8195AM does not define flash algorithms for uvision
- Description: No flashing support in uvision for Realtek RTL8195AM.
- Workaround: Use drag-and-drop programming.
- Reported Issue: #4651
- Priority: Minor
Ublox EVK ODIN W2 serial baud rate mismatch
- Description: The default serial port produces incorrect output.
- Workaround: None.
- Reported Issue: ARMmbed/mbed-os-example-wifi#58
- Priority: Major
The default address (ff03::1) cannot work for multicast
- Description: The default address works with Thread but not 6LoWPAN.
- Workaround: None.
- Reported Issue: ARMmbed/mbed-os-example-mesh-minimal#130
- Priority: Major
Ports for upcoming targets
4631 Add new target NUMAKER_PFM_NANO130
Fixes and changes
This is the full list of changes available in this release.
4518 Add new target in mbedtls importer Makefile for mbedtls tests
4644 Ticker: add fire interrupt now function
4814 Merge lwip 2.0.2 stable
4809 STM32: Align HAL & US tickers
4517 Add cpp API for CMSIS OS 2 EventFlags
4908 fs: Add FileSystem::reformat
4920 Modify LED error sequence to be more recognisable
4960 Nanostack update for mbed-os-5.6
5003 Move Cortex specific RTX behind TARGET_CORTEX
4962 platform: add CriticalSectionLock
4843 fatfs: Add lower bound to block sizes
4911 Support cellular IPv4v6 dual stack in LWIP
4907 Update uVisor to v0.30.0
4580 Use EventFlags instead of Semaphores
4406 mbed_events.h: Add ability to request a shared event queue
5037 Revert "Adjusting Stack size Allocation (IAR, LPC176x)"
5030 Export uVision linker flags so that bootloader projects build correctly
4912 Add sleep manager API
4916 Add mcuxpresso exporter
5055 Travis: fix the latest breakage - use group:
4991 Add tickless to some mbed-os devices
5012 STM32_us_ticker_16b: keep code to cope with past event
4938 Update IAR to version 8
5063 Fixing lp ticker and sleep manager tests
4875 Initial support for Cortex M-23/M-33 devices.
4987 Update mbed TLS to version 2.6.0
5073 use gcc assembly for arm 6
4949 NEW TOOLCHAIN: Add the ARMC6 Compiler
5093 Disable response files on export
5090 Correct long call macros for ARMC6
5111 Emit dependency information with ARMC6
5069 Changed error print to assert
5107 mbed_rtx_idle: uVisor: Don't attempt to sleep
5122 update server name to os.mbed.com
5103 Parse libraries with memap-arm
5116 Separate string literal from macro
5132 Fix MBED_ VERSION
5091 Correct booting on Nordic devices with ARMC6
5094 ARMC6 support for Cortex-M23
5044 Realtek_RTL8195AM fix for debug profile
5125 Refactor memap for speed
The upgrade should be generally transparent to developers using the Mbed OS RTOS APIs, but please report in the forums or contact us at [email protected] if you have any issues in this area.
Using the release
You can fetch the latest version of the Mbed OS 5.6 release from the mbed-os
GitHub repository using this branch.