按鍵阻塞與非阻塞

2021-10-01 17:41:51 字數 1951 閱讀 7557

同步、非同步:通訊方式

阻塞、非阻塞:等待狀態

老張愛喝茶,廢話不說/煮開水。

出場人物:老張,水壺兩把(普通氷壺,簡稱水壺,•會響m水壺,簡稱響氷壺)

1、老張把水壺放到火上,立等水開,(同步阻塞

老張覺得自己有點傻

2、老張把水誠到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞

老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀----的噪音^

3、老張把響水壺放到火上,立等水開。(非同步阻塞

老張覺得這樣傻等意義不大

4、老張把響水壺放到火上,去客廳看電視,7_)《壺響之前不再去看它了,響了再去拿壺。(非同步非阻塞

老張覺得自己聰明了。

需要消抖的原因

觸點按鍵(電平按鍵/ad按鍵)一般是由機械彈性開關,當機械按鍵觸點斷開、閉合時,由於機械觸點的彈性作用,所以按鍵開關在閉合時不會馬上就穩定的接觸,在斷開時也不會馬上一下子就徹底斷開,而是在閉合及斷開的瞬間均伴隨有一連串的抖動,鍵抖動會引起一次按鍵被誤讀多次。按鍵穩定閉合時間長短一般是由按鍵操作人員來決定,一般會在100ms時間以上,如果刻意的快速按下按鍵的話,有可能達到40~50ms時間左右。而抖動的時間是由按鍵的機械特性決定,一般會在10ms時間以內。為了確保cpu對按鍵的一次閉合僅作一次處理,所以必須去除抖動。按鍵去抖的核心理念是,當檢測到按鍵狀態變化時,不是立即去響應按鍵工作,而是先等待按鍵閉合或按鍵斷開徹底穩定後再對按鍵進行處理。

消抖方式

軟體消抖有兩種:

延時消抖:執行效率不高、cpu空轉、不能放到中斷服務函式;

對比消抖(非阻塞io):執行效率高、不會造成cpu空轉、可放在中斷服務函式中;

其中,值得格外注意的是pa0、pe4、pe3引腳外接的是上拉電阻,按鍵未按下時引腳為高電平。pe2引腳外接下拉電阻,按鍵未按下式引腳為低電平。按鍵按下各引腳電平反向。這在下面**中也有所體現。

**實現

/*按鍵消抖*/

/**************************

*函 數 名:unsigned char key_scanf(void)

*函式功能:按鍵掃瞄函式(對比消抖)

*參 數:無

*返 回 值:按鍵值

記錄3---5次

***************************/

unsigned char key_scanf(void)

else if(!gpio_readinputdatabit(gpioa,gpio_pin_0))

else if(!gpio_readinputdatabit(gpioe,gpio_pin_4))

else if(!gpio_readinputdatabit(gpioe,gpio_pin_3))

if(count >3)

} }/*檢測抬起*/

else if((!gpio_readinputdatabit(gpioe,gpio_pin_2))&&gpio_readinputdatabit(gpioa,gpio_pin_0)&&gpio_readinputdatabit(gpioe,gpio_pin_4)&&gpio_readinputdatabit(gpioe,gpio_pin_3))

return return_value;

}

阻塞與非阻塞賦值

李秋鳳,華清遠見嵌入式學院 講師。稍微接觸過verilog hdl的都對阻塞與非阻塞賦值略知一二,也是我們經常強調的重點之一,在課堂上還是有學員問什麼不一樣呢,為什麼我用阻塞賦值也能得出正確的結果呢?在編寫可綜合 的時候,建議大家不要忘了開啟rtl網表檢視器看看我們自己綜合出來的電路是不是自己想要的...

socket connect 阻塞與非阻塞

socket函式生成socket結構體時,預設生成的socket是阻塞的 如果我們使用connect去連線伺服器,而這時網路出現故障,則connect預設等候很長一段時間然後返回錯誤 我們可以設定socket為非阻塞模式,可以設定一定的等候時間,如果在設定的等候時間內connect失敗,則我們判定網...

阻塞與非阻塞I O

還記得上篇 我們講到的是linux中併發控制訪問的手段有哪些?原子 訊號量 自旋鎖 互斥體。這是為了保護臨界區的資源,是多個程序對共享資源的併發訪問的一種處理手段。但是,在驅動程式中,我們常常為了支援使用者空間對裝置的靈活訪問,引入了阻塞與非阻塞i o兩種不同模式。阻塞操作是指在執行裝置操作時若不能...