第4章 中斷處理與時間管理_第1頁
第4章 中斷處理與時間管理_第2頁
第4章 中斷處理與時間管理_第3頁
第4章 中斷處理與時間管理_第4頁
第4章 中斷處理與時間管理_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理本章描述本章描述CC/OS-II/OS-II的中斷處理與時間管理,包括:的中斷處理與時間管理,包括: 與中斷相關(guān)的概念與中斷相關(guān)的概念 CC/OS-II/OS-II中斷處理的方法中斷處理的方法 中斷級的任務(wù)切換中斷級的任務(wù)切換 時鐘節(jié)拍器的原理與正確應(yīng)用方法以及時鐘節(jié)拍器的原理與正確應(yīng)用方法以及 5 5個時間管理函數(shù)。個時間管理函數(shù)。本章主要內(nèi)容本章主要內(nèi)容嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理 中斷定義為CPU對系統(tǒng)

2、內(nèi)、外發(fā)生的異步事件的響應(yīng)。異步事件是指沒有一定時序關(guān)系的、隨機(jī)發(fā)生的事件。當(dāng)中斷產(chǎn)生時,由硬件向CPU 發(fā)送一個異步事件請求,CPU接收到請求后,中止當(dāng)前工作,保存當(dāng)前運(yùn)行環(huán)境,轉(zhuǎn)去處理相應(yīng)的異步事件任務(wù),這個過程稱為中斷。事件處理完畢后,程序回到: 在前后臺系統(tǒng)中,程序回到后臺程序; 在不可剝奪型內(nèi)核中,程序回到被中斷了的任務(wù); 在可剝奪型內(nèi)核中,讓進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)開始運(yùn)行,若沒有高優(yōu)先級任務(wù)準(zhǔn)備就緒,則回到被中斷了的任務(wù)。 嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理 使用中斷機(jī)制的優(yōu)點在于:CPU無需連續(xù)不斷地

3、查詢是否有新的事件發(fā)生,只需在有事件發(fā)生時才作出響應(yīng)。 關(guān)中斷會影響中斷延遲時間,時間太長可能會引起中斷丟失。所以在實時環(huán)境中,關(guān)中斷的時間應(yīng)盡量短。 CPU可以通過兩條特殊指令:關(guān)中斷(Disable Interrupt)和開中斷(Enable Interrupt)來響應(yīng)和不響應(yīng)中斷。 在中斷服務(wù)期間,CPU一般允許中斷嵌套,如圖4.1所示,允許新的中斷打入,識別中斷優(yōu)先級別更高的事件。嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與

4、時間管理 中斷延遲定義為:從硬件中斷發(fā)生到開始執(zhí)行中斷處理程序第一條指令所用的時間。也就是說,中斷延遲是從中斷發(fā)生到中斷跳轉(zhuǎn)指令執(zhí)行完畢之間的這段時間。 由于實時操作系統(tǒng)考慮得更多的是最壞的情況,而不是平均的情況,因此指令執(zhí)行的時間必須按照最長的指令執(zhí)行時間來計算。所以中斷延遲時間,通常是由關(guān)中斷的最長時間來決定的。關(guān)中斷的時間越長,中斷延遲就越長。中斷延遲是實時內(nèi)核最重要的指標(biāo)。1、在前后臺系統(tǒng)中、在前后臺系統(tǒng)中中斷延遲中斷延遲 MAXMAX(最長指令,關(guān)中斷的最長)時間(最長指令,關(guān)中斷的最長)時間 中斷向量跳轉(zhuǎn)時間中斷向量跳轉(zhuǎn)時間2、在不可剝奪型和不可剝奪內(nèi)核中、在不可剝奪型和不可剝奪內(nèi)

5、核中中斷延遲中斷延遲MAXMAX(最長指令,用戶關(guān)中斷,內(nèi)核關(guān)中斷)時間(最長指令,用戶關(guān)中斷,內(nèi)核關(guān)中斷)時間+ +中斷向量跳轉(zhuǎn)時間中斷向量跳轉(zhuǎn)時間 嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理 中斷響應(yīng)定義為從中斷發(fā)生起到開始執(zhí)行中斷用戶處理程序的第一條指令所用的時間,換句話說,中斷響應(yīng)是從中斷發(fā)生到剛剛開始處理異步事件之間的這段時間,它包括開始處理這個中斷前的全部開銷。 一般地,執(zhí)行用戶代碼之前要保護(hù)現(xiàn)場,將CPU的各個寄存器推入堆棧。這段時間將被稱為中斷響應(yīng)時間。 嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教

