T-Kernel在Blackfin處理器上的移植分析
4 T-Kernel在BF533上的移植
4.1 系統(tǒng)中斷管理
T-Kernel對(duì)處理器中斷資源進(jìn)行動(dòng)態(tài)管理,在運(yùn)行時(shí)任務(wù)可以動(dòng)態(tài)更改中斷向量表、注冊(cè)和取消中斷,通過系統(tǒng)服務(wù)tk_def_int(Define Interrupt Handler) 來實(shí)現(xiàn)。
在中斷管理模塊的移植中,需要考慮以下三點(diǎn):
(1)保證中斷狀態(tài)寄存器IMASK的全局性
在進(jìn)行上下文保存恢復(fù)和臨界區(qū)管理時(shí),必須維持IMASK寄存器為全局變量。如果每個(gè)任務(wù)都擁有一個(gè)局部的IMASK值,則一個(gè)任務(wù)等待的中斷可能在另一個(gè)任務(wù)運(yùn)行時(shí)被禁止,造成系統(tǒng)對(duì)中斷無法實(shí)時(shí)響應(yīng)。同時(shí),tk_def_int函數(shù)需要實(shí)現(xiàn)不同任務(wù)對(duì)各級(jí)中斷定義的互斥功能,以保證全局 IMASK的有效和系統(tǒng)的穩(wěn)定。
(2)中斷前后處理
中斷前后處理是中斷管理移植的關(guān)鍵,影響到系統(tǒng)穩(wěn)定性和中斷處理的實(shí)時(shí)性。它對(duì)于任務(wù)是不可見過程,執(zhí)行不能被中斷。其主要操作包括:保存和恢復(fù)上下文;設(shè)置標(biāo)志變量標(biāo)示任務(wù)無關(guān)態(tài)的嵌套;更改堆棧指針使中斷子程序運(yùn)行在處理器內(nèi)部RAM;取得當(dāng)前觸發(fā)的最高優(yōu)先級(jí)中斷號(hào)對(duì)應(yīng)的子程序地址進(jìn)行調(diào)用;在中斷后處理判斷是否進(jìn)行任務(wù)切換。
系統(tǒng)為中斷程序分配獨(dú)立的內(nèi)部堆棧,使中斷程序運(yùn)行的地址空間獨(dú)立于任務(wù)和虛擬存儲(chǔ)地址,加快了中斷程序的處理速度,在系統(tǒng)進(jìn)入省電模式停止了外部存儲(chǔ)器時(shí)也不影響對(duì)中斷喚醒的響應(yīng)。在T-Kernel系統(tǒng)中,中斷處理屬于任務(wù)無關(guān)態(tài),其執(zhí)行優(yōu)先級(jí)高于任務(wù)態(tài),在中斷處理程序中發(fā)生的任務(wù)調(diào)度,需要延遲到中斷結(jié)束才能進(jìn)行切換。當(dāng)任務(wù)無關(guān)態(tài)運(yùn)行無嵌套,系統(tǒng)允許任務(wù)切換,schedtsk不等于ctxtsk三個(gè)條件滿足時(shí),中斷結(jié)束后即轉(zhuǎn)入任務(wù)切換。
(3)T-Kernel的系統(tǒng)時(shí)鐘中斷
T-Kernel的系統(tǒng)時(shí)鐘中斷使用Blackfin內(nèi)核的core timer 6號(hào)中斷。其前后處理步驟與(2)相同,為了保證系統(tǒng)穩(wěn)定性和實(shí)時(shí)性,一般為系統(tǒng)時(shí)鐘的中斷程序分配單獨(dú)的堆棧,使其在高速內(nèi)部RAM中執(zhí)行。
4.2 任務(wù)切換模塊的移植
任務(wù)切換包括任務(wù)間上下文切換和中斷到任務(wù)上下文切換,前者在臨界區(qū)結(jié)束時(shí)觸發(fā)軟中斷進(jìn)入dispatch_entry()完成,后者則在中斷后處理中調(diào)用tk_ret_int()開始執(zhí)行。
圖2 任務(wù)切換流程圖
dispatch_entry()和tk_ret_int()的處理過程都是保存ctxtsk任務(wù)的上下文,替換ctxtsk為schedtsk,恢復(fù)其上下文,執(zhí)行流程如圖2所示。二者的不同在于dispatch_entry()軟中斷的優(yōu)先級(jí)為14級(jí),而tk_ret_int()在中斷后處理中被調(diào)用,仍處于中斷過程,其優(yōu)先級(jí)由中斷處理程序的優(yōu)先級(jí)決定;這樣可能出現(xiàn)tk_ret_int()嵌套dispatch_entry()的情況,所以在從tk_ret_int()切入新任務(wù)或低功耗狀態(tài)之前需要判斷是否需要清除IPEND寄存器中斷執(zhí)行的標(biāo)志。當(dāng)沒有就緒任務(wù)時(shí),schedtsk值為空,系統(tǒng)轉(zhuǎn)入低功耗狀態(tài)。
評(píng)論