找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1983|回复: 3
打印 上一主题 下一主题
收起左侧

C语言while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4))条件未满足还是退出了

[复制链接]
跳转到指定楼层
楼主
  1. while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4))
  2.                         {
  3.                         
  4.                                 Phase_time++;
  5.                                 delay_ms(1);               
  6.                                 if(Phase_time>=15)
  7.                                 {
  8.                                         Phase_A_err++;   //错误累加
  9.                                         Phase_time=0;    //清零
  10.                                 }
  11.                                 if(Phase_A_err>3)
  12.                                 {
  13.                                         Phase_Error_flag=2;//A缺相        
  14.                                         Phase_A_err=0;
  15.                                         break;               
  16.                                 }
  17.                                 Phase_Error_flag=0;
  18.                         }        
复制代码



遇到的问题:
PC4的电平是外部输入的,

我的设想,while循环内,只要PC4的电平还是高电平,就一直在循环内跑,每过1毫秒,Phase_time这个标志位+1,当Phase_A_err>3才会break退出循环,现在我单步调试执行,发现if(Phase_A_err>3)这个条件都不满足,就直接进入到break这行,同时前两行Phase_Error_flag=2;//A缺相        
                                        Phase_A_err=0;也直接跳过


其他发现:
当我在不直接写while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)),而是先           test_temp=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4);
            while(test_temp){}

这个程序又能正确执行。
实在想不通是什么原因,请大家帮忙分析分析,谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:429003 发表于 2021-5-10 09:09 | 只看该作者
粗心大意,while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4))  不等价 test_temp=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4);   while(test_temp){}
回复

使用道具 举报

板凳
ID:592807 发表于 2021-5-10 09:35 | 只看该作者
4 最重要的一点,其实的while()根本就没进去,至于为何会直接跳到break,可能是代码优化的结果,进去后直接break和没进去是一个效果。
4 最重要的一点,其实的while()根本就没进去,至于为何会直接跳到break,可能是代码优化的结果,进去后直接break和没进去是一个效果。
4 最重要的一点,其实的while()根本就没进去,至于为何会直接跳到break,可能是代码优化的结果,进去后直接break和没进去是一个效果。


1 外部输入的信号,共地了吗?
2 while()里面很少会放函数的,因为函数返回值可能是一个整数也可能是一个地址
3 你的全局变量初始化了吗?如果没有初始化,他们可以是任意值。

回复

使用道具 举报

地板
ID:585428 发表于 2021-5-10 10:23 | 只看该作者
黄youhui 发表于 2021-5-10 09:35
4 最重要的一点,其实的while()根本就没进去,至于为何会直接跳到break,可能是代码优化的结果,进去后直 ...

谢谢回复,我已经查到原因了。因为while内的条件不满足了,所以跳到了break内退出了。因为我通过示波器看过,将输入线拔掉后,IO口的电平始终是高的,所以想不通while为什么会退出,后来我发现PC4的电平在1和0之间变化,现在我怀疑是硬件坏了或是别的原因,我自己再查查。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表