打印

单片机指令大比拼

[复制链接]
楼主: machunshui
手机看帖
扫描二维码
随时随地手机跟帖
81
yewuyi| | 2008-7-31 08:50 | 只看该作者 回帖奖励 |倒序浏览

呵呵,纠正一下:MCP的DSPIC不能算纯粹的DSP

俺个人认为这是MCU和DSP的一个中和产品,呵呵,杂交稻具备两种母体的一些特性,但也失去了母体的一些特性。。。



这个杂交稻的想法是好的,价格没下来的主要原因是因为各个客户的采购量偏小决定的,呵呵,当然,这也有MCP推广不力的原因,MCP的东西是要贵一点,但这是相对日系来说,和欧美的芯片比,MCP的价格其实也差不多,但大家可要注意:MCP的每一片都是做了出厂检测的,现在的芯片厂能作到这个的已经不多了。。。


很多人AVR便宜,其实AVR便宜的也就MEGA48和MEGA8,MEGA16以上也没什么价格优势,MEGA48俺就不想说了,俺个人认为这个东西属于BT市场策略下的垃圾产物,MEGA8到还将就,但相对于PIC16F88X来说,价格优势也不太大,但MEGA8的ESD性能要逊色一些,其它比较俺就不说了,例如代码空间、例如EEPROM等。。。

呵呵,千万别说俺是托,俺只是讲:PIC16系列里面的其实16F88X也不错。。。

使用特权

评论回复
82
JIMOOM| | 2008-7-31 08:53 | 只看该作者

除了听人说,PIC的抗干扰好,还真没听过PIC的指令有多好。

使用特权

评论回复
83
machunshui|  楼主 | 2008-7-31 08:54 | 只看该作者

比较dspic的dsp运算性能和cortex m3谁胜

比较dspic的dsp运算性能和cortex m3谁胜,是一回事,

cortex m3作为后出的带dsp加强性能的片子,即使比dspic的dsp性能好,也是正常,

但是同频率下,cortex m3做fft运算,不如dspic是肯定的.


基本概念不清,乱比是另一回事,

还到论坛里面摆资格,撒泼,

真丢人

使用特权

评论回复
84
machunshui|  楼主 | 2008-7-31 08:58 | 只看该作者

dspic实现

dspic实现单周期乘法     cortex M3 实现单周期乘法

dspic实现单周期乘加     cortex M3 实现双周期乘法

dspic模寻址              cortex M3  ?????????

dspic 位反序            cortex M3 位反序 


敢说同频率下,cortex m3做fft运算能胜过dspic???

使用特权

评论回复
85
machunshui|  楼主 | 2008-7-31 09:01 | 只看该作者

dspic实现

dspic实现单周期乘法     cortex M3 实现单周期乘法

dspic实现单周期乘加     cortex M3 实现双周期乘加 

dspic模寻址              cortex M3  ?????????

dspic 位反序            cortex M3 位反序


敢说同频率下,cortex m3做fft运算能胜过dspic???


使用特权

评论回复
86
PUPPYH| | 2008-7-31 09:53 | 只看该作者

我同意xwj的看法

99年时,我学习使用PIC16系列芯片,用一年多后,我就彻底将它抛弃了!

使用特权

评论回复
87
5880527| | 2008-7-31 10:09 | 只看该作者

xwj在64楼举的那精简指令的现象我一直不好意思提出来问

老是觉得就是比51复杂嘛,这个现象在AVR更明显,一条MOV指令给整出好多条不同的指令来,为什么不让编译器去自动识别操作数,而要让写程序的人去费那精力,人家51的MOV啥地方都能MOV过去,管你寄存器也好,立即数也好,位单元也好,统一用它,实在不行了才有MOVX和MOVC

使用特权

评论回复
88
yewuyi| | 2008-7-31 10:45 | 只看该作者

LS错误,51也需要分辨怎么MOV的。。。

89楼给离谱,那99年的PIC16比较性能非常没谱。。。


PIC16F88X、PIC16F91X以及年底可能出来的PIC16F191X等性能都很好。。。


用ASM写PIC程序是有点麻烦,呵呵,特别是新手感觉不爽,但如果用PICC的话,PIC的程序要比写51的程序方便(个人认为)。。。

使用特权

评论回复
89
ijk| | 2008-7-31 12:15 | 只看该作者

单片机指令的效率

  8/16位单片机指令的效率,据说430比较好,51和PIC(8位)比较差,S12,AVR和PIC24处在中间。16位的PIC24比8位的PIC 有改善,但仍然不及430。

使用特权

评论回复
90
PUPPYH| | 2008-7-31 12:15 | 只看该作者

那是学习时,网上已经有PIC16的资料

实际做产品时,主要用PIC12,用起来比较不爽!做了两个项目后,就不在用了。
记得那时的软件还MPlab 4.0。

使用特权

评论回复
91
yewuyi| | 2008-7-31 13:07 | 只看该作者

还好俺用过MSP430

个人认为MSP430的指令效率也很低,呵呵。。。

使用特权

评论回复
92
yewuyi| | 2008-7-31 13:11 | 只看该作者

99年用PIC12的

那时基本只有PIC12C508可用,呵呵,当年选择PIC12C508的工程师,看中是它的价格和小管脚体积,有多少人当时会看中这个芯片的指令效率呢?


呵呵,只能说当时的MCU厂家都比较笨,没有推出适合市场的小管脚芯片,但MCP做了‘旁人’所不为,所以换了12C508的疯狂销售。。。

使用特权

评论回复
93
5880527| | 2008-7-31 17:45 | 只看该作者

回复91楼

