查看原文
其他

ARM-MDK环境下从CCM RAM执行程序的介绍

茶话MCU 2022-09-11

温馨提示:文中图片可点击放大观看

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下载。

=============================

往期话题链接:

1、扫描模式下ADC通道间的串扰话题

2、STM32 CAN过滤器的几个术语

3、关于读取STM32 RTC 日历值不更新的话题

4、STM32定时器DMA BURST传输解读

5、STM8 MCU开发过程中的常见问题


扫描或长按二维码可关注公众号

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存