打印

一个带返回值的函数存在的BUG

[复制链接]
1670|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tjx727|  楼主 | 2010-4-1 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint8
AutoCheck(uint8 UserCode,uint8 TransmitCode)

{

uint8
temp;


temp = ~code[3];


if(decode_end)


{


decode_end = 0;


if((UserCode == code[0]) && (TransmitCode == code[2]) && (TransmitCode == temp))


{


return 1;


}


else


{



return 0;


}


}


else


{


return 0;


}

}

do


{


Test_Bug = AutoCheck(TheUserCode,T3Code);


if(Test_Bug)


{


send_char_com(Test_Bug);


send_char_com('0');


send_char_com(code[0]);


send_char_com(code[1]);


send_char_com(code[2]);


send_char_com(code[3]);


Step = t_3;


TX_GUI(Step);


}


if(Step != t_2)


{


WorkLed_ON();


send_char_com(Step);


}


}


while(Step == 2);//t_2

这是从串口调试助手上面得到的结果。
03 30 B4 B4 30 CF 30 30 48 20 30 30 4D 20 32 31 53 0A 53 74 65 70 20 33 3A 20 0A
第一个数03表示Test_Bug=3,太不可思议了。
这个AutoCheck函数是检测红外编码的,要是检测到的红外码跟规定的编码相同则返回一个1,这个do……while循环是当AutoCheck函数返回1的时候将Step = t_3t_3=3t_2=2),赋值到下一步,进入下一步检测。
麻烦各位告诉我下有什么情况能够使AutoCheck函数返回一个3?这个BUG太令我无语了。Test_Bug是我刚定义的,不存在在其他地方更改其值的情况。
沙发
tjx727|  楼主 | 2010-4-1 10:30 | 只看该作者
uint8        AutoCheck(uint8 UserCode,uint8 TransmitCode)
{
        uint8        temp;
        temp = ~code[3];
        if(decode_end)
        {
                decode_end = 0;
                if((UserCode == code[0]) && (TransmitCode == code[2]) && (TransmitCode == temp))       
                {
                        return 1;       
                }
                else
                {
                        return 0;       
                }
        }
        else
        {
                return 0;       
        }
}
                        do
                        {
                                Test_Bug = AutoCheck(TheUserCode,T3Code);
                                if(Test_Bug)
                                {
                                        send_char_com(Test_Bug);
                                        send_char_com('0');       
                                        send_char_com(code[0]);
                                        send_char_com(code[1]);
                                        send_char_com(code[2]);
                                        send_char_com(code[3]);
                                        Step = t_3;
                                        TX_GUI(Step);
                                }
                                if(Step != t_2)
                                {
                                        WorkLed_ON();
                                        send_char_com(Step);                                               
                                }                                                       
                        }                       
                        while(Step == 2);//t_2

使用特权

评论回复
板凳
tjx727|  楼主 | 2010-4-1 10:31 | 只看该作者
竟然没有对齐,上面再贴以下程序

使用特权

评论回复
地板
ddtx| | 2010-4-16 16:32 | 只看该作者
确实奇怪呀

使用特权

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

本版积分规则

个人签名:我们在追忆中展望­ 在展望中  调整着向前的步伐 个人新浪微博:http://t.sina.com.cn/tjx727­

30

主题

322

帖子

0

粉丝