51的MOV是需要区别操作对象,但人家都是用一条MOV就可以了,可AVR、PIC之类的不单要区别操作对象,而且还要用不同的指令来MOV,我就觉得奇怪,何来精简呢

使用特权

评论回复
94
wlq_9| | 2008-7-31 17:52 | 只看该作者

ls

别提51的mov了,直接寻址和R间址的空间就那么大,而对外部大容量的code和ram,51的mov效率慢得可以了!
LS多用几种片子,就会明白了!

使用特权

评论回复
95
lyjian| | 2008-7-31 18:07 | 只看该作者

标准51访问外部ROM和RAM就两个指令周期

LS说51慢,那请举一个比51快的例子
要不然我会认为你是在空口说白话

使用特权

评论回复
96
5880527| | 2008-7-31 18:33 | 只看该作者

我没说它速度快

而是说指令的利用率或说简洁的问题,同一功能而操作数不同51不会又新辟一指令,但其他的精简指令单片机不是这样做的,不知道是不是我误解了精简的含义

使用特权

评论回复
97
平常人| | 2008-7-31 22:01 | 只看该作者

怎么这楼爬上来就100层了?!

使用特权

评论回复
98
machunshui|  楼主 | 2008-8-1 00:31 | 只看该作者

和C8051F比一比


1.A1=B1;

    mov    A1,B1
总共: 3字节 3指令周期.
pic:  2指令字,2指令周期

2. C1 = A1+B1;

    mov    A,A1
    add     A,B1
    mov     C1,A
总共: 6字节,6指令周期。
pic:  3指令字,3指令周期


3. A1[B1] = C1;

mov R0,#_A1
mov @R0,C1

总共: 4字节,4指令周期。
pic   6指令字,6指令周期


4.
for(i = 0; i < 10;i++)
{
A = 1;
}
     mov    R0,#10  
    mov    R1,#ADDR 
    mov    A,#1     
LOOP:
    mov    @R1,A    
    djnz   R0,LOOP  
    inc    R1        
    ret

总共: 10字节,56指令周期。

pic:17指令字,103指令周期(和51一样采取减法优化以后是103个指令周期)


5.

if(A1 > 10)
B1 = 0;
else
B1 = 1;
    mov    B1,#1           
    cjne    A1,#10,CHECK     //此处好像没有这条指令,lyjian造了一条指令啊
    ret
CHECK:
    jc    RETURN
    dec    B1
RETURN:
    ret

总共: ?????????
pic:5指令字,5指令周期




如果改为:
 mov    B1,#1                 2,2
 mov     A,A1                    2,2    
    cjne    A,#10,CHECK       3,3/4
    ret                       1,5
CHECK:
    jc    RETURN              2,2/3
    dec    B1                 2,2
RETURN:
    ret                       1,5


总共: 13字节,11指令周期。

pic:5指令字,5指令周期


6.
unsigned char A1,B1

switch(A1)
{
case 0:
B1 = 10;
break;

case 1:
B1 = 20
break;

default:
B1 = 30;
break;
}
    mov    A,A1          
    jnz    OTHER_CASE    
    mov    B1,#10        
    ret                   
OTHER_CASE:
    djnz    A1,DEFAULT   
    mov    B1,#20        
    ret                  
DEFAULT:
    mov    B1,#30        
    ret                  


总共: 15字节,17指令周期

pic : 24指令字,15指令周期(原PIC的9个指令周期统计错误)






由于标准51的12个时钟周期,实际上标准51的执行效能还是要比低.
但是同MIPS的时候,标准51的执行效能确实比PIC高,
代码效率也高.

但是高速C8051f的和pic相比同MIPS时,指令的执行效能相当低!

当然鉴于C8051f高速度特性,其执行速度还是要比pic16会不少.

虽然,新华龙宣传是采用流水线技术实现单周期指令,但是从其指令的时钟周期数和标准51对比的变化看,并不象采取流水线对标准51进行改进切割的结果,(如果这样其指令周期数应该和标准51相同)

猜想可能是采取精简指令内核外包装搞成的,(可能也采取流水线技术),

实际上C8051F同MIPS下应该比标准51的代码执行速度低不少啊,

肯定不会是同频51的12倍,虽然宣称其峰值执行速度比标准51快8倍,

可能实际的平均执行速度同频恐怕只快5-6倍.

使用特权

评论回复
99
5880527| | 2008-8-1 09:01 | 只看该作者

不干,应该来进行一些逻辑判断啊位处理之类的比较

这个在指令里要占大半的

使用特权

评论回复
100
machunshui|  楼主 | 2008-8-1 09:22 | 只看该作者

逻辑判断有过了

逻辑判断有过了

if,else有过了,

位处理pic一条指令,非常强,至少和51差不多吧.


小总结:

不考虑实际的指令的时钟周期数,只考虑同MIPS的情况:

1.标准51的执行效率,代码率都是最高.

2. pic的执行效率比标准51差一点,主要是间接寻址太差劲了,
代码率不如51,这也是受间接寻址的拖累.

3. C8051F这样的单周期高速51,其代码的执行效率比标准51差很多,代码率不错同标准51


考虑指令的实际指令的时钟周期数,同频率情况:

1.标准51是每条指令12时钟周期,标准51的执行效率最低,代码率都是最高.

2.pic16每条指令4时钟周期,比标准51的执行效率高不少,代码率不如51

3.C8051F是每条指令1时钟周期,C8051F的执行效率最高,代码率最高,
 但是由于其对标准51指令的很多指令的周期做了改变扩大,其执行效率远远不是
标准51的12倍线型关系




使用特权

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

本版积分规则