将变量分配到指定RAM区域
1.引子
项目中要使用灯带,而且灯带是由一组串行移位锁存器构成,通过一条数据线一次性将所有的灯珠数据传完毕。
为了提升通信效率,节约CPU资源,采用异步方式进行操作灯珠。即CPU 向一个RAM区域内写数据,等数据写好了,通知DMA控制器,将此区域的数据搬给PWM生成器,PWM由此生成波形。
就这样,CPU只管更新内存数据就可以了,这样就大提高了CPU的利用率。
但是有一个问题,就是这个MCU的DMA控制器只能操作0x20000000~0x20020000
区间的内存空间。故需要将这个数据BUFFER指定在这片内存空间中。
2.实现方法
KEIL5的方法
1.采用GUI配置
GCC的方法
1.配置链接器选项。先设定某个段的开始地址
LDFLAGS += -Wl,--section-start=.config_addr=0x20000000
2.将后将将想要的变量放入到这个段中即可。
uint16_t pixel_buffer[256] __attribute__(section(".config_addr")) = {0};
3.结果验证
通过查看LINKER生成的MAP文件即可知道
KEIL