19186|13

88

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32外部扩展RAM [复制链接]

                                 各位大侠,现在想STM32的内部RAM不够用,想扩展一片外部的SRAM,编译平台使用IAR FOR ARM 5.30,发现使用配置文件stm32f10x_flash_extsram.icf后,编译出来的文件没有使用内部的RAM,现在的问题就是如何让编译器先用内部RAM,用关键字来让特定的数组放到外部ram?这个问题比较急,求各位帮帮忙,谢谢。
此帖出自stm32/stm8论坛

最新回复

感谢楼主的总结  详情 回复 发表于 2014-12-16 14:47
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 处女贴,帮顶
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 呵呵,处女贴都被你顶了,谢谢。
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 这个肯定要自己把变量分开放了,把放到内部的定义一个段,外部的也一个段
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
现在IAR 的ICF文件没有这个定义方式,编译出来,变量全部在外部RAM,MDK貌似可以分开,我在ON CHIP 和OFF CHIP里都填了对应的地址,然后定义了两个数组,结构发现一旦选了OFF CHIP后,变量全部放到外部RAM中,只有堆栈在内部ram中,我以为是没有沾满外部的RAM不会将变量编译到内部RAM中,加大数组空间后发现,超过外部RAM的容量,编译就出错了。现在就是不知道怎么才能将变量地址分开,也不知道变量声明时是否可以定义绝对地址,比如51的 XDATA 或者 _at_之类的定义方式。
感谢回复!
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 汗!楼主你太懒了,IAR的手册里写的很详细的,我也提示你了,现在ICF定义变量放置的位置即section,再在定义的地方引用这个section,当然IAR也支持绝对地址定位@,详细去读手册!
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 谢谢提示,马上去看,有结果了马上上来做个总结
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
感谢again_gyf的提示,原来从来没有关心过编译器提供的文档,都是在网络寻找为主,结果这次找不到,才到bbs上问了半天,好在楼上的兄台一语道破天机,才让我恍然大悟,原来还有用户手册可以看,实在惭愧。
    开发手册,知道了IAR的RAM / ROM是可以指定范围的,而且比较灵活,给出了三种运算方式 | & - 有了这三种方式,就可以很灵活的定义你的RAM ROM的空间了,而且计算很方便。我在ICF中给出了RAM 的范围
define region RAM_region=mem:[from 0x20000000 to 0x6800ffff]-mem:[from 0x20002000 to 0x68000000];
编译后查看MAP 文件
"A1":  place at mem:0x8000000 { ro section .intvec };
"P1":  place in [from mem:0x8000000 to mem:0x807ffff] { ro };
"P2":  place in [from mem:0x20000000 to mem:0x20001fff] |
                [from mem:0x68000001 to mem:0x6800ffff] {
          rw, block CSTACK, block HEAP };
这说明和预期的范围是一致的,然后我在程序中定义了大量的数组,在编译器中选择不优化(怕把没什么用的数组优化掉)然后再查看map文件,它告诉我RAM的使用情况
"P2", part 1 of 4:                         0x7d4
  CSTACK                      0x20000000   0x400  <Block>
    CSTACK           uninit   0x20000000   0x400  <Block tail>
  HEAP                        0x20000400   0x200  <Block>
    HEAP             uninit   0x20000400   0x200  <Block tail>
  .iar.dynexit                0x20000600   0x1d4  <Block>
    .iar.dynexit     uninit   0x20000600     0xc  cppinit.o [3]
    .iar.dynexit     uninit   0x2000060c   0x1c8  <Block tail>
                            - 0x200007d4   0x7d4

"P2", part 2 of 4:                          0x98
  .bss               zero     0x200007d4    0x50  xfiles.o [3]
  .bss               zero     0x20000824    0x14  xsyslock.o [3]
  .bss               zero     0x20000838    0x10  main.o [1]
  .bss               zero     0x20000848     0x8  xxmemxmalloc.o [3]
  .bss               zero     0x20000850     0x4  main.o [1]
  .bss               zero     0x20000854     0x4  xgetmemchunk.o [3]
  .bss               zero     0x20000858     0x4  MtxWrapper.o [3]
  .bss               zero     0x2000085c     0x4  MtxWrapper.o [3]
  .bss               zero     0x20000860     0x4  MtxWrapper.o [3]
  .bss               zero     0x20000864     0x4  MtxWrapper.o [3]
  .bss               zero     0x20000868     0x4  iarwstd.o [5]
                            - 0x2000086c    0x98

"P2", part 3 of 4:                         0x14a
  P2 s0                       0x2000086c   0x14a  <Init block>
    .data            inited   0x2000086c    0x84  setlocale.o [3]
    .data            inited   0x200008f0    0x4c  localeconv.o [3]
    .data            inited   0x2000093c    0x40  xfiles.o [3]
    .data            inited   0x2000097c    0x10  stm32_eval.o [1]
    .data            inited   0x2000098c    0x10  stm32f10x_rcc.o [1]
    .data            inited   0x2000099c     0x8  stm32_eval.o [1]
    .data            inited   0x200009a4     0x8  stm32_eval.o [1]
    .data            inited   0x200009ac     0x4  stm32f10x_rcc.o [1]
    .data            inited   0x200009b0     0x4  cppinit.o [3]
    .data            inited   0x200009b4     0x2  stm3210e_eval_lcd.o [1]
                            - 0x200009b6   0x14a

"P2", part 4 of 4:                        0xfa04
  .bss               zero     0x68000004  0x3200  main.o [1]
  .bss               zero     0x68003204  0x3200  main.o [1]
  .bss               zero     0x68006404  0x3200  main.o [1]
  .bss               zero     0x68009604  0x3200  main.o [1]
  .bss               zero     0x6800c804  0x3200  main.o [1]
  .bss               zero     0x6800fa04     0x2  stm3210e_eval_lcd.o [1]
                            - 0x6800fa06  0xfa02
这说明分配的空间在连接时会自己定位,这样我的目的就达到了。
    再次感谢楼上的兄弟,不是我懒,实在是没想到看手册,也可以说明平时的开发习惯不好。问题总结道这里,希望对需要有类似应用的朋友有帮助。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 楼主习惯很好,自己解决了就应该和别人分享
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(高级)

10
 
                                 总结的非常好
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 哈哈,谢谢大家,以后还请大家多多帮组。
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
看见此贴,然后注册的。。。
此帖出自stm32/stm8论坛
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(初级)

13
 
good
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
感谢楼主的总结
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表