STM32F4说是有192KRAM 但是很是很坑。192k分为两部分128k普通RAM和64K CCM RAM,CCM只能内核调用,外设无法使用。本来想着192KRAM挺好,结果仔细看悲剧了。但是也不能浪费,可以尝试使用它,把UCOS内核数据放到CCM。网上搜索到一个FreeRTOS的照着他的自己弄了弄。
http://www.stmcu.org/module/forum/thread-604814-1-1.html再次感谢该网友。。。
文章图片
1.勾选IARM2 确认使用CCM
此时编译程序后打开.map文件会发现使用了CCM但是没有数据定义到这块RAM。同时发现IRAM1内部关于UCOS的存储。
文章图片
2.打开.sct文件添加如下图代码--UCOS_ii_IARM自己写的,把刚刚在IRAM1中看到的 os_core.o 和os_cpu_c.o文件添加到CCM。
文章图片
【STM32F4 定义ucosii到CCM】修改MDK 不勾选USE Memory Layout from Targe Dialog,如下图。保存重新编译
文章图片
这时打开.map文件会发现os_core.o 和os_cpu_c.o文件添加到了CCM。任然没有在CCM中定义数据啥的。
文章图片
如果需要定义数据到CCM就需要修改.sct文件。比如我要在CCM定义20K数组存放图片则需要这样,首先定义数组并at起始地址
u8 g_nJPEGBuff[20*1024] __attribute__((at(0x10000000))) = {0,};
然后UCOS定义到CCM的数据位置也要相应的调整,这里我分配32K给数组用,32K给UCOS用那么.sct文件就需要修改成如下图所示
文章图片
此时编译后打开.MAP文件就会看到有一个数据定义在了 RW_IRAM2即CCM中 尺寸是0x00005000也就是我们定义的20K数组占用的。而UCOS则定义到了0x10008000地址以后的空间。如下图
文章图片
推荐阅读
- CAN总线详解
- STM32定时器输出带有死区时间的PWM波形
- 嵌入式天地|【STM32】系统配置控制器相关函数和类型
- 嵌入式天地|【STM32】中断相关函数和类型
- 嵌入式天地|【STM32】中断和事件
- 嵌入式天地|【STM32】系统控制寄存器
- 嵌入式天地|【STM32】USART相关函数和类型