Commit Graph

23 Commits (feature-sdio)

Author SHA1 Message Date
Kevin Bracey fb6aa3ef4f Clean up ARM toolchain heap+stack setup in targets
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.
2019-10-23 14:53:49 +03:00
deepikabhavnani 0ff2d42143 Heap and stack size picked from linker files,export symbols not needed 2019-02-28 19:54:38 -06:00
deepikabhavnani 0dc5561991 Guard RAM start and size defines 2019-02-28 19:54:38 -06:00
deepikabhavnani 6b98bc2771 Target_SiLabs: Add ARM_LIB_STACK and ARM_LIB_HEAP section
Instead of user defined symbols in assembly files or C files,
use linker scripts to add heap and stack - this is inconsistent
with ARM std linker scripts
2019-02-28 19:54:38 -06:00
Deepika 1f57568015 TARGET_Silicon_Labs Setup heap limit and size 2019-02-19 15:49:49 -06:00
Przemyslaw Stekiel d30a14e64f [Silicon_Labs] Support boot stack size configuration option 2019-01-08 15:32:06 +01:00
Deepika 08051f5c23 SiLabs: Fix alignment of execute region to 8-byte boundary
--legacyalign, --no_legacyalign are deprecated from ARMC6 compiler, in order to
remove deprecated flags all linker files (GCC and IAR as well to have uniformity)
should strictly align to 8-byte boundary
2018-10-09 10:15:07 -05:00
PHST 804edd578e Place "MBED_WEAK" for IAR-Toolchain before the type. 2018-07-17 08:12:41 +02:00
PHST de266d827e Added missing include. 2018-07-16 19:28:54 +02:00
PHST 1658349965 Replace __attribute__((weak)) with MBED_WEAK 2018-07-16 15:38:25 +02:00
PHST 95d78df962 EFM32 Make PeripheralPins.c configuration tables weakly defined to be overridable.
See issue "https://github.com/ARMmbed/mbed-os/issues/7424#issuecomment-404233377"
2018-07-16 11:48:53 +02:00
amq fdc2274720 EFM32: make peripherals conditional
* MCUs within a family like EFM32GG can omit some peripherals, e.g. EFM32GG230 doesn't have UART
* This commit adds a check to make them compilable, relevant mainly for custom boards
2018-01-31 17:35:26 +00:00
Jimmy Brisson c7d6bbe295 Upcase all assembler file extensions 2017-06-20 14:50:08 -05:00
Aksel Skauge Mellbye 5d906a74e6 [Silicon Labs] Add bootloader support
* Make memory sections configurable in linker files
* Dynamically determine vector location in flash for NVIC relocation
* Advertise bootloader support in targets.json
2017-06-06 16:26:11 -05:00
Kevin Gilbert 83a510751b Added mapping to BTN-labelled switches 2017-04-28 11:31:48 -05:00
Steven Cooreman ca91e7c2d5 Update to Gecko SDK 5.1.2
Updating CMSIS device headers
2017-03-20 16:34:12 +01:00
Steven Cooreman 5a885137f0 [EFM32] Move board controller pin setting to config system 2016-10-27 23:21:39 -07:00
Steven Cooreman 0b6ed71626 [EFM32] Move clock configuration to target settings
Moving the per-board clock configuration (which oscillators are available on the board, their frequencies, and which ones to use) as config options to the target database. This way, they're more easily overridable when third parties start creating boards with EFM32 MCUs
2016-10-24 18:29:25 +02:00
Steven Cooreman 758d160384 [EFM32] Collapse NVIC relocation handling
Gecko SDK 5.0.0 provides a convenient define for the amount of vectors wired on the chip, so we can use that to collapse the cmsis_nvic.h header
2016-10-24 18:29:00 +02:00
Steven Cooreman 3c450f1b37 [EFM32] Update emlib to version 5.0.0 in preparation for new targets
* Updated cmsis headers to match emlib 5.0.0
* Updated GPIO handling to match new header guards in use
* Updated linker scripts to match emlib 5.0.0
2016-10-24 18:26:02 +02:00
Steven Cooreman bb03e8c9e4 [EFM32] More condensation 2016-10-24 18:25:21 +02:00
Steven Cooreman 6315147faf [EFM32] Use serial configuration from platform
mbed added configuration options for default serial baud rate and stdio baud rate, so we can get rid of the workaround in the HAL
2016-10-24 18:25:11 +02:00
Steven Cooreman 4df6986100 [EFM32] Use targets.json to improve directory structure
Now that we have targets.json, we get target inheritance and can use it to clean up the EFM32 folder structure.
* In the top-level EFM32 folder, there are now folders per MCU family (Giant, Leopard, ...)
* Those family folders contain the CMSIS headers in the 'device' subfolder, as well as global family headers (i.e. mapping of pins to peripherals)
* Inside of the family folder, there is a per-target folder containing target settings. In the future, we'll want to get rid of those by using the config system provided by targets.json
2016-10-24 18:24:49 +02:00