打印

PIC叫板msp430超低功耗

[复制链接]
楼主: machunshui
手机看帖
扫描二维码
随时随地手机跟帖
121
用一个功耗1uA的MCU,而用个LM324,或者是个小阻值的电阻一样不能解决低功耗。我就是做仪器的。仪器里面外围的信号调理部分的功耗的挑战就更大了,温度的影响就明显要超过MCU了。

使用特权

评论回复
122
dl_shuang| | 2010-10-24 00:35 | 只看该作者
毕竟大部分电池供电仪表的信号调理部分可以间歇上电工作,但MCU不行。

使用特权

评论回复
123
一级菜鸟| | 2010-10-24 00:38 | 只看该作者
用一个功耗1uA的MCU,而用个LM324,或者是个小阻值的电阻一样不能解决低功耗。我就是做仪器的。仪器里面外围的信号调理部分的功耗的挑战就更大了,温度的影响就明显要超过MCU了。 ...
sptek 发表于 2010-10-24 00:29


这个世界上有个东西叫MOSFET,它可以帮你在休眠时把所有外设的电源切掉。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
McuPlayer + 2
124
一级菜鸟| | 2010-10-24 00:39 | 只看该作者
MSP430的代码效率确实非常低,相同的操作比同级MCU要多出好几条

使用特权

评论回复
125
xwj| | 2010-10-24 00:55 | 只看该作者
MSP430的代码效率确实低,但PIC的夜好不到哪里去。
复杂指令集(CISC) 的一条指令完成的操作,放到RISC上一般都需要很多条指令才能完成相同操作,这个是所有精简指令集的通病。

使用特权

评论回复
126
machunshui|  楼主 | 2010-10-24 17:51 | 只看该作者
看看msp430的表现:

1.
unsigned char A,B
A = B;

mov.b &B,&A   3,6


3指令字 6指令周期

2.
unsigned char A,B,C
C = A+B;

mov.b &A,R14   2,3
add.b &B,R14   2,3
mov.b R14,&C   2,4

6指令字 10指令周期

3.
unsigned char A[10],B,C
A[B] = C


mov.b &B ,R15      2,3
and.w 0xff,R15     2,2
mov.b &C,_A(R15)   3,6  //_A为数组的首地址,如0x200

7指令字 11指令周期

4.
unsigned char A[10];
unsigned char i;

for(i = 0; i < 10;i++)
{
A = 1;
}



    clr.b   &i            2,4
     jmp     L1           1,2

L2     mov.b   &i,R15        2,3
    and.w   #0xFF,R15     2,2
    mov.b   #0x1,_A(R15)  3,6

    inc.b   &i            2,4

L1    cmp.b   #0xA,&i       3,5
     jnc     L2            1,2


16指令字 226指令周期

5.
unsigned char A,B;

if(A > 10)
B = 0;
else
B = 1;

    cmp.b   #0xB,&A      3,5
    jnc     L1           1,2

    clr.b   &B           2,4
    jmp     L2           1,2

L1       mov.b   #0x1,&B     3,5

L2:

10指令字 16指令周期

6.
unsigned char A,B

switch(A)
{
case 0:
B = 10;
break;

case 1:
B = 20
break;

default:
B = 30;
break;
}



     mov.b   &A,R14           2,3
     sub.b   #0x0,R14         2,2
     jeq     L1               1,2
     dec.b   R14              1.1
     jeq     L2               1,2
     jmp     L3               1,2

L1   mov.b   #0xA,&B          3,5
     jmp     next           1,2

L2   mov.b   #0x14,&B         3,5
     jmp     next           1,2

L3   mov.b   #0x1E,&B         3,5

next:


19指令字 17指令周期




真没想到msp430如此低效率,考虑到是16位,和每个寄存器都可参与运算,

可能实际在运算比较复杂,运算量比较大的时候,表现要好一点.

但是总体来讲还是比较低的.

使用特权

评论回复
127
machunshui|  楼主 | 2010-10-24 17:56 | 只看该作者
针对pic
1.A=B;

movf _B,w
movwf _A

总共: 2指令字,2指令周期


2. C = A+B;

movf    _A,w
addwf    _B,w
movwf    _C

总共: 3指令字,3指令周期


3. A[B] = C;

movf    _B,w
addlw    _A
movwf    4
bcf    3,7
movf    _C,w
movwf    0
总共: 6指令字,6指令周期


4.
for(i = 0; i < 10;i++)
{
A = 1;
}

    clrf    _i
    goto    $2

$1    movf    _i,w
    addlw    _A
    movwf    4
    bcf    3,7
    clrf    0
    incf    0
    incf    _i

$2    movlw    10
    subwf    _i,w
    btfsc    3,0
        return
    goto    $1

运行时间123个指令周期,17个指令字



5.

if(A > 10)
B = 0;
else
B = 1;


         movlw     11
         subwf     _A,w
    clrf    _B
    btfss    3,0
    incf    _B

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


6.
unsigned char A,B

switch(A)
{
case 0:
B = 10;
break;

case 1:
B = 20
break;

default:
B = 30;
break;
}


    goto    l3
l4
    movlw    10
    movwf    _B
    return
   
l5
    movlw    20
    movwf    _B
    return
   
16
    movlw    30
    movwf    _B
    return

l3
    bcf    3,5
    bcf    3,6    ;carry unused
    movf    _A,w
    xorlw    0
    btfsc    3,2
    goto    l4
    xorlw    1
    btfsc    3,2
    goto    l5
    goto    l6

