ARM Compiler 6.13 testing revealed linker errors pointing out conflicting use of `__user_setup_stackheap` and `__user_initial_stackheap` in some targets. Remove the unwanted `__user_initial_stackheap` from the targets - the setup is centralised in the common platform code. Looking into this, a number of other issues were highlighted * Almost all targets had `__initial_sp` hardcoded in assembler, rather than getting it from the scatter file. This was behind issue #11313. Fix this generally. * A few targets' `__initial_sp` values did not match the scatter file layout, in some cases meaning they were overlapping heap space. They now all use the area reserved in the scatter file. If any problems are seen, then there is an error in the scatter file. * A number of targets were reserving unneeded space for heap and stack in their startup assembler, on top of the space reserved in the scatter file, so wasting a few K. A couple were using that space for the stack, rather than the space in the scatter file. To clarify expected behaviour: * Each scatter file contains empty regions `ARM_LIB_HEAP` and `ARM_LIB_STACK` to reserve space. `ARM_LIB_STACK` is sized by the macro `MBED_BOOT_STACK_SIZE`, which is set by the tools. `ARM_LIB_HEAP` is generally the space left over after static RAM and stack. * The address of the end of `ARM_LIB_STACK` is written into the vector table and on reset the CPU sets MSP to that address. * The common platform code in Mbed OS provides `__user_setup_stackheap` for the ARM library. The ARM library calls this during startup, and it calls `__mbed_user_setup_stackheap`. * The default weak definition of `__mbed_user_setup_stackheap` does not modify SP, so we remain on the boot stack, and the heap is set to the region described by `ARM_LIB_HEAP`. If `ARM_LIB_HEAP` doesn't exist, then the heap is the space from the end of the used data in `RW_IRAM1` to the start of `ARM_LIB_STACK`. * Targets can override `__mbed_user_setup_stackheap` if they want. Currently only Renesas (ARMv7-A class) devices do. * If microlib is in use, then it doesn't call `__user_setup_stackheap`. Instead it just finds and uses `ARM_LIB_STACK` and `ARM_LIB_HEAP` itself. |
||
|---|---|---|
| .github | ||
| TESTS | ||
| TEST_APPS | ||
| UNITTESTS | ||
| cmsis | ||
| components | ||
| docs | ||
| drivers | ||
| events | ||
| features | ||
| hal | ||
| platform | ||
| rtos | ||
| targets | ||
| tools | ||
| .astyleignore | ||
| .astylerc | ||
| .coveragerc | ||
| .gitattributes | ||
| .gitignore | ||
| .pylintrc | ||
| .travis.yml | ||
| CONTRIBUTING.md | ||
| DOXYGEN_FRONTPAGE.md | ||
| Jenkinsfile | ||
| LICENSE-apache-2.0.txt | ||
| LICENSE.md | ||
| README.md | ||
| doxyfile_options | ||
| doxygen_options.json | ||
| logo.png | ||
| mbed.h | ||
| requirements.txt | ||
README.md
Arm Mbed OS is an open source embedded operating system designed specifically for the "things" in the Internet of Things. It includes all the features you need to develop a connected product based on an Arm Cortex-M microcontroller, including security, connectivity, an RTOS and drivers for sensors and I/O devices.
Mbed OS provides a platform that includes:
- Security foundations.
- Cloud management services.
- Drivers for sensors, I/O devices and connectivity.
Release notes
The release notes detail the current release. You can also find information about previous versions.
License and contributions
The software is provided under the Apache-2.0 license. Contributions to this project are accepted under the same license. Please see contributing.md for more information.
This project contains code from other projects. The original license text is included in those source files. They must comply with our license guide.
Folders containing files under different permissive license than Apache 2.0 are listed in the LICENSE file.
Getting started for developers
We have a developer website for asking questions, engaging with others, finding information on boards and components, using an online IDE and compiler, reading the documentation and learning about what's new and what's coming next in Mbed OS.
Getting started for contributors
We also have a contributing and publishing guide that covers licensing, contributor agreements and style guidelines.
Documentation
For more information about Mbed OS, please see our published documentation. It includes Doxygen for our APIs, step-by-step tutorials, porting information and background reference materials about our architecture and tools.
To contribute to this documentation, please see the mbed-os-5-docs repository.
