aboutsummaryrefslogtreecommitdiffstats
path: root/os
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2015-09-02 13:56:57 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2015-09-02 13:56:57 +0000
commit9b7696e58f3b006da9fdc60003f640197951681b (patch)
tree94381e5096cb9d5e1dacda694768d63dc358d596 /os
parent4f5b2d0c975d001949f34d082b1efd764f97c58a (diff)
downloadChibiOS-9b7696e58f3b006da9fdc60003f640197951681b.tar.gz
ChibiOS-9b7696e58f3b006da9fdc60003f640197951681b.tar.bz2
ChibiOS-9b7696e58f3b006da9fdc60003f640197951681b.zip
STM32F7-specific LD rules file introduced. Code is accessed through the ITCM bus, constants are accessed through AXI bus. Added DMA-friendly region handling.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8270 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os')
-rw-r--r--os/common/ports/ARMCMx/compilers/GCC/ld/STM32F746xG.ld24
-rw-r--r--os/common/ports/ARMCMx/compilers/GCC/ld/rules_STM32F7xx.ld (renamed from os/common/ports/ARMCMx/compilers/GCC/rules_dma.ld)34
-rw-r--r--os/common/ports/ARMCMx/compilers/GCC/rules.ld20
3 files changed, 46 insertions, 32 deletions
diff --git a/os/common/ports/ARMCMx/compilers/GCC/ld/STM32F746xG.ld b/os/common/ports/ARMCMx/compilers/GCC/ld/STM32F746xG.ld
index 8257ec809..f955bd899 100644
--- a/os/common/ports/ARMCMx/compilers/GCC/ld/STM32F746xG.ld
+++ b/os/common/ports/ARMCMx/compilers/GCC/ld/STM32F746xG.ld
@@ -23,15 +23,16 @@
*/
MEMORY
{
- flash : org = 0x08000000, len = 1M
- ram0 : org = 0x20010000, len = 256k /* SRAM1 + SRAM2 */
- ram1 : org = 0x20010000, len = 240k /* SRAM1 */
- ram2 : org = 0x2004C000, len = 16k /* SRAM2 */
- ram3 : org = 0x20000000, len = 64k /* DTCM-RAM */
- ram4 : org = 0x00000000, len = 16k /* ITCM-RAM */
- ram5 : org = 0x40024000, len = 4k /* BCKP SRAM */
- ram6 : org = 0x00000000, len = 0
- ram7 : org = 0x00000000, len = 0
+ flash : org = 0x08000000, len = 1M
+ flash_itcm : org = 0x00200000, len = 1M
+ ram0 : org = 0x20010000, len = 256k /* SRAM1 + SRAM2 */
+ ram1 : org = 0x20010000, len = 240k /* SRAM1 */
+ ram2 : org = 0x2004C000, len = 16k /* SRAM2 */
+ ram3 : org = 0x20000000, len = 64k /* DTCM-RAM */
+ ram4 : org = 0x00000000, len = 16k /* ITCM-RAM */
+ ram5 : org = 0x40024000, len = 4k /* BCKP SRAM */
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
}
/* RAM region to be used for Main stack. This stack accommodates the processing
@@ -48,4 +49,7 @@ REGION_ALIAS("DATA_RAM", ram0);
/* RAM region to be used for BSS segment.*/
REGION_ALIAS("BSS_RAM", ram0);
-INCLUDE rules.ld
+/* RAM region to be used for DMA segment.*/
+REGION_ALIAS("DMA_RAM", ram0);
+
+INCLUDE ld/rules_STM32F7xx.ld
diff --git a/os/common/ports/ARMCMx/compilers/GCC/rules_dma.ld b/os/common/ports/ARMCMx/compilers/GCC/ld/rules_STM32F7xx.ld
index 6292b20aa..93ed8af3a 100644
--- a/os/common/ports/ARMCMx/compilers/GCC/rules_dma.ld
+++ b/os/common/ports/ARMCMx/compilers/GCC/ld/rules_STM32F7xx.ld
@@ -52,7 +52,7 @@ SECTIONS
startup : ALIGN(16) SUBALIGN(16)
{
KEEP(*(.vectors))
- } > flash
+ } > flash_itcm AT > flash
constructors : ALIGN(4) SUBALIGN(4)
{
@@ -60,7 +60,7 @@ SECTIONS
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE(__init_array_end = .);
- } > flash
+ } > flash_itcm AT > flash
destructors : ALIGN(4) SUBALIGN(4)
{
@@ -68,44 +68,42 @@ SECTIONS
KEEP(*(.fini_array))
KEEP(*(SORT(.fini_array.*)))
PROVIDE(__fini_array_end = .);
- } > flash
+ } > flash_itcm AT > flash
.text : ALIGN(16) SUBALIGN(16)
{
*(.text)
*(.text.*)
- *(.rodata)
- *(.rodata.*)
*(.glue_7t)
*(.glue_7)
*(.gcc*)
- } > flash
+ } > flash_itcm AT > flash
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
- } > flash
+ } > flash_itcm AT > flash
.ARM.exidx : {
PROVIDE(__exidx_start = .);
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
PROVIDE(__exidx_end = .);
- } > flash
+ } > flash_itcm AT > flash
.eh_frame_hdr :
{
*(.eh_frame_hdr)
- } > flash
+ } > flash_itcm AT > flash
.eh_frame : ONLY_IF_RO
{
*(.eh_frame)
- } > flash
-
+ } > flash_itcm AT > flash
+
.textalign : ONLY_IF_RO
{
. = ALIGN(8);
- } > flash
+ } > flash_itcm AT > flash
. = ALIGN(4);
_etext = .;
@@ -156,6 +154,18 @@ SECTIONS
PROVIDE(_edata = .);
} > DATA_RAM AT > flash
+ /* Constants are placed in the normal flash (non-ITCM) region because it
+ is desirable to make them DMA-accessible.*/
+ .rodata : ALIGN(4)
+ {
+ . = ALIGN(4);
+ PROVIDE(__rodata_base__ = .);
+ *(.rodata)
+ *(.rodata.*)
+ . = ALIGN(4);
+ PROVIDE(__rodata_end__ = .);
+ } > flash
+
.bss : ALIGN(4)
{
. = ALIGN(4);
diff --git a/os/common/ports/ARMCMx/compilers/GCC/rules.ld b/os/common/ports/ARMCMx/compilers/GCC/rules.ld
index 485c0f0fa..0ecb156cc 100644
--- a/os/common/ports/ARMCMx/compilers/GCC/rules.ld
+++ b/os/common/ports/ARMCMx/compilers/GCC/rules.ld
@@ -52,7 +52,7 @@ SECTIONS
startup : ALIGN(16) SUBALIGN(16)
{
KEEP(*(.vectors))
- } > flash
+ } > flash_itcm AT > flash
constructors : ALIGN(4) SUBALIGN(4)
{
@@ -60,7 +60,7 @@ SECTIONS
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE(__init_array_end = .);
- } > flash
+ } > flash_itcm AT > flash
destructors : ALIGN(4) SUBALIGN(4)
{
@@ -68,7 +68,7 @@ SECTIONS
KEEP(*(.fini_array))
KEEP(*(SORT(.fini_array.*)))
PROVIDE(__fini_array_end = .);
- } > flash
+ } > flash_itcm AT > flash
.text : ALIGN(16) SUBALIGN(16)
{
@@ -79,33 +79,33 @@ SECTIONS
*(.glue_7t)
*(.glue_7)
*(.gcc*)
- } > flash
+ } > flash_itcm AT > flash
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
- } > flash
+ } > flash_itcm AT > flash
.ARM.exidx : {
PROVIDE(__exidx_start = .);
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
PROVIDE(__exidx_end = .);
- } > flash
+ } > flash_itcm AT > flash
.eh_frame_hdr :
{
*(.eh_frame_hdr)
- } > flash
+ } > flash_itcm AT > flash
.eh_frame : ONLY_IF_RO
{
*(.eh_frame)
- } > flash
-
+ } > flash_itcm AT > flash
+
.textalign : ONLY_IF_RO
{
. = ALIGN(8);
- } > flash
+ } > flash_itcm AT > flash
. = ALIGN(4);
_etext = .;