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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

10、斷處理程序中斷處理程序圖4.4 標(biāo)準(zhǔn)中斷處理程序流程圖 二、中斷進(jìn)入函數(shù)的實(shí)現(xiàn)代碼二、中斷進(jìn)入函數(shù)的實(shí)現(xiàn)代碼 在C/OS-中,中斷處理程序可用匯編語言編寫,也可以用C語言編寫。一、一、 標(biāo)準(zhǔn)的標(biāo)準(zhǔn)的CC/OS-/OS-中斷服務(wù)子程序中斷服務(wù)子程序 一個(gè)標(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ù)啟動(dòng)后,方可通知 / 內(nèi)核。否則,直接退出。 if (OSIntNesting

11、 0) OSIntNesting-; ( 1 ) if (OSIntNesting | OSLockNesting) = 0) ( 2 ) OSIntExitY = OSUnMapTblOSRdyGrp; OSPrioHighRdy = (INT8U)(OSIntExitY 0) / 若參數(shù)為0,則表示不想對(duì)/ 任務(wù)延時(shí),函數(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ù),每隔一個(gè)/時(shí)鐘節(jié)拍,這個(gè)變量數(shù)減1 OS_EXIT_CRITICAL(); / 關(guān)中斷 OS_Sched();/ 當(dāng)前任務(wù)已經(jīng)掛起,執(zhí)行/下一個(gè)優(yōu)先級(jí)最高就緒任務(wù) 嵌入式實(shí)時(shí)操作系統(tǒng)嵌入式實(shí)時(shí)操作系統(tǒng)C/OS-C/OS-教程教程 第四章第四章 中斷與時(shí)間管理中斷與時(shí)間管理在調(diào)用OSTimeDly()函數(shù)時(shí)必須注意以下事項(xiàng):1.時(shí)間的長(zhǎng)短是用時(shí)鐘節(jié)拍的數(shù)目來確定的;2.可提供的時(shí)鐘節(jié)拍數(shù)范圍是:165,535;3.參數(shù)為0,表明不進(jìn)

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論