|
在极海APM32F407芯片中,有一块64KB的SRAM空间,传说中的CCM(Core Coupled Memory),据说离内核特别的近,速度也特别的快。但在我之前的项目里面没有启用它。 CCM的映射地址为0x1000_0000,即其地址范围为0x1000_FFFF。 把数据搬运到CCM中的方法有两种:一种是通过启动后自己for循环把数据拷贝过去;另一种是通过链接器配置,让MCU在启动阶段自已把数据搬运过去。 对于第一种方式,由于全是自已操作,自已指定一个地址指针,然后,首先把数据拷贝过去,之后就可以使用了。简单,可靠。 重点分享一下另一种方式,通过链接器的方式。首先,我们需要在sct文件里面声明一个section,我们把它取名为CCMRAM,并指定起始地址0x1000_0000与空间大小0x10000。 - RW_CCMRAM 0x10000000 UNINIT 0x00010000 { ; RW data
- .ANY (+RW +ZI)
- }
我们在代码里面对变量的声明要添加attribute属性即可,如下方:
- // 把变量定义到CCMRAM区域,但具体位置由编译器决定
- uint8_t data_buf[256] __attribute__((section("CCMRAM")));
- // 把变量定义到具体地址,由程序员管理
- uint8_t data_buf[256] __attribute__((section(".ARM.__at_0x10000000")));
上述两种方式就可以充分利用CCM的速度优势。
|