-
Notifications
You must be signed in to change notification settings - Fork 3k
STM32 baremetal support step1 (F0/F1/F3/H7/L0) #12992
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
0xc0170
merged 5 commits into
ARMmbed:master
from
jeromecoutant:PR_BAREMETAL_SUPPORT_STEP1
Jun 4, 2020
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
794e0aa
STM32F0 baremetal support
jeromecoutant 96016ae
STM32F1 baremetal support
jeromecoutant 739b204
STM32F3 baremetal support
jeromecoutant 9b819c7
STM32H7 baremetal support
jeromecoutant b57b12c
STM32L0 baremetal support
jeromecoutant File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
76 changes: 37 additions & 39 deletions
76
targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/TOOLCHAIN_ARM/stm32f070xb.sct
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,52 @@ | ||
#! armcc -E | ||
; Scatter-Loading Description File | ||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
; Copyright (c) 2014, STMicroelectronics | ||
; All rights reserved. | ||
; | ||
; Redistribution and use in source and binary forms, with or without | ||
; modification, are permitted provided that the following conditions are met: | ||
; | ||
; 1. Redistributions of source code must retain the above copyright notice, | ||
; this list of conditions and the following disclaimer. | ||
; 2. Redistributions in binary form must reproduce the above copyright notice, | ||
; this list of conditions and the following disclaimer in the documentation | ||
; and/or other materials provided with the distribution. | ||
; 3. Neither the name of STMicroelectronics nor the names of its contributors | ||
; may be used to endorse or promote products derived from this software | ||
; without specific prior written permission. | ||
; | ||
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
; SPDX-License-Identifier: BSD-3-Clause | ||
;****************************************************************************** | ||
;* @attention | ||
;* | ||
;* Copyright (c) 2014-2020 STMicroelectronics. | ||
;* All rights reserved. | ||
;* | ||
;* This software component is licensed by ST under BSD 3-Clause license, | ||
;* the "License"; You may not use this file except in compliance with the | ||
;* License. You may obtain a copy of the License at: | ||
;* opensource.org/licenses/BSD-3-Clause | ||
;* | ||
;****************************************************************************** | ||
|
||
#if !defined(MBED_APP_START) | ||
#define MBED_APP_START MBED_ROM_START | ||
#endif | ||
|
||
#if !defined(MBED_APP_SIZE) | ||
#define MBED_APP_SIZE MBED_ROM_SIZE | ||
#endif | ||
|
||
#if !defined(MBED_BOOT_STACK_SIZE) | ||
#define MBED_BOOT_STACK_SIZE 0x400 | ||
/* This value is normally defined by the tools to 0x1000 for bare metal and 0x400 for RTOS */ | ||
#define MBED_BOOT_STACK_SIZE 0x400 | ||
#endif | ||
|
||
#define Stack_Size MBED_BOOT_STACK_SIZE | ||
/* Round up VECTORS_SIZE to 8 bytes */ | ||
#define NVIC_NUM_VECTORS 48 | ||
#define VECTORS_SIZE (((NVIC_NUM_VECTORS * 4) + 7) AND ~7) | ||
|
||
; STM32F070RB: 128KB FLASH (0x20000) + 16KB RAM (0x4000) | ||
LR_IROM1 MBED_APP_START MBED_APP_SIZE { | ||
|
||
LR_IROM1 0x08000000 0x20000 { ; load region size_region | ||
ER_IROM1 0x08000000 0x20000 { ; load address = execution address | ||
*.o (RESET, +First) | ||
*(InRoot$$Sections) | ||
.ANY (+RO) | ||
ER_IROM1 MBED_APP_START MBED_APP_SIZE { | ||
*.o (RESET, +First) | ||
*(InRoot$$Sections) | ||
.ANY (+RO) | ||
} | ||
|
||
; 48 vectors = 192 bytes (0xC0) to be reserved in RAM | ||
RW_IRAM1 (0x20000000+0xC0) (0x4000-0xC0-Stack_Size) { ; RW data | ||
.ANY (+RW +ZI) | ||
RW_IRAM1 (MBED_RAM_START + VECTORS_SIZE) { ; RW data | ||
.ANY (+RW +ZI) | ||
} | ||
|
||
ARM_LIB_STACK (0x20000000+0x4000) EMPTY -Stack_Size { ; stack | ||
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_START + MBED_RAM_SIZE - MBED_BOOT_STACK_SIZE - AlignExpr(ImageLimit(RW_IRAM1), 16)) { ; Heap growing up | ||
} | ||
} | ||
|
||
ARM_LIB_STACK (MBED_RAM_START + MBED_RAM_SIZE) EMPTY -MBED_BOOT_STACK_SIZE { ; Stack region growing down | ||
} | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,50 @@ | ||
/* Linker script to configure memory regions. */ | ||
/* | ||
* SPDX-License-Identifier: BSD-3-Clause | ||
****************************************************************************** | ||
* @attention | ||
* | ||
* Copyright (c) 2016-2020 STMicroelectronics. | ||
* All rights reserved. | ||
* | ||
* This software component is licensed by ST under BSD 3-Clause license, | ||
* the "License"; You may not use this file except in compliance with the | ||
* License. You may obtain a copy of the License at: | ||
* opensource.org/licenses/BSD-3-Clause | ||
* | ||
****************************************************************************** | ||
*/ | ||
|
||
|
||
#if !defined(MBED_APP_START) | ||
#define MBED_APP_START MBED_ROM_START | ||
#endif | ||
|
||
#if !defined(MBED_APP_SIZE) | ||
#define MBED_APP_SIZE MBED_ROM_SIZE | ||
#endif | ||
|
||
#if !defined(MBED_BOOT_STACK_SIZE) | ||
#define MBED_BOOT_STACK_SIZE 0x400 | ||
/* This value is normally defined by the tools | ||
to 0x1000 for bare metal and 0x400 for RTOS */ | ||
#define MBED_BOOT_STACK_SIZE 0x400 | ||
#endif | ||
|
||
StackSize = MBED_BOOT_STACK_SIZE; | ||
/* Round up VECTORS_SIZE to 8 bytes */ | ||
#define NVIC_NUM_VECTORS 48 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is already defined in |
||
#define VECTORS_SIZE (((NVIC_NUM_VECTORS * 4) + 7) & 0xFFFFFFF8) | ||
|
||
MEMORY | ||
{ | ||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128k | ||
RAM (xrw) : ORIGIN = 0x200000C0, LENGTH = 16k - 0x0C0 | ||
{ | ||
FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE | ||
RAM (rwx) : ORIGIN = MBED_RAM_START + VECTORS_SIZE, LENGTH = MBED_RAM_SIZE - VECTORS_SIZE | ||
} | ||
|
||
/* Linker script to place sections and symbol values. Should be used together | ||
* with other linker script that defines memory regions FLASH and RAM. | ||
* It references following symbols, which must be defined in code: | ||
* Reset_Handler : Entry of reset handler | ||
* | ||
* | ||
* It defines following symbols, which code can use without definition: | ||
* __exidx_start | ||
* __exidx_end | ||
|
@@ -47,6 +75,7 @@ SECTIONS | |
{ | ||
KEEP(*(.isr_vector)) | ||
*(.text*) | ||
|
||
KEEP(*(.init)) | ||
KEEP(*(.fini)) | ||
|
||
|
@@ -83,7 +112,7 @@ SECTIONS | |
|
||
__etext = .; | ||
_sidata = .; | ||
|
||
.data : AT (__etext) | ||
{ | ||
__data_start__ = .; | ||
|
@@ -104,7 +133,6 @@ SECTIONS | |
KEEP(*(.init_array)) | ||
PROVIDE_HIDDEN (__init_array_end = .); | ||
|
||
|
||
. = ALIGN(8); | ||
/* finit data */ | ||
PROVIDE_HIDDEN (__fini_array_start = .); | ||
|
@@ -120,20 +148,19 @@ SECTIONS | |
|
||
} > RAM | ||
|
||
/* .stack section doesn't contains any symbols. It is only | ||
* used for linker to reserve space for the main stack section | ||
*/ | ||
.stack (NOLOAD): | ||
/* Uninitialized data section | ||
* This region is not initialized by the C/C++ library and can be used to | ||
* store state across soft reboots. */ | ||
.uninitialized (NOLOAD): | ||
{ | ||
__StackLimit = .; | ||
*(.stack*); | ||
. += StackSize - (. - __StackLimit); | ||
. = ALIGN(32); | ||
__uninitialized_start = .; | ||
*(.uninitialized) | ||
KEEP(*(.keep.uninitialized)) | ||
. = ALIGN(32); | ||
__uninitialized_end = .; | ||
} > RAM | ||
__StackTop = ADDR(.stack) + StackSize; | ||
_estack = __StackTop; | ||
__StackLimit = ADDR(.stack); | ||
PROVIDE(__stack = __StackTop); | ||
|
||
|
||
.bss : | ||
{ | ||
. = ALIGN(8); | ||
|
@@ -149,14 +176,27 @@ SECTIONS | |
.heap (COPY): | ||
{ | ||
__end__ = .; | ||
end = __end__; | ||
*(.heap*); | ||
. += (ORIGIN(RAM) + LENGTH(RAM) - .); | ||
PROVIDE(end = .); | ||
*(.heap*) | ||
. = ORIGIN(RAM) + LENGTH(RAM) - MBED_BOOT_STACK_SIZE; | ||
__HeapLimit = .; | ||
} > RAM | ||
|
||
PROVIDE(__heap_size = SIZEOF(.heap)); | ||
PROVIDE(__mbed_sbrk_start = ADDR(.heap)); | ||
PROVIDE(__mbed_krbs_start = ADDR(.heap) + SIZEOF(.heap)); | ||
/* .stack_dummy section doesn't contains any symbols. It is only | ||
* used for linker to calculate size of stack sections, and assign | ||
* values to stack symbols later */ | ||
.stack_dummy (COPY): | ||
{ | ||
*(.stack*) | ||
} > RAM | ||
|
||
/* Set stack top to end of RAM, and stack limit move down by | ||
* size of stack_dummy section */ | ||
__StackTop = ORIGIN(RAM) + LENGTH(RAM); | ||
_estack = __StackTop; | ||
__StackLimit = __StackTop - MBED_BOOT_STACK_SIZE; | ||
PROVIDE(__stack = __StackTop); | ||
|
||
/* Check if data + heap + stack exceeds RAM limit */ | ||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") | ||
} |
67 changes: 45 additions & 22 deletions
67
targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/TOOLCHAIN_IAR/stm32f070xb.icf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,59 @@ | ||
/*###ICF### Section handled by ICF editor, don't touch! ****/ | ||
/*-Editor annotation file-*/ | ||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ | ||
/*-Specials-*/ | ||
define symbol __ICFEDIT_intvec_start__ = 0x08000000; | ||
/*-Memory Regions-*/ | ||
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; | ||
define symbol __ICFEDIT_region_ROM_end__ = 0x0801FFFF; | ||
define symbol __ICFEDIT_region_RAM_start__ = 0x200000C0; | ||
define symbol __ICFEDIT_region_RAM_end__ = 0x20003FFF; | ||
/*-Sizes-*/ | ||
/* Linker script to configure memory regions. | ||
* | ||
* SPDX-License-Identifier: BSD-3-Clause | ||
****************************************************************************** | ||
* @attention | ||
* | ||
* Copyright (c) 2016-2020 STMicroelectronics. | ||
* All rights reserved. | ||
* | ||
* This software component is licensed by ST under BSD 3-Clause license, | ||
* the "License"; You may not use this file except in compliance with the | ||
* License. You may obtain a copy of the License at: | ||
* opensource.org/licenses/BSD-3-Clause | ||
* | ||
****************************************************************************** | ||
*/ | ||
/* Device specific values */ | ||
|
||
/* Tools provide -DMBED_ROM_START=xxx -DMBED_ROM_SIZE=xxx -DMBED_RAM_START=xxx -DMBED_RAM_SIZE=xxx */ | ||
|
||
define symbol VECTORS = 48; /* This value must match NVIC_NUM_VECTORS in cmsis_nvic.h */ | ||
define symbol HEAP_SIZE = 0x1000; | ||
|
||
/* Common - Do not change */ | ||
|
||
if (!isdefinedsymbol(MBED_APP_START)) { | ||
define symbol MBED_APP_START = MBED_ROM_START; | ||
} | ||
|
||
if (!isdefinedsymbol(MBED_APP_SIZE)) { | ||
define symbol MBED_APP_SIZE = MBED_ROM_SIZE; | ||
} | ||
|
||
if (!isdefinedsymbol(MBED_BOOT_STACK_SIZE)) { | ||
/* This value is normally defined by the tools | ||
to 0x1000 for bare metal and 0x400 for RTOS */ | ||
define symbol MBED_BOOT_STACK_SIZE = 0x400; | ||
} | ||
define symbol __ICFEDIT_size_cstack__ = MBED_BOOT_STACK_SIZE; | ||
define symbol __ICFEDIT_size_heap__ = 0xC00; | ||
/**** End of ICF editor section. ###ICF###*/ | ||
|
||
/* Round up VECTORS_SIZE to 8 bytes */ | ||
define symbol VECTORS_SIZE = ((VECTORS * 4) + 7) & ~7; | ||
define symbol RAM_REGION_START = MBED_RAM_START + VECTORS_SIZE; | ||
define symbol RAM_REGION_SIZE = MBED_RAM_SIZE - VECTORS_SIZE; | ||
|
||
define memory mem with size = 4G; | ||
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; | ||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; | ||
define region ROM_region = mem:[from MBED_APP_START size MBED_APP_SIZE]; | ||
define region RAM_region = mem:[from RAM_REGION_START size RAM_REGION_SIZE]; | ||
|
||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; | ||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; | ||
define block CSTACK with alignment = 8, size = MBED_BOOT_STACK_SIZE { }; | ||
define block HEAP with alignment = 8, size = HEAP_SIZE { }; | ||
|
||
initialize by copy { readwrite }; | ||
do not initialize { section .noinit }; | ||
|
||
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; | ||
place at address mem: MBED_APP_START { readonly section .intvec }; | ||
|
||
place in ROM_region { readonly }; | ||
place in RAM_region { readwrite, | ||
block CSTACK, block HEAP }; | ||
|
||
export symbol __ICFEDIT_region_RAM_start__; | ||
export symbol __ICFEDIT_region_RAM_end__; |
37 changes: 11 additions & 26 deletions
37
targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/cmsis_nvic.h
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,18 @@ | ||
/* mbed Microcontroller Library | ||
* CMSIS-style functionality to support dynamic vectors | ||
******************************************************************************* | ||
* Copyright (c) 2015, STMicroelectronics | ||
* All rights reserved. | ||
* SPDX-License-Identifier: BSD-3-Clause | ||
****************************************************************************** | ||
* @attention | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions are met: | ||
* <h2><center>© Copyright (c) 2015-2020 STMicroelectronics. | ||
* All rights reserved.</center></h2> | ||
* | ||
* 1. Redistributions of source code must retain the above copyright notice, | ||
* this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright notice, | ||
* this list of conditions and the following disclaimer in the documentation | ||
* and/or other materials provided with the distribution. | ||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | ||
* may be used to endorse or promote products derived from this software | ||
* without specific prior written permission. | ||
* This software component is licensed by ST under BSD 3-Clause license, | ||
* the "License"; You may not use this file except in compliance with the | ||
* License. You may obtain a copy of the License at: | ||
* opensource.org/licenses/BSD-3-Clause | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should this header be included in the appropriate linker files? |
||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
******************************************************************************* | ||
*/ | ||
****************************************************************************** | ||
*/ | ||
|
||
#ifndef MBED_CMSIS_NVIC_H | ||
#define MBED_CMSIS_NVIC_H | ||
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is already defined in
cmsis_nvic.h
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, but cmsis_nvic.h for M0 core is not so simple as other cores.
So redefining value here is a good workaround.
I ill make it better later
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I dont understand, we can't get the value from the header file to be in here ? Or at least to check if its not already defined ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, we can, but no with a "quick" patch.
So I used the method described in https://os.mbed.com/docs/mbed-os/v5.15/porting/porting-bootstrap.html
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is it also in
cmsis_nvic.h
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
because mbed needs it...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
True. Linker script should do
#include "../cmsis_nvic.h"
and not define it again. This is a bug in our docs.@hugueskamba can you create an issue if you agree? the docs should be updated. The default place in our targets is cmsis_nvic.h file, and linker script should include it (or we need to change this and refactor most of our targets).