cortex M核心優先順序設定

2021-10-06 12:40:31 字數 850 閱讀 7722

cortex m核心中

每個中斷都有乙個8位的優先順序設定暫存器

這個8位的暫存器可以分為搶占優先順序和子優先順序兩個部分(通過設定優先順序組設定)

搶占優先順序和子優先順序有什麼用?

舉例說明:

有兩個中斷a、b

a的搶占優先順序比b的高

當b發生中斷,正在執行b的中斷服務函式時

a發生了中斷,這個時候,會跳轉到a的中斷服務函式

a的中斷服務函式執行完畢後,再接著執行b的中斷服務函式

這就是中斷搶占

子優先順序的作用是當兩個中斷的搶占優先順序相同時,這兩個中斷同時發生(或者都被掛起的狀態下)

子優先順序高的先執行,低的暫時掛起,等子優先順序高的執行完後再執行

由於搶占優先順序一樣,不會發生中斷搶占

雖然這個是8位的暫存器,但是一般的微控制器都不會使用全部8位

規定最少使用高3位(具體可以參考《cortex-m4權威指南》)

lpc54606的優先順序就只用了高3位(程式注釋可能沒有改)

而k60、k66、kv58、rt1052都是用了高4位

只用高3位的情況下

設定中斷優先順序組 0: 0個搶占優先順序 8個子優先順序

1: 2個搶占優先順序 4個子優先順序

2: 4個搶占優先順序 2個子優先順序

3: 8個搶占優先順序 0個子優先順序

只用高4位的情況下 0: 0個搶占優先順序 16個子優先順序

1: 2個搶占優先順序 8個子優先順序

2: 4個搶占優先順序 4個子優先順序

3: 8個搶占優先順序 2個子優先順序

4: 16個搶占優先順序 0個子優先順序

因為用的是高位 所以設定優先順序分組時,需要用 優先順序分組 = 0x07 - 序號

核心執行緒優先順序的設定

個人理解,核心級執行緒和程序是一樣的,前者與posix執行緒 pthread 有很大的區別。因此,核心的程序排程策略和系統呼叫也適用於核心級執行緒。排程策略有三種 1.sched normal 非實時排程策略,預設情況下是100 139,由nice值決定 2.sched fifo實時排程策略,先到先...

Linux printk優先順序設定

printk 是核心態列印函式。我們可以通過附加不同的 優先順序 對資訊分類。目前共有 8 種優先順序,按優先順序從高到低順序排列如下 1 define kern emerg 0 緊急事件訊息,系統崩潰之前提示,表示系統不可用 2 define kern alert 1 報告訊息,表示必須立即採取措...

Cortex M3滴答定時器優先順序設定

首先宣告一點,滴答定時器優先順序是可以設定的同樣受nvic控制。設定 如下 系統中斷管理 void nvic configuration void 其實systick中斷優先順序的設定,只有一行 nvic setpriority systick irqn,nvic encodepriority nv...