1.CCM内存介绍:
相较于F2,F4新加的一个特殊内部SRAM。64 KB CCM (内核耦合存储器)数据 RAM 不属于总线矩阵(请参见图 1 : STM32F405xx/07xx和 STM32F415xx/17xx 器件的系统架构)。只能通过 CPU 对其进行访问(dma等外设不能访问)。
2.用法(基于MDK):
① 先启用这部分SRAM。
设置完后,若重新编译,map文件里就会有这块SRAM的资源分配——由于IRAM1优先使用,而且一般SRAM1够用,就不会给它分配资源。
② 使用CCM一般都要手动分配资源(确保这块内存不被外设使用),自行分配内存需要这样操作:
参考下图,不勾选USE Memory Layout from Targe Dialog,这时mdk会自动载入一个分散加载文件(.sct),修改这个文件就可以手动选择要放到CCM中的数据了。
③ 查看.map文件,将需要的文件架到(.sct)文件中。
例如,上图中把mem.o和memp.o中的数据放到CCM中,可以这么设置:
编译后,可以看到资源分配:
④如果想把程序中的某些变量放到CCM中,需要定义一个section,将这些变量放到这个section中,再由(.sct)文件分配到CCM中。
编译后的内存分配:
备注:
1.测试过程中,尝试直接指定变量的内存到CCM的方法,但是定义多个变量时,编译报错。。。
2.据说把系统堆栈放到CCM中,可以提高处理效率,暂时没法测试。
3.将CCM用作高速运算缓冲,也就这种高大上的应用上才能发挥他真正存在的价值吧。
4.感谢网友大神的帖子:
http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=602255&extra=page=&page=1
https://blog.csdn.net/zcshoucsdn/article/details/79176306
https://blog.csdn.net/anbaixiu/article/details/78832009
https://blog.csdn.net/louyangyang91/article/details/51545130