[PIC®/AVR®/dsPIC®产品] PIC16F877A的C语言代码逻辑与问题,换了位置就执行效果不同

[复制链接]
 楼主| 飞翔浚流 发表于 2020-7-12 08:42 | 显示全部楼层 |阅读模式
单片机是PIC16F877A 用Proteus仿真 发现代码有这个问题
  if((output_var!=0x00)&&(output_var!=0x80))
  {

       RB1=~RB1;
  }
和  if((output_var!=0x80)&&(output_var!=0x00))
  {

       RB1=~RB1;
  }
两个代码有什么区别?第二种会执行RB1,编译器是MPLAB+PICC 谢谢!
难道是编译器优化了?

淘猫汤姆 发表于 2020-7-12 11:37 | 显示全部楼层
本帖最后由 淘猫汤姆 于 2020-7-12 11:38 编辑

这两段代码逻辑是应该是一样的,除了运算顺序略有区别。
另外,编译器你应该给出版本和优化设置,其他也无法排出“破丢死”的问题,你也可以在MPLAB内sim一下看看。如果怀疑优化的问题,你最好贴出反汇编,菜单view,disassembly
dog_xin 发表于 2020-7-12 18:12 | 显示全部楼层
一模一样的,可能软件有问题
zeshoufx 发表于 2020-7-13 08:39 | 显示全部楼层
应该不至于吧
lcczg 发表于 2020-7-13 15:07 | 显示全部楼层
不会的。Proteus的问题吧
CoolSilicon 发表于 2020-7-13 16:20 | 显示全部楼层
看起来没差别啊..
可以试试在X IDE用simulator软仿的方式来试试..
 楼主| 飞翔浚流 发表于 2020-12-14 15:50 | 显示全部楼层
淘猫汤姆 发表于 2020-7-12 11:37
这两段代码逻辑是应该是一样的,除了运算顺序略有区别。
另外,编译器你应该给出版本和优化设置,其他也无 ...

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

6

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部