6、程教程 第四章第四章 中斷與時間管理中斷與時間管理2.在可剝奪型內(nèi)核中,則要先調(diào)用一個特定的函數(shù),通知內(nèi)核即將進(jìn)行中斷服務(wù),使得內(nèi)核可以跟蹤中斷的嵌套。對于C/OS-說來,這個函數(shù)是OSIntEnter(),可剝奪型內(nèi)核的中斷響應(yīng)時間由下式給出: 1.在前后臺系統(tǒng)和不可剝奪型內(nèi)核中,保存寄存器以后立即執(zhí)行用戶代碼,中斷響應(yīng)時間由下式給出:3.中斷響應(yīng)考慮的是系統(tǒng)在最壞情況下的響應(yīng)中斷時間,而不是平均時間。 例如某系統(tǒng)100次中有99次在100s之內(nèi)響應(yīng)中斷,只有一次響應(yīng)中斷的時間是250s,只能認(rèn)為中斷響應(yīng)時間是250s。 嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四

7、章第四章 中斷與時間管理中斷與時間管理 中斷恢復(fù)時間定義為:CPU返回到被中斷了的程序代碼所需要的時間。1.在前后臺系統(tǒng)和不可剝奪型內(nèi)核前后臺系統(tǒng)和不可剝奪型內(nèi)核中,中斷恢復(fù)時間只包括恢復(fù)CPU內(nèi)部寄存器值的時間和執(zhí)行中斷返回指令的時間。中斷恢復(fù)時間由下式給出:嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理2.對于可剝奪型內(nèi)核可剝奪型內(nèi)核,中斷的恢復(fù)要復(fù)雜一些。一般地,可剝奪型內(nèi)核在中斷服務(wù)子程序的末尾,都要調(diào)用一個由實時內(nèi)核提供的中斷脫離函數(shù)。在C/OS-中,這個函數(shù)叫做OSIntExit(),它首先判斷是否脫離了所有的中斷嵌套,

8、然后再判斷是否有更高優(yōu)先級的任務(wù)準(zhǔn)備就緒。若還處于中斷嵌套中,那么程序返回到前一級中斷服務(wù)子程序繼續(xù)執(zhí)行;若已經(jīng)脫離了所有的中斷嵌套,則檢查當(dāng)前是否有優(yōu)先級更高的任務(wù)準(zhǔn)備就緒,若有則返回到這個優(yōu)先級更高的任務(wù),被中斷了的任務(wù)只有重新成為優(yōu)先級最高的就緒態(tài)任務(wù)時才能恢復(fù)運(yùn)行;如果沒有更高優(yōu)先級任務(wù)準(zhǔn)備就緒,則返回到被中斷的任務(wù)繼續(xù)執(zhí)行。在這種情況下,可剝奪型內(nèi)核的中斷恢復(fù)時間由下式給出:嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間

9、管理1.在非屏蔽中斷服務(wù)子程序中,不能在非屏蔽中斷處理內(nèi)處理臨界區(qū)代碼、不能使用內(nèi)核提供的服務(wù)。2.在非屏蔽中斷處理程序中參數(shù)的傳遞必須用全程變量,且全程變量的字節(jié)長度必須能夠一次讀完。3.若一定要在非屏蔽中斷產(chǎn)生時使用內(nèi)核服務(wù),則可以通過用非屏蔽中斷產(chǎn)生普通可屏蔽中斷的方法來實現(xiàn)。 非屏蔽中斷(NMI)是指不能用系統(tǒng)指令來關(guān)閉的中斷。 非屏蔽中斷的特點是:中斷優(yōu)先級高、延遲時間短、響應(yīng)快、不能被嵌套,不能忍受內(nèi)核的延遲,一般常應(yīng)用于緊急事件處理,如掉電保護(hù)等。嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理4.2.1 4.2.1 中

10、斷處理程序中斷處理程序圖4.4 標(biāo)準(zhǔn)中斷處理程序流程圖 二、中斷進(jìn)入函數(shù)的實現(xiàn)代碼二、中斷進(jìn)入函數(shù)的實現(xiàn)代碼 在C/OS-中,中斷處理程序可用匯編語言編寫,也可以用C語言編寫。一、一、 標(biāo)準(zhǔn)的標(biāo)準(zhǔn)的CC/OS-/OS-中斷服務(wù)子程序中斷服務(wù)子程序 一個標(biāo)準(zhǔn)的C/OS-中斷服務(wù)子程序應(yīng)該按圖4.4所示流程圖進(jìn)行編寫。程序清單程序清單4.1 4.1 OSIntEnterOSIntEnter() ()void OSIntEnter (void) reentrant if (OSRunning = = TRUE) / 多任務(wù)啟動后,方可通知 / 內(nèi)核。否則,直接退出。 if (OSIntNesting

11、 0) OSIntNesting-; ( 1 ) if (OSIntNesting | OSLockNesting) = 0) ( 2 ) OSIntExitY = OSUnMapTblOSRdyGrp; OSPrioHighRdy = (INT8U)(OSIntExitY 0) / 若參數(shù)為0,則表示不想對/ 任務(wù)延時,函數(shù)立即返回 OS_ENTER_CRITICAL(); / 關(guān)中斷 y = OSTCBCur-OSTCBY; OSRdyTbly &= OSTCBCur-OSTCBBitX; /從就緒表中移出當(dāng)前任務(wù) if (OSRdyTbly &= OSTCBCur-OST

12、CBBitX) = 0) OSRdyGrp &= OSTCBCur-OSTCBBitY; OSTCBCur-OSTCBDly = ticks;/ 保存節(jié)拍數(shù),每隔一個/時鐘節(jié)拍,這個變量數(shù)減1 OS_EXIT_CRITICAL(); / 關(guān)中斷 OS_Sched();/ 當(dāng)前任務(wù)已經(jīng)掛起,執(zhí)行/下一個優(yōu)先級最高就緒任務(wù) 嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理在調(diào)用OSTimeDly()函數(shù)時必須注意以下事項:1.時間的長短是用時鐘節(jié)拍的數(shù)目來確定的;2.可提供的時鐘節(jié)拍數(shù)范圍是:165,535;3.參數(shù)為0,表明不進(jìn)

