STM32F4上CCM内存的使用小结
一、CCM内存介绍相较于F2,F4新加的一个特殊内部SRAM。64 KB CCM (内核耦合存储器)数据 RAM 不属于总线矩阵(请参见图 1 : STM32F405xx/07xx和 STM32F415xx/17xx 器件的系统架构)。只能通过 CPU 对其进行访问(dma等外设不能访问)。二、用法(基于MDK)1、自动分配法(不建议使用)设置完后,若重新编译,map文件里就会有这块SRAM的资源
一、CCM内存介绍
相较于F2,F4新加的一个特殊内部SRAM。64 KB CCM (内核耦合存储器)数据 RAM 不属于总线矩阵(请参见图 1 : STM32F405xx/07xx和 STM32F415xx/17xx 器件的系统架构)。只能通过 CPU 对其进行访问(dma等外设不能访问)。
二、用法(基于MDK)
1、自动分配法(不建议使用)
设置完后,若重新编译,map文件里就会有这块SRAM的资源分配——由于IRAM1优先使用,而且一般SRAM1够用,就不会给它分配资源。
2、修改配置文件指定相关参数使用该内存(建议,本人项目使用)
使用CCM一般都要手动分配资源(确保这块内存不被外设使用),自行分配内存需要这样操作:
①参考下图,不勾选USE Memory Layout from Targe Dialog,这时mdk会自动载入一个分散加载文件(.sct),修改这个文件就可以手动选择要放到CCM中的数据了。
②找到.sct文件进行修改。原本编译器生成的仅仅只有RW_IRAM1,先增加第二块CCM内存RW_IRAM2,并将不包含外设访问的相关变量的.o文件填入下方,即可将该.c文件下的变量定义入CCM内存中。
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x0800C000 0x00080000 { ; load region size_region
ER_IROM1 0x0800C000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x10000000 0x00010000 {
gui_array_page.o (+RW +ZI)
ff.o (+RW +ZI)
gt5668.o (+RW +ZI)
sys_fun.o (+RW +ZI)
sys_fun1.o (+RW +ZI)
w25qxx.o (+RW +ZI)
sdio_sdcard.o (+RW +ZI)
xmode_set2dlg.o (+RW +ZI)
gui_selfcheck_page.o (+RW +ZI)
synwoda.o (+RW +ZI)
xratong.o (+RW +ZI)
tianbd.o (+RW +ZI)
sungo.o (+RW +ZI)
murata.o (+RW +ZI)
vision.o (+RW +ZI)
}
}
③查看.map文件进行核对是否添加成功,如图显示,已成功。
3、如果想把程序中的某些变量放到CCM中,需要定义一个section,将这些变量放到这个section中,再由(.sct)文件分配到CCM中。
感谢前辈的帖子!!!
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
更多推荐
所有评论(0)