我有一個我爲Arduino寫的使用中斷的類。目前我需要在主要的Arduino草圖中創建一個ISR實例,然後將其傳遞給類的初始化函數,該函數運行「attachInterrupt」。這是非常糟糕的風格(爲什麼用戶應該知道我甚至使用了中斷?),所以我希望整個事情被包含在類的頭文件和源文件中。如何在Arduino類中創建ISR?
我試圖讓ISR成爲一個靜態的朋友函數,但它不能到達任何類的非靜態成員。所以現在我對這種方法的工作應該是什麼也不應該是靜態的有點困惑。我試圖做看起來就像這樣(源文件和頭在這裏結合,爲方便閱讀)
class myClass{
friend void ISR();
void init(){attachInterrupt(ISR,..,..);}
}
static void ISR(){
all sort of stuff using myClass.members;
}
但是,編譯罵我在一個靜態函數使用非靜態成員。 我真的很感謝在理解我如何使它工作方面的一些幫助。
「爲什麼要用戶知道,我甚至使用中斷嗎?」因爲你正在使用微控制器的獨特功能,所以他需要知道它,所以他可以計劃如何管理它。如果您針對一個引腳使用電平變化中斷,並且不希望他看到該引腳,那麼他將無法使用每個引腳上的電平變化中斷,因爲ISR已經實現由你。只需創建一個他必須在ISR中調用的函數,或者將宏寫入ISR並請求他將其寫入主代碼 – frarugi87