这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » if(a==1)与if(a!=1)的实现区别?

共16条 1/2 1 2 跳转至

if(a==1)与if(a!=1)的实现区别?

高工
2013-05-08 20:37:11     打赏

今天在进行一段代码的测试时,出现了如下的问题:

代码一:

unsigned char readpinb,

readpinb=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_0);    

    if(readpinb==1)

   {

     GPIO_SetBits(GPIOB,GPIO_Pin_0);          (1)

    }

    else

  {

      GPIO_ResetBits(GPIOB,GPIO_Pin_0);        (2)

   }

代码二:


unsigned char readpinb,

readpinb=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_0);    

      if(readpinb!=1)

     {

       GPIO_SetBits(GPIOB,GPIO_Pin_0);     (3)

     }

     else

    {

      GPIO_ResetBits(GPIOB,GPIO_Pin_0);    (4)

    }

当运行第一段代码的时候,程序只能执行语句(2),语句(1)永远执行不到,试着对其进行修改,改为代码二的形式,这时程序对if进行判断,语句(3)、(4)可以交替执行到,即为预期实现。虽然可以实现但对其原因不甚了解,在此请教一下,还望5大家不吝赐教,多谢




关键词: 代码测试    

高工
2013-05-08 21:09:05     打赏
2楼
显然读到的是"0",我试试后一种,多谢楼主指点

高工
2013-05-08 23:40:54     打赏
3楼

我试了一下将 if(readpinb==1)改成if(readpinb),结果还是读不到1,


另外用“!=1”的就没问题,即readpina...


高工
2013-05-08 23:42:19     打赏
4楼

我试了一下将 if(readpinb==1)改成if(readpinb),结果还是读不到1,


另外用“!=1”就没问题,如readpina


高工
2013-05-08 23:42:58     打赏
5楼
不至于吧,跟硬件关系不大

高工
2013-05-09 14:14:32     打赏
6楼
换一下位置就可以了,代码一应该是将语句(1)在第一次运行的时候优化掉了,以至于后期一直执行else后的语句(2),编译器太强大了

高工
2013-05-09 14:15:34     打赏
7楼
这种问题是我代码的错误,怪自己没有认真检查啊

高工
2013-05-09 14:18:22     打赏
8楼

不知道编译器还有这么强大的功能呢,以后可得小心了,多谢楼主的指点啊。

函数之所以读取输出管教的值是因为我想在中断中反转输出管脚。

这个如果操作寄存器的话来的更直接一些吧



高工
2013-05-09 14:21:07     打赏
9楼
对头,程序一由于编译器的优化功能在第一次执行if语句的时候将语句(1)优化掉了,以至于后期一直运行语句(2),多谢楼主指点,问题得到解决了,以后会注意编译器优化问题的,3Q

高工
2013-05-09 14:22:56     打赏
10楼
设置断点并单步执行了,只是没有注意到编译器的优化问题,受教育了,多谢楼主指点

共16条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]