找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2572|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4))條件未滿足還是退出了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  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++;   //錯(cuò)誤累加
  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.                         }        
復(fù)制代碼



遇到的問(wèn)題:
PC4的電平是外部輸入的,

我的設(shè)想,while循環(huán)內(nèi),只要PC4的電平還是高電平,就一直在循環(huán)內(nèi)跑,每過(guò)1毫秒,Phase_time這個(gè)標(biāo)志位+1,當(dāng)Phase_A_err>3才會(huì)break退出循環(huán),現(xiàn)在我單步調(diào)試執(zhí)行,發(fā)現(xiàn)if(Phase_A_err>3)這個(gè)條件都不滿足,就直接進(jìn)入到break這行,同時(shí)前兩行Phase_Error_flag=2;//A缺相        
                                        Phase_A_err=0;也直接跳過(guò)


其他發(fā)現(xiàn):
當(dāng)我在不直接寫while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)),而是先           test_temp=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4);
            while(test_temp){}

這個(gè)程序又能正確執(zhí)行。
實(shí)在想不通是什么原因,請(qǐng)大家?guī)兔Ψ治龇治觯x謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:429003 發(fā)表于 2021-5-10 09:09 | 只看該作者
粗心大意,while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4))  不等價(jià) test_temp=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4);   while(test_temp){}
回復(fù)

使用道具 舉報(bào)

板凳
ID:592807 發(fā)表于 2021-5-10 09:35 | 只看該作者
4 最重要的一點(diǎn),其實(shí)的while()根本就沒(méi)進(jìn)去,至于為何會(huì)直接跳到break,可能是代碼優(yōu)化的結(jié)果,進(jìn)去后直接break和沒(méi)進(jìn)去是一個(gè)效果。
4 最重要的一點(diǎn),其實(shí)的while()根本就沒(méi)進(jìn)去,至于為何會(huì)直接跳到break,可能是代碼優(yōu)化的結(jié)果,進(jìn)去后直接break和沒(méi)進(jìn)去是一個(gè)效果。
4 最重要的一點(diǎn),其實(shí)的while()根本就沒(méi)進(jìn)去,至于為何會(huì)直接跳到break,可能是代碼優(yōu)化的結(jié)果,進(jìn)去后直接break和沒(méi)進(jìn)去是一個(gè)效果。


1 外部輸入的信號(hào),共地了嗎?
2 while()里面很少會(huì)放函數(shù)的,因?yàn)楹瘮?shù)返回值可能是一個(gè)整數(shù)也可能是一個(gè)地址
3 你的全局變量初始化了嗎?如果沒(méi)有初始化,他們可以是任意值。

回復(fù)

使用道具 舉報(bào)

地板
ID:585428 發(fā)表于 2021-5-10 10:23 | 只看該作者
黃youhui 發(fā)表于 2021-5-10 09:35
4 最重要的一點(diǎn),其實(shí)的while()根本就沒(méi)進(jìn)去,至于為何會(huì)直接跳到break,可能是代碼優(yōu)化的結(jié)果,進(jìn)去后直 ...

謝謝回復(fù),我已經(jīng)查到原因了。因?yàn)閣hile內(nèi)的條件不滿足了,所以跳到了break內(nèi)退出了。因?yàn)槲彝ㄟ^(guò)示波器看過(guò),將輸入線拔掉后,IO口的電平始終是高的,所以想不通while為什么會(huì)退出,后來(lái)我發(fā)現(xiàn)PC4的電平在1和0之間變化,現(xiàn)在我懷疑是硬件壞了或是別的原因,我自己再查查。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表