修改sct文件
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00080000{ ; load region size_region
ER_IROM1 0x08000000 0x00080000{ ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00005000 { ; 内部SRAM
.ANY (+RW +ZI) ;其余的RW/ZI-data都分配到这里
}
RW_ERAM1 0x20005000 0x00007000{ ; 指定的存储空间
*.o(HEAP) ;选择堆区
.ANY (EXRAM) ;选择EXRAM节区
}
}
使用
//使用 __attribute__ 关键字定义指定变量定义到某节区
//语法: 变量定义 __attribute__ ((section ("节区名"))) = 变量值;
uint32_t testValue __attribute__ ((section ("EXRAM"))) =7 ;
//使用宏封装
//设置变量定义到“EXRAM”节区的宏
#define __EXRAM __attribute__ ((section ("EXRAM")))
//使用该宏定义变量到“指定的存储空间”
uint32_t testValue __EXRAM =7 ;
如果使用了外部的存储器需要修改stm32的启动文件
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
;从外部文件引入声明,格式:IMPORT 要调用的初始化函数名
;以下语句仅作演示,使用外部存储器时请去掉注释用的“;”号,本工程使用内部SRAM,无需初始化
;IMPORT FSMC_SRAM_Init
LDR R0, =SystemInit
BLX R0
;在__main之前调用FSMC_SRAM_Init进行初始化
;以下语句仅作演示,使用外部存储器时请去掉注释用的“;”号,本工程使用内部SRAM,无需初始化
;LDR R0, =FSMC_SRAM_Init
;BLX R0
LDR R0, =__main
BX R0
ENDP
摘自:https://doc.embedfire.com/mcu/stm32/f103/hal_generalzh/latest/doc/chapter40/chapter40.html#