打印

这个程序怎么了????

[复制链接]
1600|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
win2000_li|  楼主 | 2009-6-3 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
INT8U CheckSum(void)
{
    INT8U  ChVa = SetZero;
    INT8U  SUM  = SetZero;
    INT8U  Tmp2 = SetZero;
    
    INT16U Temp1 = SetZero;

    Temp1  = 0x15;
    Temp1 += 0xf8;
    Temp1 += 0x66;
    Temp1 += 0x12;
    Temp1 += 0x03;
    /*
    Tmp1 += RKE_FIFO_DATA[0] & 0x00ff;
    Tmp1 += (RKE_FIFO_DATA[0] & 0xff00) >> 8;
    Tmp1 += RKE_FIFO_DATA[1] & 0x0003;
    Tmp1 += (RKE_FIFO_DATA[1] & 0xff00) >> 8;
    Tmp1 += RKE_FIFO_DATA[2] & 0x00ff;
    Tmp1 += (RKE_FIFO_DATA[2] & 0xff00) >> 8;

    Tmp2 = (INT8U)(Tmp1 & 0x00ff + (Tmp1 & 0xff00) >> 8);
    SUM  = (2 << Tmp2) + Tmp2 & 0xfc;
    ChVa = (INT8U)(RKE_FIFO_DATA[1] & 0x00fc);
    */
    
    /*if (SUM == ChVa)
        return (TRUE);
    else
        return (FALSE);
        */
}

为什么这个程序不执行上面的加法运算呢????

相关帖子

沙发
张明峰| | 2009-6-3 10:18 | 只看该作者

被优化掉了

你做了一连串的Temp1加,到最后Temp1根本就没有发挥作用。编译器一看,这不是白干么?删了得了。

使用特权

评论回复
板凳
win2000_li|  楼主 | 2009-6-3 10:30 | 只看该作者

这是我的测试程序.大家帮我看一看.

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


unsigned int abc[3] = 
{
    0xf815, 
    0x666b,
    0x0038
};

unsigned char CheckSum(void)
{
    unsigned int Temp1 = 0;
    unsigned char Temp2 = 0;
       
    Temp1  = (abc[0] & 0x00ff) + ((abc[0] & 0xff00) >> 8);
    Temp1 += (abc[1] & 0x0003) + ((abc[1] & 0xff00) >> 8);
    Temp1 += (abc[2] & 0x00ff) + ((abc[2] & 0xff00) >> 8);
 
    Temp2 = (Temp1 & 0x00ff) + ((Temp1 & 0xff00) >> 8);
    
    return (Temp2);    
}


void main(void) 
{
    unsigned char c = 0;
    for(;;)
    {
        c = CheckSum();
    }
}

使用特权

评论回复
地板
win2000_li|  楼主 | 2009-6-3 10:31 | 只看该作者

现在这个也不对头.

这里的Temp1不会也被优化吧!!!!!

使用特权

评论回复
5
win2000_li|  楼主 | 2009-6-3 10:59 | 只看该作者

真的是被优化了.

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

unsigned char c = 0;
unsigned char Sum = 0;
unsigned char Tes = 0; 
unsigned char Cmp = 0;
     
unsigned int abc[3] = 
{
    0xf815, 
    0x666b,
    0x0038
};

unsigned char CheckSum(void)
{
    unsigned int Temp1 = 0;
    unsigned char Temp2 = 0;
   
    Temp1  = (abc[0] & 0x00ff) + ((abc[0] & 0xff00) >> 8) + (abc[1] & 0x0003) + ((abc[1] & 0xff00) >> 8) + (abc[2] & 0x00ff) + ((abc[2] & 0xff00) >> 8);
    Temp2 = (Temp1 & 0x00ff) + ((Temp1 & 0xff00) >> 8);

    Sum   = (Temp2 & 0xfc) + (Temp2 << 2); 
    
    Cmp   = abc[1] & 0x00fc;
    
    if (Cmp == Sum)
    {
        return (TRUE);
    }
    else
    {
        return (FALSE);
    }
}


void main(void) 
{
    for(;;)
    {
        c = CheckSum();
    }
}

这样终于可以.解决了.谢谢老师,就是那里的问题....

使用特权

评论回复
6
张明峰| | 2009-6-3 11:52 | 只看该作者

上面的代码应该没问题

但Temp1的部分赋值操作被优化了。
不要老想着编译器有问题。

使用特权

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

本版积分规则

142

主题

718

帖子

1

粉丝