OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10866|回复: 20

关于外扩SRAM并使用的问题

[复制链接]

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
发表于 2014-5-16 11:56:16 | 显示全部楼层 |阅读模式
5金钱
原子大哥  问你一个问题:你的战舰版例子里有一个外扩SRAM程序,你在程序里是采用绝对地址的方式来使用外部SRAM 的    。 我想问一下    能不能直接通过设置keil的方式来直接使用外部SRAM呢?  比如说在keil的设置里面添加上



换句话说:我不想用绝对地址的方式去使用外部的SRAM,而是想把外部的SRAM和内部的SRAM 融为一体去使用,我觉得这样更好  ,更为方便!

最佳答案

查看完整内容[请看2#楼]

楼主位的问题,我以前也尝试过,没成功. 不过建议你不用考虑了,因为就算成功,这样做也会有一个弊端: 那就是如果有些变量,需要大量的读写操作,而如果这个变量,被编译器分配到了外部SRAM,这样严重影响你程序的运行速度. 所以,最好的办法,就是参考下战舰板的内存管理. 将内部内存,外部内存分别管理,自己可以控制变量到底是在内部还是外部,从而达到速度的最优.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-16 11:56:17 | 显示全部楼层
楼主位的问题,我以前也尝试过,没成功.
不过建议你不用考虑了,因为就算成功,这样做也会有一个弊端: 那就是如果有些变量,需要大量的读写操作,而如果这个变量,被编译器分配到了外部SRAM,这样严重影响你程序的运行速度.
所以,最好的办法,就是参考下战舰板的内存管理.
将内部内存,外部内存分别管理,自己可以控制变量到底是在内部还是外部,从而达到速度的最优.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 12:32:03 | 显示全部楼层
这个好像不行吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 13:09:55 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
那你有什么好的办法可以做到这一点么?   因为我现在用ucgui做界面,需要外扩,但是ucgui 和一般的数组不一样,一般的数组可以直接定义到外部SRAM。可是ucgui不好直接定义的。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 13:11:49 | 显示全部楼层
回复【3楼】一个好人:
---------------------------------
参考原子的内存管理
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-6-10
在线时间
0 小时
发表于 2014-5-16 13:25:00 | 显示全部楼层
http://www.amobbs.com/thread-4379153-1-1.html,可以参考一下,我没试过,我是用iar的.
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 14:41:12 | 显示全部楼层
回复【5楼】guooay耀:
---------------------------------
谢谢你的建议,我可看到了  。这样应该可以。
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 14:46:53 | 显示全部楼层

回复【4楼】Badu_Space:
---------------------------------
看了一下原子的内存管理,不过这样做的话,在存入数据前需要申请一下空间,那么在使用UCGUI 的时候应该怎么做呢?因为在ucgui里是直接在头文件里定义的,这样不好申请的。是吧?
#define GUI_ALLOC_SIZE          33000  /* Size of dynamic memory ... For WM and memory devices*/
回复

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-5-16 15:02:18 | 显示全部楼层
这样的问题我也想知道
不用谢了……
回复

使用道具 举报

5

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-6-10
在线时间
0 小时
发表于 2014-5-16 15:23:03 | 显示全部楼层
GUIAlloc.c文件中:
typedef union {
  int aintHeap[GUI_ALLOC_SIZE / 4];   /* required for proper alignement */
  U8  abHeap[GUI_ALLOC_SIZE];
} GUI_HEAP;//根据动态内存大小定义联合体
用绝对地址声明变量:
__align(4) GUI_MEM_ALLOC GUI_HEAP GUI_Heap GUI_ALLOC_LOCATION __attribute__((at(0X68000000)));//声明GUI_HEAP类型变量
个人觉得__align(4)可要可不要,因为GUIAlloc.c文件中已有字节对齐算法.
malloc.c文件中的绝对地址要修改一下,避免地址重叠,当然你也可以修改一下GUI_Heap的起始绝对地址.
说明一下,这些只是我以前想过一下的,没有实践过,LZ如果这样可以的话,告诉我一声.
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 16:04:29 | 显示全部楼层
回复【9楼】guooay耀:
---------------------------------
谢谢你!    我试试看
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 16:09:13 | 显示全部楼层
回复【9楼】guooay耀:
---------------------------------
还要malloc.c文件么?   直接在keil里设置的话    就可以把这个省略了吧?
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 16:10:17 | 显示全部楼层
回复【9楼】guooay耀:
---------------------------------
有个FSMC的初始化应该就可以了!
回复

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-5-15
在线时间
0 小时
发表于 2014-5-16 16:30:47 | 显示全部楼层
回复【12楼】一个好人:
---------------------------------
你好,如果你想把MCU内RAM和外扩RAM做成统一连续寻址,有一个办法,就是在你程序的初始化是对片内RAM和片外RAM重新映射,映射为连续地址,这样重外观上看就一块RAM内存。具体你查下相关资料。祝大家学习愉快。
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 16:57:13 | 显示全部楼层
回复【13楼】CXP_ARM:
---------------------------------
你好 , 谢谢你的回复,我刚才查了一下RAM的重新映射的概念,但还是没有太多的头绪,你能说的再详细一点么?   是在程序里面设置还是在编译器里设置?
回复

使用道具 举报

5

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-6-10
在线时间
0 小时
发表于 2014-5-16 17:23:00 | 显示全部楼层
回复【12楼】一个好人:
---------------------------------
我那个回复的前提是,不设置成自动分配使用外扩sram.
初始化FSMC后,用绝对地址定义变量,当然你可以不使用原子的malloc,但剩余的空间就不好操作和分配.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-16 20:06:50 | 显示全部楼层
回复【7楼】一个好人:
---------------------------------
这也是动态内存管理
只是这个数组,一般是建立在内部内存的...
8楼的方法,就将这个数组,绝对定位到了外部SRAM地址了.
这样ucGUI内存管理的就是外部内存了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-16 20:45:42 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
原子哥,你说没错,不过你还没有看清我说的问题哟!   你看看我在6楼说的问题,分别管理以后,头文件中如何定义?也就是这里:#define GUI_ALLOC_SIZE          33000  /* Size of dynamic memory ... For WM and memory devices*/
  应该在何时申请内存?    也就是在具体操作的时候应该如何做!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-16 21:09:42 | 显示全部楼层
回复【18楼】一个好人:
---------------------------------
这是ucGUI的东西,我不熟...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-5-19 16:26:38 | 显示全部楼层
回复【18楼】一个好人:
---------------------------------
楼主 你什么时候解决这问题了 告知一声啊。
不用谢了……
回复

使用道具 举报

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
发表于 2014-5-31 13:55:01 | 显示全部楼层
回复【5楼】guooay耀:
---------------------------------
ls,iar下怎么定义数组到外部sram呢

我修改了icf文件还是报错啊
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 13:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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