MCU_STM32F4xx使用CCM RAM

原文地址::MCU_STM32F4xx使用CCM RAM_core coupled memory_高精度计算机视觉的博客-CSDN博客

介绍两点:

其一是CCM (core coupled memory)是在CPU核里的,速度更快,所以可以把最常用的,最频繁用的程序段放到这里面;

其二是,如何高效地使用scatter file配置使用CCM;

第一点:一般介绍
关于如何使用CCM RAM, ST官方文件中已经说得很清楚了,这里就不再重复了,

参考(点击下载):

AN4296 Use STM32F3/STM32G4 CCM SRAM with IAR™ EWARM, Keil® MDK-ARM and GNU-based toolchains

这里要注意的是,CCM直接连接到了D-BUS上面,下面两张图,一张来自AN4296,一张来自stm32f4xx系列的DATASHEET。使用时要注意的是,CCM只和DBUS直接相连,没有和外设相连,所以不能用作DMA之类的操作。

第二点:MDK中利用SCATTER 文件配置使用CCM_RAM
因为我的工程比较大,所以先试试MDK。GNU或者IAR还没有时间。

官方的说明中,对于小规模的程序文件是没有问题的,但是,如果你的程序文件比较多,一个个函数地定义和设置,是不现实的。用整个文件夹或文件的形式,在属性中如下这样的设置是无效的(我也不知道为什么无效,没研究过KEIL MDK),

我采用的办法是直接修改SCATTER 文件,系统默认的SCATTER文件长这个样子,

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
 
LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x10000000 0x00010000  {
   .ANY (+RW +ZI)
  }
}

在配置之前,你先编译一次,通过查看MAP文件中的memory分析,确定哪些文件是要进RAM的,省得自己去分析。

然后,以我自己的某次配置为例,为了把指定的文件配置到RW_IRAM2(对应STM32F4XX,这个地方就是CCM_RAM),我自己改成了下面的样子,这里不再使用".ANY",而是逐个指定要链接的文件,当然前提是你知道哪些文件是要进RAM的,不要把应该写到FLASH中的文件弄进来了(不清楚弄进来有什么后果,还没来得及测试,有兴趣的可以自己玩一下)。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
 
LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x10000000 0x00010000  {
   queue_buffer.o (+RW +ZI)
   fifo_buffer.o (+RW +ZI)
   main.o (+RW +ZI)
   controller.o (+RW +ZI)
   usbd_conf.o (+RW +ZI)
   tim.o (+RW +ZI)
   usb_device.o (+RW +ZI)
   usbd_desc.o (+RW +ZI)
   etharp.o (+RW +ZI)
   rand.o (+RW +ZI)
   lwip.o (+RW +ZI)
   can.o (+RW +ZI)
   stm32f4xx_hal_flash.o (+RW +ZI)
   dhcp.o (+RW +ZI)
   ip.o (+RW +ZI)
   tcp_in.o (+RW +ZI)
   ip4_addr.o (+RW +ZI)
  }
}

最后看一下你的MAP文件,当然生成MAP时要注意,选择那些你关心的选项就够了,不要全选,不然找半天找不到,例如我只关心MEMORY分配,就只选了MEMORYA,如下,


————————————————
版权声明:本文为CSDN博主「高精度计算机视觉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tanmx219/article/details/106265561

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值