wofei1314 发表于 2015-10-27 18:10:10

奇葩问题,来围观,帮我找错....

#define ExButton1()   GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_14)
#define ExButton2()   GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_12)
程序这样写就会出错,PE12的值读上来一直是1!
      if(ExButton1()==0)   //启动紧急开门1,并记录日志
      {
            q_doorcmd = DOOR_STATE_OPEN;
            trig_openstyle = R_TRIG_EXBTN1OPEN;
            RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//表示应急开门1
      }
      if(ExButton2()==0)   //启动应急开门2,并记录日志
      {
            q_doorcmd = DOOR_STATE_OPEN;
            trig_openstyle = R_TRIG_EXBTN2OPEN;
            RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//52='4',表示应急开门2
      }
程序这样写,读PE12的值就是0
      if((ExButton1()==0) || (ExButton2()==0))
      {
            Door1Open(1);

      }

郁闷了.....不知道怎么回事,有人遇到类似的问题吗?我上面是通用的硬件,其它程序都没有占用IO,正确的是PE12读上来为0 !

moyanming2013 发表于 2015-10-27 18:51:46

看你的编译器对于||是从左往右还是从右往左,然后如果一旦第一个判断正确,就不做第二个判断了。
if((ExButton1()==0) || (ExButton2()==0))

你好我好大家好! 发表于 2015-10-27 18:57:51

这个真不知道

wofei1314 发表于 2015-10-27 19:56:22

moyanming2013 发表于 2015-10-27 18:51
看你的编译器对于||是从左往右还是从右往左,然后如果一旦第一个判断正确,就不做第二个判断了。
...

第二个是正确相应的,主要是第一个出错

chifen 发表于 2015-10-27 21:13:14

你要把PE12设置成输入 带上位的

yanhaijian 发表于 2015-10-28 09:27:29

moyanming2013 发表于 2015-10-27 18:51
看你的编译器对于||是从左往右还是从右往左,然后如果一旦第一个判断正确,就不做第二个判断了。
...

正解啊。

wofei1314 发表于 2015-10-28 18:20:14

yanhaijian 发表于 2015-10-28 09:27
正解啊。

看来我表述的不好,if(||)这种是没问题的,有问题的是if()。。。if()。。。

wofei1314 发表于 2015-10-28 18:21:29

chifen 发表于 2015-10-27 21:13
你要把PE12设置成输入 带上位的

上拉下拉都试过了,就是读回来的是1.。。。

chifen 发表于 2015-10-28 19:03:18

状态输入 ,上位模式,IO时钟一定要开启,正常是为1的,对短路 会变成0

wofei1314 发表于 2015-10-28 21:48:55

chifen 发表于 2015-10-28 19:03
状态输入 ,上位模式,IO时钟一定要开启,正常是为1的,对短路 会变成0

谢谢,同样的程序配置,自然都使能 了时钟,配置了输入模式。。。。。

差别只是用两个if判断还是if(条件1 || 条件2),同样的板子。。。怀疑是keil的问题或者单片机的bug。。。
页: [1] 2 3 4
查看完整版本: 奇葩问题,来围观,帮我找错....