欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4))條件未滿足還是退出了 [打印本頁]

作者: 家星    時間: 2021-5-10 08:31
標題: 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){}

這個程序又能正確執行。
實在想不通是什么原因,請大家幫忙分析分析,謝謝

作者: xstong    時間: 2021-5-10 09:09
粗心大意,while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4))  不等價 test_temp=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4);   while(test_temp){}
作者: 黃youhui    時間: 2021-5-10 09:35
4 最重要的一點,其實的while()根本就沒進去,至于為何會直接跳到break,可能是代碼優化的結果,進去后直接break和沒進去是一個效果。
4 最重要的一點,其實的while()根本就沒進去,至于為何會直接跳到break,可能是代碼優化的結果,進去后直接break和沒進去是一個效果。
4 最重要的一點,其實的while()根本就沒進去,至于為何會直接跳到break,可能是代碼優化的結果,進去后直接break和沒進去是一個效果。


1 外部輸入的信號,共地了嗎?
2 while()里面很少會放函數的,因為函數返回值可能是一個整數也可能是一個地址
3 你的全局變量初始化了嗎?如果沒有初始化,他們可以是任意值。


作者: 家星    時間: 2021-5-10 10:23
黃youhui 發表于 2021-5-10 09:35
4 最重要的一點,其實的while()根本就沒進去,至于為何會直接跳到break,可能是代碼優化的結果,進去后直 ...

謝謝回復,我已經查到原因了。因為while內的條件不滿足了,所以跳到了break內退出了。因為我通過示波器看過,將輸入線拔掉后,IO口的電平始終是高的,所以想不通while為什么會退出,后來我發現PC4的電平在1和0之間變化,現在我懷疑是硬件壞了或是別的原因,我自己再查查。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1