打印
[资料干货]

请教代码运行错乱问题

[复制链接]
500|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdszzyq|  楼主 | 2019-11-20 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一段代码在以前的设备中都运行正常,今天在一台设备也是类似的写法却出现问题,程序没有跑死,也没有复位,但第三代码无法被执行,third没被赋值为1,也就是说 if(count==50)first=1;没执行,导致 third=1;也没执行,难道count这个变量从49直接跳过50到51了?count的值为101,second这个变量一直在累加,说明程序正常运行,百思不得其解。初步怀疑是供电不稳定导致的,我也尝试瞬断供电也模拟出这种情况,要说电压过低MCU也会复位啊,但它又没有复位,我的程序开启了低电压检测,但在中断里只是保存一些不相关的数据而已,为何count累加时会跳过50这个值呢?而同样的写法在别的设备上都没问题,用的都是一样的板子。请大家帮忙分析一下是什么原因,谢谢了。

u8 count,first,second,third;
int main(void)
{
   count=0;
   first=0;
   second=0;
   third=0;
   while(1)
   {
       if(count==50)first=1;
       if(count>100)
       {
            second+=1;
       }
       else count++;
      //第三段代码
       if(first==1)
       {
           third=1;
       }
       ......
   }
}

使用特权

评论回复

相关帖子

沙发
gdszzyq|  楼主 | 2019-11-20 11:02 | 只看该作者
用的MCU是stm32f103vbt

使用特权

评论回复
板凳
一事无成就是我| | 2019-11-20 22:03 | 只看该作者
估计是被优化掉了,改用下面这个看看
               if(count <= 100)
                {
                        if(count == 50) first=1;
                        count += 1;
                }
                else
                {
                        second+=1;
                        //这里是否需要清除count = 0
                }
                //第三段代码
       if(first==1) third=1;  //这里first是否需要清除

使用特权

评论回复
地板
gdszzyq|  楼主 | 2019-11-21 10:39 | 只看该作者
一事无成就是我 发表于 2019-11-20 22:03
估计是被优化掉了,改用下面这个看看
               if(count

没被优化,因为只是偶尔出现问题,如果优化掉了那就一直有问题了

使用特权

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

本版积分规则

46

主题

322

帖子

3

粉丝