SRAM在STM32中如何怎么用?

2018-08-01 10:09:32 204

STM32等ARM使用SRAM首先用一个分散加载文件,告诉编译你有哪些存储空间,包括RAM和ROM。然后malloc就从ram中分配内存。分散加载文件时arm 构架规定的

举个IAR 5.4的官方历程 例子
1、IAR工程打开后,从project-》option-》link看到link文件来自$PROJ_DIR$\STM32F10x_FLASH.icf,对应安装目录的D:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\examples\ST\STM32F10x\stm32f10x_stdperiph_lib\Project\STM32F10x_StdPeriph_Examples\FSMC\SRAM\stm32f10x_flash.icf
这个文件下定义了几个预编译命令,告诉编译器ROM/RAM起始和终止地址在哪。
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x08000000 ;
define symbol __ICFEDIT_region_ROM_end__     = 0x0807FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x2000FFFF;
/*-Sizes-*/__ICFEDIT_size_cstack__
define symbol    = 0x400;
define symbol __ICFEDIT_size_heap__     = 0x200;
/**** End of ICF editor section. ###ICF###*/

2、同时在这个文件
D:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\config\ide\IcfEditor\cortex_v1_0.xml文件里规定了堆栈和RAM ROM的位置是哪个地址。其中ROM是程序存放地址,RAM是分配内存的地址。


Start:
End:
__ICFEDIT_region_ROM_start__
__ICFEDIT_region_ROM_end__
The start address of the ROM region
The end address of the ROM region
__ICFEDIT_region_RAM_start__
__ICFEDIT_region_RAM_end__
The start address of the RAM region
The end address of the RAM region

3、以上几个文件综合起来生成一个分散加载文件,达到合理分配内存的目的。给你一个IAR工程例子D:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\examples\ST\STM32F10x\stm32f10x_stdperiph_lib\Project\STM32F10x_StdPeriph_Examples\FSMC\SRAM
4、建议多看看arm分散加载,还可以自己定义分散加载,规定每个文件编译好放在哪个地址, 哪个文件/变量分配在哪个地址。
5、DSP和ARM都可以使用这种方法,具体使用查看编译器手册。
6、在MDK中直接直接指定片外片内内存的。或者自己写一个分散加载文件,编译使用那个分散加载来编译。



矽控物联

矽控电子核心团队拥有十余年的硬件正向研发,生产制程,测试手法,品质控制经验。尤其擅长嵌入式ARM平台的工控物联网产品,以及海思平台的IPC视频类模组开发,为您的产品从创意到落地、批量市场化助力。公司可提供从硬件设计(原理开发及PCB Layout),PCB制板,SMT及接插件焊接,产品测试,产品老化全流程外包服务,收费合理,品质可靠。

垂询电话:0510-83488567-1     业务邮箱:wxdianzi#foxmail.com (#更换为@)