27指令字,运行9个指令周期

使用特权

评论回复
128
machunshui|  楼主 | 2010-10-24 18:03 | 只看该作者
常见C语言语句类型运算效能结果 :

第一项:
PIC                                   msp430
2指令字,2指令周期              3指令字 6指令周期

第二项:
PIC                                   msp430
3指令字,3指令周期              6指令字 10指令周期

第三项:
PIC                                   msp430
6指令字,6指令周期              7指令字 11指令周期

第四项:
PIC                                              msp430
17个指令字,123个指令周期            16指令字 226指令周期

第五项:
PIC                                   msp430
5指令字,5指令周期              10指令字 16指令周期

第六项:
PIC                                            msp430
27指令字,运行9个指令周期           19指令字 17指令周期

使用特权

评论回复
129
machunshui|  楼主 | 2010-10-24 18:05 | 只看该作者
好好看看PIC指令效率是不是比msp430 如何????

使用特权

评论回复
130
dl_shuang| | 2010-10-24 18:10 | 只看该作者
5.

if(A > 10)
B = 0;
else
B = 1;


         movlw     11
         subwf     _A,w
    clrf    _B
    btfss    3,0
    incf    _B

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



这句这样汇编好像容易出问题
当A>10时,B会首先被清零,如果此时程序执行中断程序,使用变量B就会导致错误。

PIC不用好多年了,汇编有些记不住了,不一定对。

使用特权

评论回复
131
xwj| | 2010-10-24 18:32 | 只看该作者
我觉得PIC太牛B了。
牛B的不是技术,而是忽悠、概念转换、指鹿为马,故意让你绕晕头。

machunshui,你自己说说,PIC和TI到底比的是性能(MIPS)?还是低功耗?
然后看你116楼的 《MICROCHIP驳斥TI SLAY015白皮书.pdf 》一文里,是怎么比的,到底有没有处以4!!!

比的不是时钟数目,而是指令数目。
对PIC16而言如果其芯片新能是8MIPS,
实际上效率基本就接近于8MIPS。
因为PIC16是每条指令周期数目大部分都是相同的4 时钟周期。


MSP430 的8MIPS,
远远不是8MIPS,
因为其指 ...
machunshui 发表于 2010-10-23 23:15

好笑的比较.jpg (240.35 KB )

好笑的比较.jpg

使用特权

评论回复
132
dl_shuang| | 2010-10-24 18:34 | 只看该作者
unsigned char A[10],B,C
A[B] = C


mov.b &B ,R15      2,3
and.w 0xff,R15     2,2
mov.b &C,_A(R15)   3,6  //_A为数组的首地址,如0x200

7指令字 11指令周期

可试试连续数组赋值,和整型数组

使用特权

评论回复
133
dl_shuang| | 2010-10-24 18:35 | 只看该作者
4.
unsigned char A[10];
unsigned char i;

for(i = 0; i < 10;i++)
{
A = 1;
}



    clr.b   &i            2,4
     jmp     L1           1,2

L2     mov.b   &i,R15        2,3
    and.w   #0xFF,R15     2,2
    mov.b   #0x1,_A(R15)  3,6

    inc.b   &i            2,4

L1    cmp.b   #0xA,&i       3,5
     jnc     L2            1,2



这里边的i变量基本都会用Rn寄存器来定义

使用特权

评论回复
134
dl_shuang| | 2010-10-24 18:50 | 只看该作者
430直接操作RAM确实有些慢,但因为他的R寄存器比较多,类似51的累加器,很多局部变量都可以用Rn寄存器来定义,会大大加快他的运行速度。
上面的例子我估计是Microchip给的,明显对PIC单片机有利。

使用特权

评论回复
135
xwj| | 2010-10-24 18:57 | 只看该作者
再看看LZ自己在2楼贴的图:

有没有除以4???

同样1MHz下PIC会比MSP430快???
16位操作时PIC还能和MSP430比???
数组和数组互相拷贝时PIC能和MSP430比???

这么明显的忽悠都看不出来???

使用特权

评论回复
136
machunshui|  楼主 | 2010-10-24 18:58 | 只看该作者
啥MICROCHIP给出的!
这是我自己总结的!

基本的语句效率都狂低!

多寄存器一般针对大量数**算的时候,

实际程序恰恰频繁的RAM操作或者RAM映射的外设寄存器操作居多!

MSP430实际更低效!

使用特权

评论回复
137
machunshui|  楼主 | 2010-10-24 19:02 | 只看该作者
XWJ
倒是msp430指令效率比PIC到底怎样啊?

使用特权

评论回复
138
machunshui|  楼主 | 2010-10-24 19:05 | 只看该作者
msp430指令效率比PIC到底怎样啊?
数据说话,才没有偏见。

不要你不喜欢PIC,
就瞎估计。

使用特权

评论回复
139
xwj| | 2010-10-24 19:08 | 只看该作者
说指令效率就得是同样的操作多少个时钟周期能完成,而不是指令周期!
或者同样的耗电下谁能执行更多的操作。

不然那现在1T的51岂不是比12T的51效率低多了,那还比个毛???

使用特权

评论回复
140
machunshui|  楼主 | 2010-10-24 19:10 | 只看该作者
好吧,
就算我说的都除以4的说法有疏漏,
这是字眼上的问题。

那就算除以4,
msp430指令效率比PIC到底怎样?

使用特权

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

本版积分规则