Qt 在樹莓派中封裝wiringPi中斷

2021-08-10 23:50:18 字數 1393 閱讀 8976

關於樹莓派的介紹這裡就不做過多描述了,關於樹莓派的更多資訊請移步:

樹莓派學習筆記——gpio功能學習

由於 wiringpi 的中斷不會在新中斷來臨時將之前還沒有執行完的中斷函式給終止掉(最多會存在兩個),因此不能使用 delay 的方式做延時消抖,在這裡我採用的辦法是使用qtimer來做非同步的延時消抖。

但是如果直接在 wiringpi 的中斷處理函式中呼叫qtimerstart()方法,會導致qtimertimeout訊號無法在超時之後發出來,而是需要其他的訊號驅動,比如另外的qtimer發出了timeout訊號,這時在 wiringpi 中斷中呼叫start()方法開啟的那個qtimer才會發出timeout訊號。

這大概是由於 wiringpi 的中斷處理函式與 qtimer 不在乙個執行緒導致的,所以我們需要借助另外乙個訊號來開啟定時器,即在 wiringpi 的中斷函式中不直接開定時器,而是發出乙個訊號,在這個訊號的草函式(與定時器是乙個執行緒了)中開定時器,這樣就可以防止出現上面說的問題。

下面是**(手打,沒有編譯過,僅僅是乙個思路)

rpikey.h

#ifndef rpikey_h

#define rpikey_h

#include

#define key_power 2

#define irpikey rpikey::getinstance()

class qtimer;

class rpikey : public qobject

;void int_keypower();

#endif // rpikey_h

rpikey.cpp

#include

"rpikey.h"

#include

#include

#include

void int_keypower()

rpikey *rpikey::self=0;

rpikey *rpikey::getinstance()

return

self;

}rpikey::rpikey(qobject *

parent) :

qobject(parent)

void rpikey::initialize()

void rpikey::ontimerout()

void rpikey::onkeypowerinterrupted()

在vue中封裝axios

將 axios 新增到vue的原型中 例項物件可以直接使用原型物件中的屬性或方法 所有的元件都是vue的例項 說明 只要是像 axios 這樣的第三方庫 與vue沒有任何關係 都應該通過這種方式來統一匯入 然後在元件中就用this.http代替axios 然後在元件的路徑可以寫成這樣 只要配置了攔擊...

QT中封裝的IP位址的widget

qt沒有提供乙個完整的ip位址控制項,1.可以使用qlineedit簡單的實現 qregexp regexp 2 0 4 d 25 0 5 01 d d?2 0 4 d 25 0 5 01 d d?qregexpvalidator pvalidator new qregexpvalidator re...

在dll中delphi中封裝窗體

dll工程library formdll uses sysutils,classes,forms,dllform in dllform.pas dllfrom2 in dllfrom2.pas begin end.dll單元檔案一 unit dllform inte ce uses windows,...