SylixOS中斷流程

2021-07-30 16:56:00 字數 885 閱讀 5794

sylixos中斷註冊是通過陣列和雙向鍊錶實現的。

_k_idesctable [256]是sylixos核心中的系統中斷向量結構索引陣列,用於索引註冊的中斷服務函式,其型別如清單 21所示

清單21

typedef struct  lw_class_intdesc

第乙個成員是雙向鍊錶的頭指標,用於指向將來註冊的中斷向量結構鍊錶。

每進行一次中斷註冊,核心建立乙個中斷向量結構。如果有多個中斷源共享乙個中斷號,核心將這些中斷源的各個中斷向量結構鏈結成雙向鍊錶。中斷向量結構型別如清單 22所示:

清單22

typedef struct  lw_class_intact

當進行一次中斷註冊,核心依次完成如下事務:

當中斷發生後,arm核心自動完成如下事務:

當前程式的執行狀態是儲存在cpsr中的,中斷發生時,要儲存當前cpsr中的執行狀態到中斷模式的spsr中,將來中斷返回時,恢復到cpsr,恢復執行狀態。

硬體自動將中斷異常碼寫入cpsr中的模式位,cpu進入中斷模式。同時硬體自動切換處理器到arm狀態下執行指令,並且cpu通過設定cpsr相應位來關閉中斷。

當前程式被中斷打斷,切換到中斷處理程式裡,中斷處理完後,返回當前被打斷模式繼續執行,因此必須要儲存當前指令的下一條指令的位址到中斷模式下的lr中。由於arm異常模式不同以及arm核心採用流水線技術,中斷處理程式需要重新計算正確的返回位址。

該操作是cpu硬體自動完成的,當異常發生時,cpu強制將pc的值改為乙個固定記憶體位址,並跳到此位址處執行。

sylixos中斷處理程式完成如下事務:

中斷處理階段1完成了3件事務:

此階段是真正的進行中斷處理,完成以下事務:

設定中斷流程

中斷分組設定 1.往scb aircr暫存器中寫入分組資訊,注意要寫入鑰匙0x05fa0000 分組號 具體中斷配置 建議寫成函式,引數為搶占優先順序,響應優先順序,在向量表中的名字,分組,原子提供的函式名是my nvic init 1.設定分組 和上一段一樣 2.將優先順序組合成4位 3.使能中斷...

ARM的工作模式和中斷流程

arm體系結構中有七個工作模式 0b10000 usr 使用者模式,一般的,唯一沒有特權的模式,也是正常工作模式,不能切換到其他模式 0b10001 fiq 快中斷模式,用於高速資料傳輸,快中斷響應的工作模式 0b10010 irq 中斷模式,通用中斷處理,一般中斷響應的工作模式 0b10011 s...

Hystrix熔斷流程

整個服務熔斷降級是在消費端 圖中流程的說明 將遠端服務呼叫邏輯封裝進乙個hystrixcommand。對於每次服務呼叫可以使用同步或非同步機制,對應執行execute 或queue 判斷熔斷器 circuit breaker 是否開啟或者半開啟狀態,如果開啟跳到步驟8,進行回退策略,如果關閉進入步驟...