當前位置:首頁 > 單片機 > 單片機
[導讀] 引言 如今,在嵌入式處理器芯片中,以ARM7為核心的處理器是應(yīng)用較多的一種。它具有多種工作模式,并且支持兩種不同的指令集(標準32位ARM指令集和16位Thumb指令集)。μC/OSII是專為嵌入式應(yīng)用設(shè)計的

引言

如今,在嵌入式處理器芯片中,以ARM7為核心的處理器是應(yīng)用較多的一種。它具有多種工作模式,并且支持兩種不同的指令集(標準32位ARM指令集和16位Thumb指令集)。μC/OSII是專為嵌入式應(yīng)用設(shè)計的搶占式、多任務(wù)實時操作系統(tǒng),可用于各類8位、16位和32位單片機或DSP。μC/OSII向ARM7移植具有得天獨厚的優(yōu)點,因此,“μC/OSII+ARM7”成為廣泛應(yīng)用的一款平臺。

不管是哪種型號的ARM處理器,也無論該嵌入式系統(tǒng)中是否有操作系統(tǒng),在計算機與外界實時交互的過程中,中斷技術(shù)都是一項關(guān)鍵的技術(shù)。當外部事件發(fā)生時,CPU必須及時響應(yīng)中斷以實現(xiàn)對相應(yīng)事件的處理,因此能否中斷嵌套是影響嵌入式系統(tǒng)實時性能的主要因素。

1 ARM7的中斷處理

