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

[复制链接]
5080|10
 楼主| jack.king 发表于 2009-4-11 11:31 | 显示全部楼层 |阅读模式
ayb_ice 发表于 2009-4-11 18:17 | 显示全部楼层
tming87 发表于 2009-4-11 19:56 | 显示全部楼层

xdata啊

 楼主| jack.king 发表于 2009-4-13 09:18 | 显示全部楼层

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

xwj 发表于 2009-4-13 09:28 | 显示全部楼层

无语.

对LS4位。
songbangyan 发表于 2009-4-13 09:39 | 显示全部楼层

楼上兄弟们

好像code的访问速度要比xdata要快一些吧。对于code的访问时通过pc指针完成的,而对于xdata的访问是通过DPTR指针完成的,所以我觉得还是code要快一些。
 楼主| jack.king 发表于 2009-4-13 09:39 | 显示全部楼层

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

未来是梦 发表于 2009-4-13 10:33 | 显示全部楼层

re

movx,和movc都是两个指令周期.,访问 xdata和code 理论上速度一样的,
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更快的,而且还要考虑总线竞争的影响
 楼主| 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
//////////////////////////////////////////////
 楼主| jack.king 发表于 2009-4-13 11:12 | 显示全部楼层

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

这个我用的是:78E516B外部加了个sram(32K)的
速度不是很快才能请教这个问题的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

488

主题

2158

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部