打印

拜求高手寻找程序漏洞

[复制链接]
1582|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
熊猫人电子|  楼主 | 2011-12-21 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面这个程序有时候对模块写数据是正确的,可有时候却写不进去!有时当我从键盘输入完5个字节的数据后,按下确认键对模块进行写数据的时候可以写进去,但是有时候却不行!所以我想肯定有个极其隐蔽的BUG存在,我调试了好久都没有找出原因,所以现在拜求程序高手指点一下!

目前程序出现的现象是:下面这个程序有时候对模块写数据是正确的,可有时候却写不进去!当我从键盘输入完5个字节的数据后,按下确认键对模块进行写数据的时候有时候可以写进去,但是有时候却不行!望程序高手们指教!!先谢过各位啦!
void main()
{
      uchar i;
      uchar temp1=0;
      uchar temp2=0;
      while(1)
      {               
            for(i=0;i<5;i++)   
            {     
                  KeyScan();                                       //自定义的键盘扫描函数,此函数无误
          temp1=keyvalue;                            //按下第一个键后赋给temp1
          KeyScan();               
          temp2=keyvalue;
                  if(0<=temp1<=9&&0<=temp2<=9)  //键值在0-9执行下语句                           
                  sendbuff[i]=(temp2+temp1*10);     //sendbuff[i]的值在0-99之间
            }
            KeyScan();                                             //调用键盘扫描函数
            if(keyvalue=='E')                                    //若按下'E'键,执行下面语句
           {
                  WriteData(sendbuff,5);                  //调用自定义WriteData函数;
          i=0;                                                //清零复位
          temp1=0;                                       //清零复位
             temp2=0;                                      //清零复位

            }
      }          
}

相关帖子

沙发
softerchang| | 2011-12-22 09:46 | 只看该作者
死循环里面嵌for循环,for()结束后又没有其他的执行语名,有多大用?

使用特权

评论回复
板凳
lost1421| | 2011-12-22 09:53 | 只看该作者
在调用WriteData(sendbuff,5)时,sendbuff[]内的数据每次都是正确的吗?如果是,那么WriteData()这函数内部有Bug。

使用特权

评论回复
地板
熊猫人电子|  楼主 | 2011-12-30 14:36 | 只看该作者
3# lost1421
是正确的!

使用特权

评论回复
5
熊猫人电子|  楼主 | 2011-12-30 14:38 | 只看该作者
2# softerchang
for循环后接着执行的是下面的语句啊!         
           KeyScan();                                             //调用键盘扫描函数
            if(keyvalue=='E')                                    //若按下'E'键,执行下面语句
           {
                  WriteData(sendbuff,5);                  //调用自定义WriteData函数;
          i=0;                                                //清零复位
          temp1=0;                                       //清零复位
             temp2=0;                                      //清零复位

使用特权

评论回复
6
t.jm| | 2011-12-30 14:50 | 只看该作者
从你的程序结构可以断定
KeyScan();                                       //自定义的键盘扫描函数,此函数无误
出问题的可能性比较大。

使用特权

评论回复
7
gx_huang| | 2011-12-30 19:41 | 只看该作者
这个语句像初中的数学。
C和数学的顺序有差别的。
像我这样不懂C的优先级的,一律加括号。

使用特权

评论回复
8
熊猫人电子|  楼主 | 2012-1-5 14:49 | 只看该作者
7# flmyueyang
我刚开始时用的是if((0<=temp1&&temp1<=9)&&(0<=temp2&&temp2<=9)),后来忘记改过来了!呵呵

使用特权

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

本版积分规则

0

主题

17

帖子

1

粉丝