搜索
bottom↓
回复: 20

STM32F4 CCM RAM的使用方法

[复制链接]

出0入54汤圆

发表于 2014-2-26 17:50:15 | 显示全部楼层 |阅读模式
本帖最后由 lusson 于 2014-2-26 17:51 编辑

可能网上能找到方法,这里再重复一下我的做法。

比如我要定义一个大容量的数组 temp_buf[2048]到CCM中。(只想把这个buf放到CCM中)
需要做以下工作
1.新建1个.c和1个.h

.c中输入如下内容

  1. #pragma location = ".ccmram"

  2. unsigned char temp_buf[2048]
复制代码

注:以上ccmram名字随便取,这里是声明一个段,需要与最后修改的icf文件保持一致

.h中加入该数组的声明:
  1. #ifndef __RAM_DEF
  2. #define __RAM_DEF

  3. extern unsigned char temp_buf[2048]

  4. #endif
复制代码


最后再在.icf文件中加入一行把这个段放在CCM中
  1. place in CCMRAM_region {section .ccmram};
复制代码


编辑后在map文件中会加入这一行:
place in [from 0x10000000 to 0x1000ffff] { section .ccmram };
找到这个数组,地址已经在CCM中了,表示成功了

要使用这个buf的话只要包含声明的头文件,即可使用。

搞定收工。
其他以此类推,主要是要修改.icf文件。

出0入22汤圆

发表于 2014-2-26 18:14:11 | 显示全部楼层
用at关键字不更方便?

出0入0汤圆

发表于 2014-2-26 18:29:55 | 显示全部楼层
jiaowoxiaolu 发表于 2014-2-26 18:14
用at关键字不更方便?

IAR 没有AT好像
AT是绝对定位,需要自己当链接器来管理,当有多个时容量浪费或重叠
定义段是通用的方法。

出0入0汤圆

发表于 2014-2-26 18:31:28 | 显示全部楼层
我一般用分散加载:

; *************************************************************
; *** 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)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x10000000 0x00010000  {
    startup_stm32f40xx.o (STACK)
    startup_stm32f40xx.o (HEAP)
  }
}

出0入0汤圆

发表于 2014-8-12 21:04:29 | 显示全部楼层
.icf文件在哪里??

出0入0汤圆

发表于 2014-8-12 21:34:46 | 显示全部楼层
在MDK环境下该怎么配置呢?直接在target选项页配置就行吗?

出0入54汤圆

 楼主| 发表于 2014-8-12 21:47:16 | 显示全部楼层
王森 发表于 2014-8-12 21:34
在MDK环境下该怎么配置呢?直接在target选项页配置就行吗?

不好意思,stm32一直用的iar。keil不清楚了。

出0入0汤圆

发表于 2014-8-12 22:01:19 | 显示全部楼层
   JpegBuffer                               0x10000000   Data       50240  stm32f4xx_it.o(.bss)
.map文件编译后中这么显示,是不是说明已经分配到CCM里面了,还没测试代码能不能运行。

出0入0汤圆

发表于 2014-8-16 14:02:25 | 显示全部楼层
去年使用STM32F407ZET做了一个项目,使用了外部RAM、NAND FLASH、LCD、DCMI等资源,进展还算顺利。当时看到F4有64K的CCM,还不知道是什么东西,把他丢到了一边。现在看F4的资料,发现CCM是个好东西,于是想验证一下。
首先从网上搜到资料说要分散加载,就去看相关的分散加载的资料,自己写了一个的把堆栈放到CCM里,调了好久也没成功。怀疑是分散加载文件有错,就把堆栈分配到SRAM1的末尾,竟然正常。
然后不用分散加载,我直接定义个指针,指到CCM里面,这样操作总可以了吧,结果还是没成功。
接下来在RM0090数据手册中发现,Figure 1中F40X的芯片有CCM,而在文字描述中却说只有F42X和F43X有。由于英文水平有限,还不是很确定。
希望哪位能帮我解答下,是F407本就没CCM,还是这个东西还要打开什么开关之类的才能用。

出0入54汤圆

 楼主| 发表于 2014-8-16 22:10:02 | 显示全部楼层
jiang47 发表于 2014-8-16 14:02
去年使用STM32F407ZET做了一个项目,使用了外部RAM、NAND FLASH、LCD、DCMI等资源,进展还算顺利。当时看到 ...

我用的就是f407啊,肯定有ccm啊。你按照我楼主位的来设置就可以。目前我用得很正常。

出0入0汤圆

发表于 2015-4-5 09:54:24 | 显示全部楼层
stm32f4 ccm使用

出0入0汤圆

发表于 2015-4-5 22:16:48 | 显示全部楼层
去年也是一直没搞定,借鉴

出0入0汤圆

发表于 2015-6-26 09:10:08 | 显示全部楼层
ccm 是不是不支持 dma?

出0入0汤圆

发表于 2015-6-26 09:19:30 | 显示全部楼层
icemagicisme 发表于 2015-6-26 09:10
ccm 是不是不支持 dma?

4系列不支持的,好像3系列支持,ST一个应用笔记讲的很详细的

出0入54汤圆

 楼主| 发表于 2015-6-26 11:31:16 | 显示全部楼层
icemagicisme 发表于 2015-6-26 09:10
ccm 是不是不支持 dma?

M4是不支持的。

出0入0汤圆

发表于 2015-7-16 00:45:34 | 显示全部楼层
jxcylxh 发表于 2014-2-26 18:31
我一般用分散加载:

; *************************************************************

在Keil中试了,好用!

出100入101汤圆

发表于 2016-8-4 11:49:53 | 显示全部楼层
STM32F407的64K CCMRAM使用
2014年2月12日 写评论 作者 蓝色的风
CCMRAM和一般的RAM的最大区别是不能被DMA访问,因为STM32F4上的这货除了CPU谁都不理

如果放任编译器随便给你分配的话,也许会出现使用DMA传数据在一个文件里没问题,另外一个文件里却各种失败。。。天啊(其实这是我碰到的问题)

如果想要控制好这片容量巨大(F3掩面。。。)的囧内存,必须保证DMA或者其他不通过CPU可能访问到数据不在这里

方法1就是放个巨大数组在里面 然后动态分配出去

其次就是把RTOS里面各个堆栈用的内存放在这里,反正谁也没蛋疼到在堆栈里用DMA吧

实现把数据分配到特定位置,并且让编译器知道的方法,google百度了好长时间终于找到个MDK-ARM下简单可行的

引用自http://www.eepw.com.cn/article/148071.htm

C 例子:

#include “absacc.h”

unsigned char xArray[0x10000] __at (0x10000000);

汇编就没有必要了

然后可以把这内存作为一个heap来分配,或者干脆就直接给FreeRTOS之类的RTOS分配好了,不过这样的话又得注意portMalloc的内存不能用于DMA。。。。

这个问题倒是可以考虑在正常SRAM上直接用C的malloc之类的分配,或者用别的算法

出0入0汤圆

发表于 2016-8-4 19:36:56 来自手机 | 显示全部楼层
还没用过 学习下

出0入0汤圆

发表于 2016-9-1 18:18:16 | 显示全部楼层
学习了              

出0入0汤圆

发表于 2016-10-20 23:14:38 | 显示全部楼层
学习一下,只是上次由于需要快速保存数据,看到CCM速度可以就直接用指针将数据传到里面保存一下

出0入0汤圆

发表于 2020-1-31 21:25:43 | 显示全部楼层
突然发现f4的内存不够用了,只要用这个ccm了。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 10:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表