久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2545|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久观看| 91天堂 | 成人在线免费观看视频 | 国产电影一区二区在线观看 | 亚洲免费精品一区 | 91深夜福利视频 | 伊人一区| 亚洲精品在线视频 | 亚洲精品一区二区网址 | 日韩av免费在线电影 | 亚洲欧美在线视频 | 久久毛片网站 | 日韩一区二区三区在线观看视频 | 亚洲入口 | wwww.xxxx免费 | 亚洲午夜精品在线观看 | 中文字幕在线一区二区三区 | 久久噜噜噜精品国产亚洲综合 | 久久人| 亚洲国产高清在线观看 | 日韩欧美在 | 成人午夜免费网站 | 蜜桃视频成人 | 欧美成人免费在线视频 | 欧美中文字幕一区二区三区亚洲 | 亚洲精品视频一区 | 在线免费毛片 | 亚洲第1页| 天天av综合| 免费99精品国产自在在线 | 日韩免费网站 | 中文字幕日韩欧美 | 日本精品视频一区二区三区四区 | 国产精品一区二区在线 | 黄色日批视频 | 亚洲免费一区二区 | 成人免费视频网站在线看 | 久久国产高清 | 天天综合网91 | 久久精品国产一区 | 在线观看www |