STM32F407 CCM内存
之前项目用到了网络和多串口,选了STM32F407这款芯片,由于一直秉承着能跑就行的方式,在项目中也没啥问题。最近也是用这块芯片配合ucos做项目,由于开的任务多了一点,内存有点吃紧,难道192K内存这么快就吃光了?看了下map文件,没用那么多,在看了看手册,原来有64KCCM内存闲置,那必须得用起来要不然钱不是白花了。通过在网上各种查找终于解决。
我用的是IAR,需要修改.icf,用编辑器打开icf文件,拉到底找到place in CCRAM_region这行,默认这行对应的是{ section .ccram };在程序中如果使用指定位置的方式进行一些内存分配也可以,但不能用于DMA操作。如果修改为{ readwrite };就是当普通的内存使用,如果DMA用到这块了也可能出问题。最后一种方式是指定文件,将该文件中分配的内存从这里分配。方式如下:
place in CCRAM_region { readwrite object main.o,
readwrite object net***.o
};//{ section .ccram };
就是自己看看map文件,程序中那些文件或函数占用的内存多,又不涉及DMA,比如ucosii的任务堆栈空间等,我的ucosii任务分配在main.c操作的直接吧main.o的内存分配放在这里。
编辑完保存,make下工程,在看map文件中,没使用的内存空间就变成了
Unused ranges:
From To Size
---- -- ----
0x801'd5e4 0x80f'ffff 0xe'2a1c
0x1000'001a 0x1000'001b 0x2
0x1000'f830 0x1000'ffff 0x7d0
0x2000'0509 0x2000'050b 0x3
0x2001'bac0 0x2001'bfff 0x540
0x2001'c000 0x2001'ffff 0x4000
还有点没用上的空间,留着备用吧。以前没关注过map文件,还是很有用的。

浙公网安备 33010602011771号