STM32F4 定义ucosii到CCM

STM32F4说是有192KRAM 但是很是很坑。192k分为两部分128k普通RAM和64K CCM RAM,CCM只能内核调用,外设无法使用。本来想着192KRAM挺好,结果仔细看悲剧了。但是也不能浪费,可以尝试使用它,把UCOS内核数据放到CCM。网上搜索到一个FreeRTOS的照着他的自己弄了弄。
http://www.stmcu.org/module/forum/thread-604814-1-1.html再次感谢该网友。。。

STM32F4 定义ucosii到CCM
文章图片


1.勾选IARM2 确认使用CCM
此时编译程序后打开.map文件会发现使用了CCM但是没有数据定义到这块RAM。同时发现IRAM1内部关于UCOS的存储。
STM32F4 定义ucosii到CCM
文章图片


2.打开.sct文件添加如下图代码--UCOS_ii_IARM自己写的,把刚刚在IRAM1中看到的 os_core.o 和os_cpu_c.o文件添加到CCM。

STM32F4 定义ucosii到CCM
文章图片

【STM32F4 定义ucosii到CCM】修改MDK 不勾选USE Memory Layout from Targe Dialog,如下图。保存重新编译
STM32F4 定义ucosii到CCM
文章图片

这时打开.map文件会发现os_core.o 和os_cpu_c.o文件添加到了CCM。任然没有在CCM中定义数据啥的。


STM32F4 定义ucosii到CCM
文章图片


如果需要定义数据到CCM就需要修改.sct文件。比如我要在CCM定义20K数组存放图片则需要这样,首先定义数组并at起始地址
u8 g_nJPEGBuff[20*1024] __attribute__((at(0x10000000))) = {0,};

然后UCOS定义到CCM的数据位置也要相应的调整,这里我分配32K给数组用,32K给UCOS用那么.sct文件就需要修改成如下图所示
STM32F4 定义ucosii到CCM
文章图片


此时编译后打开.MAP文件就会看到有一个数据定义在了 RW_IRAM2即CCM中 尺寸是0x00005000也就是我们定义的20K数组占用的。而UCOS则定义到了0x10008000地址以后的空间。如下图
STM32F4 定义ucosii到CCM
文章图片




    推荐阅读