|
发表于 2015-11-7 22:11:04
|
显示全部楼层
你说CC2530的RAM和Flash比328大,是毫无疑问的。但就执行效率而言,51和AVR还差了一大截:
你可以看TI官方的指令表.
简单拿几个重要的指令比较(用AVR书写方式计):
分支指令
RJMP 51 3T AVR 2T
IJMP 51 2T AVR 2T
JMP 51 4T AVR 2T
CALL 51 6T AVR 2T
ICALL 51 (无硬件实现,要自己先PUSH DPTR再IJMP) AVR 2T
RET 51 4T AVR 2T
条件分支指令难以表示,用51和AVR组合指令比较
JNZ/JZ 51 3T AVR 2T
JB 51 4T AVR 3T
在同频条件下,TI的51的分支效率与AVR的分支效率比低不少.基本上AVR都是2T.TI 51平均4T左右。CC2530没记错应该是32M的,这部分实际处理速度可能打平了。但是51没有直接的实现ICALL。而C++虚函数对函数指针依赖很高,这块51不行。
算术指令
DIV 51 5T AVR (无硬件实现)
MUL 51 5T AVR 1T
INC 51 2T AVR 1T
ADC 51 2T AVR 1T
SUB 51 2T AVR 1T
AND 51 2T AVR 1T
ANDI 51 2T AVR 1T
ORI 51 2T AVR 1T
XOR 51 2T AVR 1T
CLR 51 1T(仅A寄存器) AVR 1T(R0~R31)
LSL
LSR
ROL
ROR
ASR均同上
同频条件下,理论上说TI跑32M的51和16M AVR速度差不多,除法强出不少。但是能用来作为运算的寄存器仅有AB。因此遇到大量复杂表达式的时候性能降低会很严重。这块51略为劣势。
数据传输指令
PUSH 51 4T AVR 1T
POP 51 4T AVR 1T/2T(X/Y/Z)
LPM 51 3T AVR 2T
MOVX(仅51有) 3T/4T AVR --(统一编址)
LD 51 3/4/5T AVR 1/2/3T
ST 51 3/4/5T AVR 1T
这里51完败不解释。即使51跑在32M,由于DPTR只有两个,还不能随意指定(如AVR的R0~R31寄存器一样用),效率得到极大的下降。
布尔操作:
SBI 51 3T AVR 1T
CBI 51 3T AVR 1T
BST 51 AVR 1T
BLD 51 AVR 1T
这里51也就靠高主频略胜AVR。但是要是传递的不是立即数,51又要瞎了……
最后总结,TI这个8051核心和C8051F还差得远。同频执行效率和编址的规整程度和AVR比还是差不少。你说51快,这三个总线编址,上C++不可避免的要实现通用指针,通用指针实现必然遇到判断问题,51本身执行效率就不行,再一倒腾还要不要活了。 |
|