打印
[技术问答]

C程序如何定义变量到768字节XRAM?

[复制链接]
1406|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaokia|  楼主 | 2018-12-18 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言编程如何间接寻址高128位RAM和使用768字节的XRAM,搞不懂为什么数据内存要分成三块?
沙发
tianxj01| | 2018-12-18 15:52 | 只看该作者
unsigned char xdata  test[128];
这样就把内存定义到XRAM了。
这个分成3块,是扩展型51芯片的基本做法,其实因为地址编制的原因,基本128内存是直接访问,另外128内存是间接访问,而更多的512、768甚至更多的内存,当年的做法是外挂RAM芯片,现在只是把这部分外挂芯片,直接做到芯片内部去了,还不占用多余的IO,访问,用的就是片外RAM方法访问,多好。

使用特权

评论回复
评论
xiaokia 2018-12-18 19:52 回复TA
@tianxj01 :噢噢,谢谢~ 
tianxj01 2018-12-18 16:06 回复TA
@xiaokia :用idata 关键词 
xiaokia 2018-12-18 15:58 回复TA
原谅我是菜鸟,那内部高128自己的RAM也需要间接访问吧,这个怎样取定义呢? 
板凳
heisexingqisi| | 2018-12-18 18:13 | 只看该作者
你这个问题问的好啊,貌似前段刚好有人问过了。

使用特权

评论回复
地板
heisexingqisi| | 2018-12-18 18:14 | 只看该作者
5
heisexingqisi| | 2018-12-18 18:15 | 只看该作者

使用特权

评论回复
评论
xiaokia 2018-12-18 19:52 回复TA
谢谢~ 
6
gaoyang9992006| | 2018-12-18 18:20 | 只看该作者
这个**有个窍门:手册说要使用 MOVX指令操作,我们看X,标志外部的意思,其实这个就是片内的外部,相对于RAM来说的,相当于集成到芯片总线上的内部外设
所以你就需要记住这个x表示外部就行了,这一段也是外部的,所以用xdata
意思就是外部数据。

使用特权

评论回复
评论
xiaokia 2018-12-18 19:56 回复TA
嗯 
7
xiaokia|  楼主 | 2018-12-18 19:56 | 只看该作者
在51系列中data,idata,xdata,pdata的区别:

data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码
        也最小。
idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访
         问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:
          mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)。
xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx
          读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具  
          体用法属于中级问题,这里不提。

使用特权

评论回复
评论
xiaokia 2018-12-18 19:56 回复TA
复制下来备忘~ 
8
dongliushui| | 2018-12-18 20:19 | 只看该作者
总结的真棒

使用特权

评论回复
9
598330983| | 2018-12-21 14:40 | 只看该作者
受益匪浅。以前从没有用过这个关键词呢。

使用特权

评论回复
10
dongnanxibei| | 2018-12-22 00:01 | 只看该作者
保持兼容,又增大空间。

使用特权

评论回复
11
heimaojingzhang| | 2019-1-8 11:29 | 只看该作者
看到二楼的回复 长知识了 谢谢

使用特权

评论回复
12
dongnanxibei| | 2019-1-8 14:20 | 只看该作者
这些关键字很重要。

使用特权

评论回复
13
yiyigirl2014| | 2019-1-9 12:05 | 只看该作者
ARM里面没有这个用法吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

57

帖子

3

粉丝