让STM32的外接SRAM操作跟内部SRAM一样

2020-01-01 17:59发布

大家都有给STM32外接SDRAM的经历,但是外接了却无法让编译器将已定义变量自动分配到外接SDRAM中,当我们使用UCOS和EMWIN时,会出现以下问题:

STEP5.jpg (331.88 KB, 下载次数: 1) 下载附件 2016-3-1 07:20 上传


按照以上步骤配置完后,以后使用外部SDRAM就跟用内部SRAM一样,不用自己去申请内存,也不用考虑什么内存地址,一切让编译器自己去解决。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
95条回答
godlovemei
1楼-- · 2020-01-10 23:56
刚看到,好贴
syj0925
2楼-- · 2020-01-11 03:25
由于外部sram访问速度相对慢很多,因此多线程分配栈的时候,都是指定到内部ram中(__attribute__ ((at(_addr)))),其它的由编译器自动分配。
love_ourdev
3楼-- · 2020-01-11 07:09
yaya001 发表于 2016-3-4 20:47
很想知道 在IAR中如何 和MDK一样的设置

IAR中也是很简单的,这些属于工具链的知识;现在的开发人员都很浮躁,他们不愿意深入理解自己所使用的工具,都是一知半解就行了。
拿楼主的内存布局做为例子(这样更利于对比),IAR下您只需在ICF文件中加入下面这些定义就可以了:


  1. define region RAM1 = mem:[from 0xC0000000 size 0x1E00000];
  2. define region IRAM1 = mem:[from 0x20000000 size 0x30000];
  3. define region IRAM2 = mem:[from 0x10000000 size 0x10000];
  4. define region RAM_region = RAM1 | IRAM1 | IRAM2;

  5. place in RAM_region { readwrite, block CSTACK, block HEAP };
复制代码

我估计你看了上面的define之后,就心里有数了;根本不用原模原样抄我的例子。
此外,在SystemInit中初始化SDRAM控制器的代码还是需要的,这些做法和Keil一致。
eliterxzgxu
4楼-- · 2020-01-11 08:24
 精彩回答 2  元偷偷看……
chengsong
5楼-- · 2020-01-11 12:46
好贴,谢谢楼主
fengxin32
6楼-- · 2020-01-11 16:25
MDK改SCT文件就可以了

一周热门 更多>