djyos中斷控制塊的結構示意圖如圖1所示:
圖1 djyos中斷控制塊結構示意圖
在djyos中中斷執行流程如下:中斷源產生中斷請求irq-->跳轉至中斷向量表中查詢相應isr及中斷號-->儲存現場
-->呼叫djyos的中斷入口函式int_engine_all-->判斷中斷類別(real或sync)-->呼叫使用者註冊的中斷服務函式——返回至isr並恢復現場——中斷返回。
ok,了解了djyos的中斷處理流程,如何將中斷源掛接到圖1所示djyos的中斷控制塊上呢?歸納以下,需要以下3個步驟,
step1:在cpu_peri_int_line.h中定義中斷號,每款cpu都定義自己的中斷源及中斷號,發生中斷號後,硬體會根據這個中斷號跳轉到中斷向量表中相應的位置執行中斷isr,這裡需要確保定義的中斷號與該款cpu datasheet中定義中斷號保持一致。
step2:在critical.c中配置當前工程使用到的中斷號,具體配置方法為在全域性陣列tg_intused新增相應的中斷號,如mcb1700工程中配置的
constufast_t tg_intused =
;
step3:對於使用具體中斷時,需要依次呼叫以下5個函式:
1.bool_t int_setcleartype(ufast_t ufl_line,ufast_t clear_type) //設定某中斷線的應答方式
2.void int_isrconnect(ufast_t ufl_line, u32 (*isr)(ufast_t)) //關聯中斷線與isr
3.bool_t int_settoasynsignal(ufast_t ufl_line)/ bool_t int_settoreal(ufast_t ufl_line) //設定中斷為非同步訊號or實時中斷
4.bool_t int_clearline(ufast_t ufl_line) //清除相應中斷線的中斷掛起狀態
5.bool_t int_restoreasynline(ufast_t ufl_line)/ bool_t int_restorerealline(ufast_t ufl_line) //恢復儲存的非同步訊號或實時中斷中斷線狀態(與第3個函式保持一致)
完成了以上3個步驟,你就可將自己的中斷isr函式在djyos中運轉起來了。當然這裡還有乙個前提就是你手頭上的板子關於djyos的中斷移植部分(即bsp目錄下int_hard.c/int_hard.h)已經完成,關於這部分下次再嘮叨嘮叨。
上文如有不當之處,敬請指正,歡迎拍磚~~~
中斷執行緒的方式
變數標識 匿名內部類使用區域性變數時,必須是 final,否則編譯報錯 匿名內部類使用字段,不需要 final 使用 volatile 修飾,實現多執行緒間變數的可見性 volatile boolean loop true while condition test public void testw...
JAVA中斷執行緒的方法
thread.stop,thread.suspend,thread.resume和runtime.runfinalizersonexit這些終止執行緒執行的方法已經被廢棄,使用它們是極端不安全的!現在,如果你要安全有效地終止乙個執行緒,應該採用以下這些方法 1,執行緒正常執行完畢,正常結束。也就是讓...
Java中斷執行緒的方式
方式一 stop 方法 目前改方法已被註解 deprecated,因為它是執行緒不安全的操作,呼叫stop方法後,執行緒會立即停止,導致執行緒邏輯有一部分未執行,造成得到不可預期的結果。如下 中,預期輸出的結果是i j,但是使用stop中斷執行緒後,大概率出現j i 1.public class s...