ARM-MDK环境下从CCM RAM执行程序的介绍
【温馨提示:文中图片可点击放大观看】
STM32家族中基于ARM Cortex M4内核的STM32F3与STM32F4系列芯片内有一块特殊的SRAM存储区---内核耦合存储器[CCM RAM],为CPU所专享访问。主要是为了实现最高系统时钟频率下执行代码,同时避免出现等待状态。因此,与从闪存里执行代码相比,就大大减少了关键任务的执行时间。
CCM RAM一般用于实时性高或计算密集型程序,比如:
* 数字电源的控制环(开关电源,照明)
* 3相矢量电机控制
* 实时DSP 任务
当程序代码位于CCM RAM且数据保存在常规SRAM时,M4内核便处于最优的哈佛结构配置,让指令零等待执行从而实现速度最大化。如果中断服务程序位于CCM RAM中,可以确保最短的时延,提高响应速度。
当CCM RAM不用来存放执行代码时,也可当做常规SRAM使用。不过它不能被DMA访问。另外,也不推荐在CCM中同时存放指令代码和数据,不然内核访问CCM里的数据和指令时可能会出现冲突,影响CPU的处理性能。【不过,对于STM32F4来言,CCM只能用来存放数据,不能执行指令代码。具体查看比较两个系列的系统框架图】
下面主要介绍基于MDK-ARM开发环境下,如何从CCM RAM执行简单函数或中断服务程序的配置步骤或要点。
一、从CCM RAM 执行函数或中断处理程序
从CCM RAM执行函数或中断处理程序的步骤如下:
1. 指定CCM的起始、结束地址,在分散文件中定义新REGION区【CCM RAM】;
2. 向链接器指明,带有ccm ram 属性的区段必须放在CCM RAM 区域中;
MDK-ARM分散文件
3.进行工程选项配置,参照下图。
MDK-ARM 选项菜单
4. 将需要从CCM RAM 执行的代码放入上面定义的ccm ram 区。通过在函数声明上方添加属性关键字来完成。如下图所示。
MDK-ARM 函数的放置
二、 从CCM RAM 执行源文件
从CCM RAM 执行源文件意味着该文件所声明的全部函数均从CCM RAM 区域执行。按照以下步骤进行配置:
1. 在project option指定CCM RAM区域(Project>option>target);
MDK-ARM 目标内存区
2.右键点击文件,将其放入CCM RAM,然后选择options;
3. 在memory assignment中选择CCM RAM 区域;
MDK-ARM 文件的放置
三、 从CCM RAM 执行库或库模块
请按照以下步骤从CCM RAM 执行库或库模块:
1. 设定CCM RAM 作为内存区,如下图MDK-ARM 库的放置所示;
2. 右键点击工作空间中的库,然后选择选项;
3. 既可将完整的库放入CCM RAM,也可仅放入库中的一个模块;
MDK-ARM库的放置
上面简单地介绍了ARM MDK编译环境下从CCM RAM执行程序的步骤及要点,至于其它环境的应用,比如IAR、GNU,请参看ST官方应用笔记AN4296。可去搜索下载之,或点击左下方“阅读原文”去ST MCU中文网www.stmcu.com.cn下载。
=============================
往期话题链接:
扫描或长按二维码可关注公众号