版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、ucos ii在arm處理器上移植過程中的中斷處理ucos ii是一個(gè)源碼藏匿、可移植、可固化、可剪裁和搶占式的實(shí)時(shí)多任務(wù)操作系統(tǒng),其大部分源碼是用ansi c編寫,與處理器硬件相關(guān)的部分用法匯編語言編寫。總量約200行的匯編語言部分被壓縮到最低限度,以便于移植到任何一種其它的cpu上。ucos ii最多可支持56個(gè)任務(wù),其內(nèi)核為占先式,總是執(zhí)行就緒態(tài)的優(yōu)先級(jí)最高的任務(wù),并支持semaphore (信號(hào)量)、mailbox (郵箱)、messagequeue(消息隊(duì)列)等多種常用的進(jìn)程間通信機(jī)制。與大多商用rtos不同的是,ucos ii藏匿全部的源代碼.并可以免費(fèi)獲得,只對商業(yè)應(yīng)用收取少量l
2、icense費(fèi)用。ucos ii移植跟os_cup_c.c、os_cpu_a.s、os_cpu.h 3個(gè)文件有關(guān),中斷處理的移植占領(lǐng)了很大一部分內(nèi)容。作為移植的一個(gè)重點(diǎn),本文以標(biāo)準(zhǔn)中斷(irq)為例研究了移植中的中斷處理。1 ucos ii系統(tǒng)結(jié)構(gòu)ucos ii的軟硬件體系結(jié)構(gòu)1。應(yīng)用程序處于囫圇系統(tǒng)的頂層.每個(gè)任務(wù)都可以認(rèn)為自己獨(dú)占了cpu,因而可以設(shè)計(jì)成為一個(gè)無限循環(huán)。大部分代碼是用法ansi 書寫的,因此ucos ii的可移植性較好。盡管如此,仍然需要用法c和匯編語言寫一些處理器相關(guān)的代碼。ucos ii的移植需要滿足以下要求:1)處理器的c編譯器可以產(chǎn)生可重入代碼:可以用法c調(diào)用進(jìn)入和
3、退出critical code(臨界區(qū)代碼);2)處理器必需支持硬件中斷,并且需要一個(gè)定時(shí)中斷源;3)處理器需能容納一定數(shù)據(jù)的硬件堆棧;4)處理器需有能在cpu寄存器與內(nèi)存和堆棧交換數(shù)據(jù)的命令。移植ucos ii的主要工作就是處理器和編譯器相關(guān)代碼以及bsp(board support package)的編寫。ucos ii處理器無關(guān)的代碼提供ucos ii的系統(tǒng)服務(wù),應(yīng)用程序可以用法這些api函數(shù)舉行內(nèi)存管理、任務(wù)間通信以及創(chuàng)建、刪除任務(wù)等。2 ucos ii移植過程中需要注重的幾個(gè)問題ucos ii移植的中斷處理跟體系結(jié)構(gòu)和ucos ii處理中斷的過程有關(guān),必需注重這2個(gè)方面的問題才干高效
4、移植。2.1 arm 處理器7種操作模式用戶模式(user mode)是arm 通常執(zhí)行狀態(tài),用于執(zhí)行大多數(shù)應(yīng)用程序;迅速中斷模式(fiq mode)支持?jǐn)?shù)據(jù)傳輸或通道處理;中斷模式(irq mode)用于通用中斷處理;超級(jí)用戶模式(svc mode)是一種操作系統(tǒng)受庇護(hù)的模式:數(shù)據(jù)中止模式(abt mode)命令預(yù)取指中止、數(shù)據(jù)中止時(shí)進(jìn)入該模式;未定義模式(und mode)當(dāng)執(zhí)行未定義的命令時(shí)進(jìn)入該模式;系統(tǒng)模式(sys mode)是操作系統(tǒng)一種特許的用戶模式。除了用戶模式之外,其他模式都?xì)w為特權(quán)模式,特權(quán)模式用于中斷服務(wù)、異樣或者拜訪受庇護(hù)的資源。特權(quán)模式中除系統(tǒng)模式之外另5種模式又稱為
5、異樣模式,在移植過程中必需設(shè)置中斷向量表來處理異樣。ucos ii的移植主要處理標(biāo)準(zhǔn)中斷(irq)、迅速中斷(fiq)和軟件中斷(swi)。2.2 ucos ii中斷響應(yīng)的過程以irq中斷為例,假設(shè)crps中i_bit位為0,當(dāng)有irq中斷時(shí),cpu強(qiáng)制進(jìn)入irq模式,當(dāng)前的cpsr拷貝到spsr_irq中,pc值保存在lr_irq中,置cpsr中的i位以關(guān)閉irq中斷。數(shù)據(jù)保存之后,cpu強(qiáng)行從0x00000018開頭執(zhí)行,pc值保存了os_cpu_irq_isr()的地址, 然后執(zhí)行os_cpu_irq_isr()。在os_cpu_irq_isr()中os_cpu_irq_isr_hand
6、ler()被調(diào)用來檢測中斷源并執(zhí)行中斷。os_cpu_irq_isr_handler()返回以后,os_cpu_irq_isr()又調(diào)用osintexit()來確認(rèn)是否有比isr優(yōu)先級(jí)更高的任務(wù)要執(zhí)行。假如當(dāng)前中斷任務(wù)仍然是優(yōu)先級(jí)最高的任務(wù),osintexit()返回,os_cpu_irq_isr()彈出中斷堆棧,假如優(yōu)先級(jí)更高的任務(wù)需要執(zhí)行,osintexit()調(diào)用osintctxsw()執(zhí)行優(yōu)先級(jí)更高的任務(wù)。2.3 ucos ii的臨界段代碼ucos ii用法關(guān)中斷來庇護(hù)臨界代碼。它定義了2個(gè)宏來開中斷(os_exit_critical(),關(guān)中斷(os_enter_critical()
7、。os_enter_critical()和os_exit_critical()有3種辦法來實(shí)現(xiàn),ucos ii建議用法第3種辦法可以保存當(dāng)前處理器狀態(tài)的值。3 ucos ii移植過程中的中斷處理ucos ii中斷處理跟crt.s、os_cpu_a.s和bsp.c有關(guān),其移植過程主要有以下幾個(gè)步驟。3.1 在crt.s中設(shè)置中斷向量表arm的中斷向量表位于rom 的最底部,其地址范圍為0x000000000x0000001c,設(shè)置如下:vectors:ldr pc,reset_addrldr pc,undef_addrldr pc,swi_addrldr pc,pabt_addrldr pc,d
8、abt_addrnop /*保留向量*/ldr pc,irq_addrldr pc,fiq_addrreset_addr:. word reset_handlerundef_addr:.word undefhandlerswi_addr:.word swi handlerpabt_addr:.word pabt_handlerdabt_addr:.word dabt_ handler.word 0 /*保留地址*/irq_addr:.word irq_handlerfiq_addr:.word fiq handlerundef_handler:b undef_handlerswi_handle
9、r: b swi_handlerpabt_handler: b pabt_handlerdabt_handler: b dabt_handlerirq_handler: b os_cpu_irq_isr/*跳轉(zhuǎn)到os_cpu_irq_isr(在os_cpu_a.s中)*/fiq_handler: b os_cpu_fiq_isr/*跳轉(zhuǎn)到os_cpu_fiq_isr(在os_cpu_a.s中) */這里設(shè)置了標(biāo)準(zhǔn)中斷異樣(irq)和迅速中斷異樣(fiq)的中斷入口,其余異樣都設(shè)置為死循環(huán),當(dāng)發(fā)生這些異樣的時(shí)候,必需使系統(tǒng)復(fù)位才干退出死循環(huán)。3.2 移植中斷任務(wù)切換中斷任務(wù)切換(osintctx
10、sw)和任務(wù)切換函數(shù)(osctxsw)比較相像,主要有以下幾步組成:1)調(diào)用ostask swhook()2)ospriocur=ospriohighrdy3)ostcbcur=ostcbhighrdy4)sp=ostcbhighrdy-ostcbstkptr/獵取高優(yōu)先級(jí)的任務(wù)堆棧指針5)從高優(yōu)先級(jí)的任務(wù)的堆棧中彈出高優(yōu)先級(jí)的任務(wù)上下文6)執(zhí)行高優(yōu)先級(jí)的任務(wù)3.3 移植中斷服務(wù)程序以irq中斷為例中斷服務(wù)程序(os_cpu_irq_isr)主要依據(jù)上面所描述的“ucos ii中斷響應(yīng)的過程”編寫,其主要代碼如下:ldr r0,os_intnestingldrb r1,r0add r1,r1,
11、1strb r1,r0cmp r1,lbne os_cpu_irq_isr_1ldr r4,os_tcbcurldr r5,r4str sp,r5os_cpu_irq_isr_1:msr cpsr_c,(no_int | irq32_mode)/切換到svc模式ldr r0,os_cpu_irq_isr_handlermov lr,pcbx r0msr cpsr_c,(no_int | svc32_mode)/切換到svc模式ldrr0,os_intexit /osintexit()mov lr,pcbx r0在代碼中省略了現(xiàn)場工作寄存器的庇護(hù)與復(fù)原及工作模式的切換。3.4 移植中斷處理程序以
12、irq中斷為例,移植中斷處理程序:c程序void os_cpu_irq_isr_handler(void)pfnct pfnct; /定義中斷函數(shù)指針pfnct=(pfnct)vicvectaddr; /獵取函數(shù)地址while(pfnct!=(pfnct)0)(*pfnct)(); /調(diào)用中斷函數(shù)pfnct=(pfnct)vicvectaddr; /獵取新的中斷函數(shù) /全部中斷都執(zhí)行完畢退出中斷處理程序依靠中斷控制器的中斷響應(yīng)挨次,所以u(píng)cos ii把os_cpu_irq_isr_handler()歸屬于用戶程序的一部分。在中斷返回之前,中斷處理程序要處理完全部的中斷響應(yīng),以避開在多個(gè)中斷同時(shí)
13、響應(yīng)或中斷處理過程中響應(yīng)中斷的狀況下, 進(jìn)入os_cpu_irq_isr () 和退出os_cpu_irq_isr()時(shí),os_cpu_irq_isr()耗盡保存cpu寄存器的堆棧空間。另外,在os_cpu_irq_isr_handler()中不要清cpsr的i位來開放中斷,由于沒有須要用法中斷嵌套,os_cpu_irq_isr_handler()在返回之前會(huì)檢查并處理全部的中斷。3.5 編寫中斷函數(shù)中斷函數(shù)普通采納c語言編寫,ucos ii建議中斷函數(shù)應(yīng)盡量短,普通做法是在中斷函數(shù)中緩存數(shù)據(jù),給任務(wù)發(fā)送一個(gè)信號(hào)來處理數(shù)據(jù)。中斷函數(shù)的地址在系統(tǒng)初始化的時(shí)候要置人中斷向量寄存器(vicvecta
14、ddr015)。因?yàn)橄蛄恐袛嗫刂破?vic)的特別結(jié)構(gòu),在中斷函數(shù)中要寫一次中斷向量寄存器(vicvectaddr)。4 中斷處理的應(yīng)用示例ucos ii要提供周期性信號(hào)源,用于實(shí)現(xiàn)時(shí)光延時(shí)和確認(rèn)超時(shí)。節(jié)拍率應(yīng)為10100 hz。時(shí)鐘節(jié)拍源可以由特地的硬件定時(shí)器產(chǎn)生,以下就以irq中斷方式產(chǎn)生節(jié)拍源為示例。初始化中斷控制器:c程序void vicinit(void)vicintenclr=0xfffff;vicdefvectaddr=-(int32u)non_vect_irq_handler;vicvectaddr0= (int32u)ostickisr;vicvectcntl0= (0x20 | 0x04);vicintenable= 14;定時(shí)器0中斷函數(shù):c程序void ostickisr(void)to_ir = 0xff;ostimetick(); /調(diào)用ostimetick()vicvectaddr=0; /通知中斷控制器中斷結(jié)束當(dāng)定時(shí)中斷發(fā)生時(shí)調(diào)用os_cpu_irq_isr handler(),得到ostickisr()的地址并執(zhí)行,在ostickisr()中調(diào)用ostimetick()為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年教育信息化解決方案銷售與服務(wù)合同模板3篇
- 二零二五版機(jī)動(dòng)車質(zhì)押典當(dāng)與汽車后市場專業(yè)服務(wù)合同3篇
- 二手車個(gè)人買賣合同書樣本版B版
- 2025年度中小企業(yè)創(chuàng)新基金貸款合同簽訂與創(chuàng)業(yè)孵化服務(wù)
- 二零二五年度終止勞動(dòng)合同員工離職后社會(huì)保障待遇合同
- 二零二五年度轉(zhuǎn)租協(xié)議甲乙丙三方及物業(yè)管理服務(wù)合同
- 2025年度退定金協(xié)議:旅游度假村預(yù)訂退訂合同
- 二零二五年度無子女無財(cái)產(chǎn)快速離婚協(xié)議指南
- 2025年度魚塘承包經(jīng)營權(quán)變更及合作開發(fā)協(xié)議
- 二零二五年度庭院租賃房屋院落環(huán)保改造合同
- 2024至2030年中國膨潤土行業(yè)投資戰(zhàn)略分析及發(fā)展前景研究報(bào)告
- 【地理】地圖的選擇和應(yīng)用(分層練) 2024-2025學(xué)年七年級(jí)地理上冊同步備課系列(人教版)
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產(chǎn)文件編制和管理規(guī)定
- JBT 14588-2023 激光加工鏡頭 (正式版)
- 2024年四川省成都市樹德實(shí)驗(yàn)中學(xué)物理八年級(jí)下冊期末質(zhì)量檢測試題含解析
- 九型人格與領(lǐng)導(dǎo)力講義
- 廉潔應(yīng)征承諾書
- 2023年四川省成都市中考物理試卷真題(含答案)
- 泵車述職報(bào)告
- 2024年山西文旅集團(tuán)招聘筆試參考題庫含答案解析
- 恢復(fù)中華人民共和國國籍申請表
評(píng)論
0/150
提交評(píng)論