ARM7處理器的中斷主要有兩種,本文主要討論IRQ中斷異常的響應(yīng)機制。當中斷請求IRQ到來使CPU進入中斷響應(yīng)時,CPU將會自動完成下列工作:首先,將PC、CPSR的當前值存入中斷模式的LR、SPSR中;然后,操作CPSR中的運行狀態(tài)位,使CPU進入中斷模式并關(guān)閉中斷;最后將PC的值改成0x00000018,從而使CPU的執(zhí)行跳轉(zhuǎn)到IRQ中斷入口0x00000018處。異常向量表中的0x00000018處使用一條“LDR PC,[PC,#?0xff0]”指令,在IRQ處使用的這條指令與其他向量不同。當CPU執(zhí)行這條指令但還沒有跳轉(zhuǎn)時,PC的值為0x00000020(因為ARM7TDMI內(nèi)核是三級流水結(jié)構(gòu)),0x00000020減去0x00000FF0為0xFFFFF030,這是VIC的特殊寄存器VICVectAddr的地址單元。這個寄存器保存當前將要服務(wù)的IRQ的中斷服務(wù)程序的入口,故讀取VICVectAddr寄存器的值,然后放入PC程序指針,即跳轉(zhuǎn)到相應(yīng)中斷服務(wù)程序,從而使CPU開始執(zhí)行中斷服務(wù)程序。

2 Handler宏分析

“μC/OSII+ARM7”系統(tǒng)中,只使用了ARM7的IRQ中斷。由于不同的ARM芯片的中斷系統(tǒng)并不完全一樣,因此不可能編寫出對所有使用ARM核的處理器通用的中斷及時鐘節(jié)拍移植代碼。但是,為了使用戶用C語言編寫中斷服務(wù)程序時不必為處理器的硬件區(qū)別而困擾,這里根據(jù)μC/OSII對中斷服務(wù)程序的要求以及ARM7體系結(jié)構(gòu)和ADS編譯器的特點,編寫了一個適用于所有基于ARM7核處理器的匯編宏--Handler。這個宏實現(xiàn)了“μC/OSII+ ARM7”中斷服務(wù)程序的匯編語言代碼與C語言函數(shù)代碼之間的通用接口。其作用是對用戶的C語言中斷處理程序進行包裝,只有通過這個包裝之后,系統(tǒng)才能執(zhí)行用戶的中斷處理程序。

中斷服務(wù)程序流程如圖1所示。在進入Handler宏中,首先保存LR、SPSR以及相關(guān)寄存器的值于中斷模式下的堆棧中,以便于斷點恢復。然后使記錄系統(tǒng)中斷次數(shù)的全局變量OSIntNeSTing加1并關(guān)中斷切換到系統(tǒng)模式,調(diào)用C語言中斷處理程序。在執(zhí)行完中斷處理程序后,調(diào)用出中斷函數(shù),以獲取最高優(yōu)先級就緒任務(wù)的任務(wù)控制塊指針和任務(wù)優(yōu)先級。返回中斷模式后,通過比較當前任務(wù)與待切換任務(wù)的優(yōu)先級,判斷是否進行任務(wù)切換,最后返回斷點。


圖1 中斷服務(wù)程序流程

IRQ異常處理代碼的匯編部分--Handler宏:

MACRO

$IRQ_Label HANDLER $IRQ_ExcepTION_Function

EXPORT $IRQ_Label;輸出的標號

IMPORT $IRQ_Exception_Function;引用的外部標號

$IRQ_Label

SUB LR, LR, #4;計算返回地址

STMFD SP!, {R0?R3, R12, LR};保存任務(wù)環(huán)境

MRS R3, SPSR;保存狀態(tài)

STMFD SP, {R3,SP,LR}^;保存用戶狀態(tài)的R3、SP、LR

;OSIntNesting++

LDR R2,=OSIntNesting

LDRB R1, [R2]

ADD R1, R1, #1

STRB R1, [R2]

SUB SP, SP, #4*3

MSR CPSR_c, #(NoInt | SYS32Mode)

;切換到系統(tǒng)模式以便對相關(guān)寄存器進行操作

CMP R1, #1

LDREQ SP, =StackUsr

;在第1次中斷時就重新開辟一個專門存儲中斷中用到的變量以避免存儲空間的沖突

BL $IRQ_Exception_Function ;調(diào)用C語言的中斷處理程序

MSR CPSR_c, #(NoInt | SYS32Mode);切換到系統(tǒng)模式

LDR R2, =OsEnterSum

;OsEnterSum,使OSIntExit退出時中斷關(guān)閉

MOV R1, #1

STR R1, [R2]

BL OSIntExit

LDR R2, =OsEnterSum

;中斷服務(wù)程序要退出,所以O(shè)sEnterSum=0

MOV R1, #0

STR R1, [R2]

MSR CPSR_c, #(NoInt |IRQ32Mode) ;切換回中斷模式

LDMFD SP, {R3, SP, LR}^ ;恢復用戶狀態(tài)的R3、SP、LR

LDR R0, =OSTCBHighRdy

LDR R0, [R0]

LDR R1, =OSTCBCur

LDR R1, [R1]

CMP R0, R1

ADD SP, SP, #4*3

MSR SPSR_cxsf, R3

LDMEQFD SP!, {R0R3, R12, PC}^ ;不進行任務(wù)切換

LDR PC, =OSINTCtxSw;進行任務(wù)切換

MEND

END

通過對Handler宏的分析可知,用戶的C語言中斷處理程序是在特權(quán)模式--系統(tǒng)模式下運行的,并且CPU在執(zhí)行中斷服務(wù)程序時中斷都是關(guān)閉的,所以本系統(tǒng)采用的是最為簡單的非嵌套中斷方式。這種方式的優(yōu)點是,上下文數(shù)據(jù)不會被任何順序的中斷所破壞;缺點是,在中斷服務(wù)程序執(zhí)行時不能根據(jù)中斷優(yōu)先級進行中斷嵌套,延時時間長,只有當一個ISR完全結(jié)束并退出中斷后才重新接受中斷,降低了系統(tǒng)的實時特性。為提高系統(tǒng)的實時性,需要對其中斷進行優(yōu)化。

3 中斷的優(yōu)化

改寫μC/OSII 內(nèi)核中 HANDLER 宏可以實現(xiàn)ARM的中斷嵌套,這樣做雖然提高了系統(tǒng)的實時性,但損害了系統(tǒng)運行的穩(wěn)定性和可移植性。通過對中斷過程的分析,下面給出一種編寫中斷服務(wù)程序的模板,充分利用ISR執(zhí)行在特權(quán)模式--系統(tǒng)模式這一特點來實現(xiàn)中斷嵌套的條件。中斷服務(wù)程序模板如下:

void ISR(void){

OS_ENTER_CRITICAL();//在中斷服務(wù)程序中關(guān)中斷清中斷標志;//防止沒有清中斷標志使得中斷多次進入關(guān)閉低優(yōu)先級;//禁止低優(yōu)先級中斷

S_EXIT_CRITICAL();//在中斷服務(wù)程序中開中斷用戶的C語言代碼;//進行用戶在中斷中要做的工作

VICVectAddr=0;//將中斷服務(wù)程序的入口地址置0

}

由于Handler宏中已將LR、SPSR、返回地址和發(fā)生中斷前的堆棧指針等寄存器入棧保存,所以接下來要做的就只剩下開關(guān)中斷的工作。由于在進入C中斷處理程序之前進入的是關(guān)中斷系統(tǒng)模式,所以必須在C語言中重新打開中斷,而C語言是不能進行寄存器操作的,因此必須調(diào)用軟中斷OS_EXIT_CRITICAL()重新打開中斷。在開中斷之前,要判斷將全局變量OsEnterSum減1后是否為0,所以必須在調(diào)用開中斷之前調(diào)用軟中斷OS_ENTER_CRITICAL()將OsEnterSum變成1。在臨界區(qū)中可以進行一些處理,如清中斷標志、關(guān)低優(yōu)先級中斷等。進行C語言中斷服務(wù)程序之后要將VICVectAddr置位為0,這是ARM7處理器核的要求必須進行這樣的編寫,否則會導致一些錯誤(如不能第2次進入中斷等)。

結(jié)語

“μC/OSII+ ARM7”是當前嵌入式系統(tǒng)中廣泛應(yīng)用的一款平臺,適合于復雜度不是很高的中小型嵌入式系統(tǒng)。本文在深入分析”μC/OSII+ ARM7”中斷機制的基礎(chǔ)上,對IRQ中斷響應(yīng)機制進行了改進,提出了優(yōu)化方案。實驗證明,此方法可以實現(xiàn)中斷的嵌套并且提高系統(tǒng)實時性,具有一定的應(yīng)用價值。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