STM32F407使用CCM(64K)区域

1、前提:项目中比较大,使用RAM空间大于128K时出现问题;查看手册发现,F407把ARM区域分成了几块;如下图:(最后一步讲解keil加载.sct文件的方式)

 共被分为三个区域,SRAM可以直接使用;CCM只有内核能访问,DMA等数据不能访问;

2、错误使用:刚开始使用的时候,直接勾选keil中的内存区,结果发现程序无法运行,如下图:

 3、正确使用:使用.sct文件加载内存区域;由于我使用的是FreeRTOS系统,所有优先把系统相关资源都放在CCM区域了,多出来的资源方一些其他的文件(不能方含DMA相关的)。.sct文件源码如下所示:

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08004000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08004000 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  {
 ;加载FreeRTOS系统相关文件
  control_task.o   (+RW +ZI)
;  event_groups.o (+RW +ZI)
;  list.o (+RW +ZI)
;  queue.o (+RW +ZI)
;  stream_buffer.o
;  tasks.o (+RW +ZI)
;  timers.o (+RW +ZI)
  heap_4.o (+RW +ZI)
  port.o (+RW +ZI)

;加载用户相关文件 注意F407的第二存储空间只有64K
  mid_share_data.o(+RW +ZI)
  mid_param.o(+RW +ZI)
  }

}

注意:在RW_IRAM2 0x10000000 0x00010000  上面部分的是keil之前生成的;可以在keil工程下找到原有的.sct文件,然后在这个文件上加RW_IRAM2 0x10000000 0x00010000相关内容;

加载后.map跟内存分配相关的,如下图所示:

Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x0801d42c, Size: 0x0000f5e8, Max: 0x00020000, ABSOLUTE, COMPRESSED[0x0000017c])

Execution Region RW_IRAM2 (Exec base: 0x10000000, Load base: 0x0801d5a8, Size: 0x0000cf84, Max: 0x00010000, ABSOLUTE, COMPRESSED[0x0000012c])

4、加载.sct文件方式

选择   魔法棒 -> Linker  如下图配置:

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值