打印

请问code和xdata哪个读取速度快些

[复制链接]
3715|10
手机看帖
扫描二维码
随时随地手机跟帖
沙发
ayb_ice| | 2009-4-11 18:17 | 只看该作者

xdata

使用特权

评论回复
板凳
tming87| | 2009-4-11 19:56 | 只看该作者

xdata啊

使用特权

评论回复
地板
jack.king|  楼主 | 2009-4-13 09:18 | 只看该作者

我用RTX-51 然后定义一个字库之后不知道怎么没有显示了

使用特权

评论回复
5
xwj| | 2009-4-13 09:28 | 只看该作者

无语.

对LS4位。

使用特权

评论回复
6
songbangyan| | 2009-4-13 09:39 | 只看该作者

楼上兄弟们

好像code的访问速度要比xdata要快一些吧。对于code的访问时通过pc指针完成的,而对于xdata的访问是通过DPTR指针完成的,所以我觉得还是code要快一些。

使用特权

评论回复
7
jack.king|  楼主 | 2009-4-13 09:39 | 只看该作者

xwj 大侠.不要沉默撒!虽然问的比较蠢.

使用特权

评论回复
8
未来是梦| | 2009-4-13 10:33 | 只看该作者

re

movx,和movc都是两个指令周期.,访问 xdata和code 理论上速度一样的,

使用特权

评论回复
9
xwj| | 2009-4-13 10:58 | 只看该作者

自己看吧,当然,只针对51

助记符  操作数  机器码(HEX)                      振荡器周期    Meaning
                                                 标准51  C8051F
MOVC    A,@A+DPTR     93                            24    3
MOVC    A,@A+PC       83                            24    3
MOVX    A,@Ri         E2|E3                         24    3     从片外RAM
MOVX    A,@DPTR       E0                            24    3
MOVX    @Ri,A         F2|F3                         24    3
MOVX    @DPTR,A       F0                            24    3

MOV     DPTR,#data16  90, data 15-8, data 7-0       24    3

MOV     Rn,A    F8|F9|FA|FB|FC|FD|FE|FF             12    1
MOV     Rn,direct  A8|A9|AA|AB|AC|AD|AE|AF, direct  24    2
MOV     Rn,#data   78|79|7A|7B|7C|7D|7E|7F, data    12    2

MOV     A,Rn    E8|E9|EA|EB|EC|ED|EE|EF             12    1
MOV     A,direct   E5, direct                       12    2
MOV     A,@Ri   E6|E7                               12    2
MOV     A,#data 74, data                            12    2
MOV     Rn,A    F8|F9|FA|FB|FC|FD|FE|FF             12    1
MOV     Rn,direct  A8|A9|AA|AB|AC|AD|AE|AF, direct  24    2
MOV     Rn,#data   78|79|7A|7B|7C|7D|7E|7F, data    12    2

INC     A       04                                  12    1     A++
INC     Rn      08|09|0A|0B|0C|0D|0E|0F             12    1
INC     direct  05, direct                          12    2
INC     @Ri     06|07                               12    2
INC     DPTR    A3                                  24    1

排除赋初值的前提的话,MOVC和MOVX是是一样的。
用DPTR的话,也是一样的,都是3个指令周期

如果单个查表,PC不用赋值,所以MOVC    A,@A+PC 和 MOVX    @Ri,A差不多;
连续访问时,由于MOVC    A,@A+PC会破坏A,所以只能用DPTR,MOVX也可以用DPTR;
但这时MOVX可以用MOVX    @Ri,A(Keil里的pdata),所以它最快。


讨论这个基本上没什么用,如果是51的话,才那么点容量,该放code还是xdata不是你想怎样就怎样的,而且速度也差不多;

而对于ARM或DSP,由于频率差异,大多都是RAM更快的,而且还要考虑总线竞争的影响

使用特权

评论回复
10
jack.king|  楼主 | 2009-4-13 10:58 | 只看该作者

呵呵!code多一条指令

通过对其进行反编译!发现有如下区别.呵呵!
//////////////////////////////////////////////xdata
C:0x875D    E0       MOVX     A,@DPTR
C:0x875E    909996   MOV      DPTR,#0x9996
///////////////////////////////////////////// code
C:0x7F99    E4       CLR      A
C:0x7F9A    93       MOVC     A,@A+DPTR
C:0x7F9B    908082   MOV      DPTR,#0x8082
//////////////////////////////////////////////

使用特权

评论回复
11
jack.king|  楼主 | 2009-4-13 11:12 | 只看该作者

这个我用的是:78E516B外部加了个sram(32K)的

这个我用的是:78E516B外部加了个sram(32K)的
速度不是很快才能请教这个问题的

使用特权

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

本版积分规则

488

主题

2158

帖子

1

粉丝