将变量分配到指定RAM区域

1.引子

项目中要使用灯带,而且灯带是由一组串行移位锁存器构成,通过一条数据线一次性将所有的灯珠数据传完毕。

为了提升通信效率,节约CPU资源,采用异步方式进行操作灯珠。即CPU 向一个RAM区域内写数据,等数据写好了,通知DMA控制器,将此区域的数据搬给PWM生成器,PWM由此生成波形。

就这样,CPU只管更新内存数据就可以了,这样就大提高了CPU的利用率。

但是有一个问题,就是这个MCU的DMA控制器只能操作0x20000000~0x20020000区间的内存空间。故需要将这个数据BUFFER指定在这片内存空间中。

2.实现方法

KEIL5的方法

1.采用GUI配置

image

GCC的方法

1.配置链接器选项。先设定某个段的开始地址

LDFLAGS += -Wl,--section-start=.config_addr=0x20000000

2.将后将将想要的变量放入到这个段中即可。

uint16_t pixel_buffer[256] __attribute__(section(".config_addr")) = {0};

3.结果验证

通过查看LINKER生成的MAP文件即可知道

KEIL

image

posted @ 2022-07-12 19:03  海林的菜园子  阅读(565)  评论(0编辑  收藏  举报