13、行延時操作,而立即返回調(diào)用者;4.為了確保設(shè)定的延時時間,建議設(shè)定的時鐘節(jié)拍數(shù)加1;5.只能在任務(wù)中調(diào)用,無配置常量。 嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理INT8U OSTimeDlyHMSM( INT8U hour,INT8U minutes,INT8U seconds,INT16U milli) reentrant 4.4.2.1 4.4.2.1 函數(shù)原型函數(shù)原型 1.功能功能:這是一個十分有用的函數(shù),它是以時、分、秒、毫秒為單位進(jìn)行延時。2.調(diào)用者調(diào)用者:只能是任務(wù)。調(diào)用后,如果延時時間不為0,系統(tǒng)將立即掛起當(dāng)前任

14、務(wù),并進(jìn)行任務(wù)調(diào)度。3.最長延時最長延時:長達(dá)256個小時(接近11天)。4.函數(shù)參數(shù)函數(shù)參數(shù): hours 延時小時數(shù), 取值范圍0255; mintues 延時分鐘數(shù), 取值范圍059; seconds 延時秒數(shù), 取值范圍059; milli 延時毫秒數(shù), 取值范圍0999嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理1.OS_ON_ERR調(diào)用成功;2.OS_TIME_INVALID_MINUTES 參數(shù)錯誤,分鐘數(shù)大于59;3.OS_TIME_INVALID_SECONDS參數(shù)錯誤,秒數(shù)大于59;4.OS_TIME_INVA

15、LID_MILLI參數(shù)錯誤,毫秒數(shù)大于999;5.OS_TIME_ZERO_DLY 4個參數(shù)全為0,不操作而直接返回OSTimeDlyHMSM()函數(shù)的返回值有如下幾種:嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理程序清單程序清單4.84.8 OSTimeDlyHMSMOSTimeDlyHMSM() ()#if OS_TIME_DLY_HMSM_EN 0INT8U OSTimeDlyHMSM (INT8U hours,INT8U minutes,INT8U seconds,NT16U milli) reentrant INT32U

16、 ticks; INT16U loops; if (hours 0 | minutes 0 | seconds 0 | milli 0) / 條件檢查,全為0,則返回return (OS_TIME_ZERO_DLY); if (minutes 59) return (OS_TIME_INVALID_MINUTES); if (seconds 59) return (OS_TIME_INVALID_SECONDS); if (milli 999)return (OS_TIME_INVALID_MILLI); ticks = (INT32U)hours * 3600L * OS_TICKS_PER

17、_SEC + (INT32U)minutes * 60L * OS_TICKS_PER_SEC + (INT32U)seconds * OS_TICKS_PER_SEC+ OS_TICKS_PER_SEC * (INT32U)milli+ 500L/OS_TICKS_PER_SEC) / 1000L;/ 換算為時鐘節(jié)拍,精度0.5個節(jié)拍 loops = ticks / 65536L; ticks = ticks % 65536L; OSTimeDly(ticks); while (loops 0) OSTimeDly(32768); OSTimeDly(32768); loops-; retu

18、rn (OS_NO_ERR); #endif4.4.2.3 4.4.2.3 原理與實現(xiàn)原理與實現(xiàn) 嵌入式實時操作系統(tǒng)嵌入式實時操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時間管理中斷與時間管理1.要使用該函數(shù),首先要用OS_CPU.H文件中定義的全局常數(shù)OS_TICKS_PER_SEC將時間轉(zhuǎn)換為時鐘節(jié)拍數(shù),這個全局常數(shù)表示的是每秒鐘時鐘節(jié)拍器產(chǎn)生的節(jié)拍數(shù)量,稱為時鐘節(jié)拍頻率,取值一般設(shè)置在10100Hz之間;2.4個參數(shù)全為0,表示不進(jìn)行任何操作,直接返回;3.當(dāng)時鐘周期1ms時,計時最小單位是一個時鐘節(jié)拍,精度是0.5個節(jié)拍。例如:例如:若將時鐘節(jié)拍頻率(OS_TICKS_PER_SEC)設(shè)置成100Hz(10ms),4ms的延時不會產(chǎn)生任何延時!而5ms的延時就等于延時10ms;4.當(dāng)時鐘周期 0void OSTimeSet (INT32U ticks) reentr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論