随着单片机功能的拓展,协议栈or算法因此变得越来越庞大,此时内部RAM是不能满足需求了,必须将变量定义在外部RAM(如SDRAM)。
那么如何将变量定义在外部RAM呢?
1.定义变量至外部存储区域
方法1 直接定义
char buf[2048]__attribute__((at(0XC0000000)));
定义buf在起始地址为0xC0000000的连续区域,这种方法简单高效,但是对于数量很多的变量,就麻烦不实用了。
方法2 通过链接脚本定义
1.修改链接标本,定义一块区域
取消1处勾选,自定义链接脚本,点击2处编辑
定义一片区域,如上图(sdram_area)
2.定义宏定义
#define SDRAM_AREA_ATTRIBUTES __attribute__ ((section("sdram_area")))
3.定义变量
char buf[2048]SDRAM_AREA_ATTRIBUTES ;
char buf2[2048]SDRAM_AREA_ATTRIBUTES ;
此时变量已经定义至指定区域。相较于方法1,无需自己严格计算绝对地址,更加便捷。