前言
本文介绍在keil工程中如何将程序中的变量定义在外部SRAM。
1.修改keil工程选项
(1)点击“魔法棒”:
(2)点击“Linker”选项卡:
(3)取消勾选“Use Memory Layout from Target Dialog”:
(4)添加之前keil工程生成的.sct(分散加载文件)到“Scatter File”:
2.修改分散加载文件
(1)在图下标红框位置填入以下内容:
这部分内容的解释为:
1:加载域名,map文件中会用该名称来标识空间
2:加载域基地址,也就是SRAM的起始地址
3:SRAM的最大容量,单位Byte
4:输入节区样式,也就是扩展SRAM节区的名字,ANY(xxx)表示节区名为xxx
(2)定义变量到外部SRAM:
在变量后面加上如下后缀即可:
__attribute__ ((section ("EXSRAM")))
如果需要初始化变量,可以这么写:
static rt_uint8_t rt_heap[RT_HEAP_SIZE] __attribute__ ((section ("EXSRAM"))) = {0};
3.验证
打开keil工程编译生成的.map文件:
可以看到我们定义的变量已经定义到了外部SRAM。
4 写在最后
在MCU启动文件的__main中会调用分散加载代码,初始化我们定义的变量,如果变量没有赋初值则全部设置成0,否则设置成设定值,随后初始化库,调用main函数。因此,我们必须在__main之前完成对外部SRAM的初始化,修改启动文件如下(图中红框处为新增部分,FSMC_SRAM_Init即为外部SRAM初始化函数名):