第三章 中斷及時(shí)鐘_第1頁(yè)
第三章 中斷及時(shí)鐘_第2頁(yè)
第三章 中斷及時(shí)鐘_第3頁(yè)
第三章 中斷及時(shí)鐘_第4頁(yè)
第三章 中斷及時(shí)鐘_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、嵌入式系統(tǒng)嵌入式系統(tǒng) Embedded System教師:白華教師:白華郵箱:郵箱:電話:電話公室:辦公室:4A-4092.2.4 任務(wù)的其他管理函數(shù)任務(wù)的其他管理函數(shù)堆棧檢驗(yàn):堆棧檢驗(yàn):OSTaskStkChk() 確定任務(wù)實(shí)際需要的堆??臻g大小確定任務(wù)實(shí)際需要的堆??臻g大小刪除任務(wù):刪除任務(wù):OSTaskDel() 任務(wù)休眠,任務(wù)代碼并未刪除,只是不再被調(diào)用任務(wù)休眠,任務(wù)代碼并未刪除,只是不再被調(diào)用請(qǐng)求刪除任務(wù):請(qǐng)求刪除任務(wù):OSTaskDelReq()改變?nèi)蝿?wù)的優(yōu)先級(jí):改變?nèi)蝿?wù)的優(yōu)先級(jí):OSTaskChangePrio()掛起任務(wù):掛起任務(wù):OSTaskSusp

2、end() 空閑任務(wù)不能被掛起空閑任務(wù)不能被掛起恢復(fù)任務(wù):恢復(fù)任務(wù):OSTaskResume() 被掛起的任務(wù)只能通過(guò)該函數(shù)恢復(fù)被掛起的任務(wù)只能通過(guò)該函數(shù)恢復(fù)獲得任務(wù)信息:獲得任務(wù)信息:OSTaskQuery() 獲得指定任務(wù)的獲得指定任務(wù)的OS_TCB中內(nèi)容的拷貝中內(nèi)容的拷貝2.3 例程解析例程解析共有共有10個(gè)任務(wù)在屏幕隨機(jī)的位置上顯示一個(gè)個(gè)任務(wù)在屏幕隨機(jī)的位置上顯示一個(gè)09的數(shù)字。的數(shù)字。每個(gè)任務(wù)只顯示同一個(gè)數(shù)字,也就是其中一個(gè)任務(wù)在隨每個(gè)任務(wù)只顯示同一個(gè)數(shù)字,也就是其中一個(gè)任務(wù)在隨機(jī)位置顯示機(jī)位置顯示0,另一個(gè)顯示,另一個(gè)顯示1,等等。,等等。該例程目的在于演示該例程目的在于演示m m

3、C/OS-II的多任務(wù)處理能力。的多任務(wù)處理能力。#include includes.hincludes.h是主控頭文件,包含所有相關(guān)的頭文是主控頭文件,包含所有相關(guān)的頭文件,從此可使用系統(tǒng)提供的數(shù)據(jù)類(lèi)型、系統(tǒng)函數(shù)件,從此可使用系統(tǒng)提供的數(shù)據(jù)類(lèi)型、系統(tǒng)函數(shù)和全局變量等。和全局變量等。#define TASK_STK_SIZE 512 #define N_TASKS 10定義兩個(gè)常數(shù):定義兩個(gè)常數(shù):TASK_STK_SIZE表示堆??扇菁{的表示堆棧可容納的指針元數(shù)目;指針元數(shù)目;N_TASKS表示需要建立的任務(wù)數(shù)。表示需要建立的任務(wù)數(shù)。OS_STK TaskStk N_TASKS TASK_ST

4、K_SIZE; OS_STK TaskStartStk TASK_STK_SIZE;char TaskData N_TASKS; OS_EVENT *RandomSem;定義不同類(lèi)型的變量(或數(shù)組)定義不同類(lèi)型的變量(或數(shù)組)void Task(void *data); void TaskStart(void *data); static void TaskStartCreateTasks(void);static void TaskStartDispInit(void);static void TaskStartDisp(void);自定義函數(shù)聲明自定義函數(shù)聲明前往第17頁(yè)void main

5、 (void) PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); OSInit(); PC_DOSSaveReturn(); PC_VectSet(uCOS, OSCtxSw); RandomSem = OSSemCreate(1); OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0); OSStart();PC_DispClrScr()為系統(tǒng)函數(shù),具有為系統(tǒng)函數(shù),具有清屏功能。()中的參數(shù)表示前景色清屏功能。()中的參數(shù)表示前景色為白色,背景色為黑

6、色。為白色,背景色為黑色。void main (void) PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); OSInit(); PC_DOSSaveReturn(); PC_VectSet(uCOS, OSCtxSw); RandomSem = OSSemCreate(1); OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0); OSStart();非常重要的系統(tǒng)函數(shù),執(zhí)行非常重要的系統(tǒng)函數(shù),執(zhí)行C/OS-II的初始化。的初始化。l在使用在使用C/

7、OS-IIC/OS-II的所有服務(wù)之前,必須要調(diào)用的所有服務(wù)之前,必須要調(diào)用C/OS-IIC/OS-II的初始化的初始化函數(shù)函數(shù)OSInit( )OSInit( )對(duì)對(duì)C/OS-IIC/OS-II自身的運(yùn)行環(huán)境進(jìn)行初始化。自身的運(yùn)行環(huán)境進(jìn)行初始化。l函數(shù)函數(shù)OSInit( )OSInit( )將對(duì)將對(duì)C/OS-IIC/OS-II的所有的全局變量和數(shù)據(jù)結(jié)構(gòu)進(jìn)行初的所有的全局變量和數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化,同時(shí)創(chuàng)建空閑任務(wù)始化,同時(shí)創(chuàng)建空閑任務(wù)OSTaskIdleOSTaskIdle,并賦之以最低的優(yōu)先級(jí)別和,并賦之以最低的優(yōu)先級(jí)別和永遠(yuǎn)的就緒狀態(tài)。如果用戶應(yīng)用程序還要使用統(tǒng)計(jì)任務(wù)的話(常數(shù)永遠(yuǎn)的就緒狀

8、態(tài)。如果用戶應(yīng)用程序還要使用統(tǒng)計(jì)任務(wù)的話(常數(shù)OS_TASK_STAT_EN=1OS_TASK_STAT_EN=1),則),則OSInit( )OSInit( )還要以優(yōu)先級(jí)別為還要以優(yōu)先級(jí)別為OS_LOWEST_PRIO-1OS_LOWEST_PRIO-1來(lái)創(chuàng)建統(tǒng)計(jì)任務(wù)。來(lái)創(chuàng)建統(tǒng)計(jì)任務(wù)。 l初始化函數(shù)初始化函數(shù)OSInit( )OSInit( )對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化時(shí),主要要?jiǎng)?chuàng)建對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化時(shí),主要要?jiǎng)?chuàng)建5 5個(gè)空個(gè)空數(shù)據(jù)緩沖區(qū)(任務(wù)控制塊、事件控制塊、消息隊(duì)列控制塊、標(biāo)志控?cái)?shù)據(jù)緩沖區(qū)(任務(wù)控制塊、事件控制塊、消息隊(duì)列控制塊、標(biāo)志控制塊、存儲(chǔ)控制塊)。制塊、存儲(chǔ)控制塊)。l為了可以快

9、速地查詢?nèi)蝿?wù)控制塊鏈表中的各個(gè)元素,初始化函數(shù)為了可以快速地查詢?nèi)蝿?wù)控制塊鏈表中的各個(gè)元素,初始化函數(shù)OSInit( )OSInit( )還要?jiǎng)?chuàng)建一個(gè)數(shù)組還要?jiǎng)?chuàng)建一個(gè)數(shù)組OSTCBPrioTblOS_LOWEST_PRIO + 1OSTCBPrioTblOS_LOWEST_PRIO + 1,在這個(gè)數(shù)組中,按任務(wù)的優(yōu)先級(jí)別的順序把任務(wù)控制塊的指針存放在這個(gè)數(shù)組中,按任務(wù)的優(yōu)先級(jí)別的順序把任務(wù)控制塊的指針存放在了對(duì)應(yīng)的元素中。在了對(duì)應(yīng)的元素中。2.3.1 C/OS-IIC/OS-II的初始化(的初始化(OSInit()OSInit()函數(shù))函數(shù))void main (void) PC_DispCl

10、rScr(DISP_FGND_WHITE + DISP_BGND_BLACK); OSInit(); PC_DOSSaveReturn(); PC_VectSet(uCOS, OSCtxSw); RandomSem = OSSemCreate(1); OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0); OSStart();PC_DOSSaveReturn(); /* 返回到?jīng)]有運(yùn)行返回到?jīng)]有運(yùn)行mCOS-II之前的之前的DOS環(huán)境環(huán)境 */PC_VectSet(uCOS, OSCtxSw); /*

11、 指定任務(wù)切換處理函數(shù)指定任務(wù)切換處理函數(shù) */RandomSem = OSSemCreate(1); /* 建立一個(gè)信號(hào)量建立一個(gè)信號(hào)量 */信號(hào)量是由信號(hào)量是由m mC/OS-II提供的一種機(jī)制,用于防止多提供的一種機(jī)制,用于防止多個(gè)任務(wù)同時(shí)訪問(wèn)同一資源(如產(chǎn)生隨機(jī)數(shù)的函數(shù))。個(gè)任務(wù)同時(shí)訪問(wèn)同一資源(如產(chǎn)生隨機(jī)數(shù)的函數(shù))。這里信號(hào)量初值設(shè)置為這里信號(hào)量初值設(shè)置為1,通知,通知m mC/OS-II在某一時(shí)在某一時(shí)刻只有一個(gè)任務(wù)可以調(diào)用隨機(jī)數(shù)產(chǎn)生函數(shù)。該信號(hào)刻只有一個(gè)任務(wù)可以調(diào)用隨機(jī)數(shù)產(chǎn)生函數(shù)。該信號(hào)量建立函數(shù)返回一個(gè)指向信號(hào)量的指針。量建立函數(shù)返回一個(gè)指向信號(hào)量的指針。OSTaskCreat

12、e(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0);/* 在開(kāi)始多任務(wù)之前,必須建立至少一個(gè)任務(wù)。這里建立了一個(gè)叫做在開(kāi)始多任務(wù)之前,必須建立至少一個(gè)任務(wù)。這里建立了一個(gè)叫做TaskStart()的任務(wù)的任務(wù) */OSStart(); /* 將控制權(quán)交給將控制權(quán)交給m mC/OS-II內(nèi)核,開(kāi)始運(yùn)行多任務(wù)內(nèi)核,開(kāi)始運(yùn)行多任務(wù) */2.3.2 C/OS-IIC/OS-II的啟動(dòng)(的啟動(dòng)(OSStart()OSStart()函數(shù))函數(shù))多任務(wù)的啟動(dòng)是通過(guò)多任務(wù)的啟動(dòng)是通過(guò)OSStart()實(shí)現(xiàn)的。實(shí)現(xiàn)的。在啟動(dòng)在啟動(dòng)m mC

13、/OS-II之前,至少須建立一個(gè)應(yīng)用任務(wù)。之前,至少須建立一個(gè)應(yīng)用任務(wù)。OSStart()函數(shù)完成以下兩個(gè)工作:函數(shù)完成以下兩個(gè)工作:從任務(wù)就緒表中找出用戶建立的優(yōu)先級(jí)最高的任務(wù)的任務(wù)控制塊,從任務(wù)就緒表中找出用戶建立的優(yōu)先級(jí)最高的任務(wù)的任務(wù)控制塊,將該任務(wù)設(shè)為當(dāng)前任務(wù)。將該任務(wù)設(shè)為當(dāng)前任務(wù)。將上述任務(wù)的堆棧中保存的值彈回到將上述任務(wù)的堆棧中保存的值彈回到CPUCPU寄存器中,然后執(zhí)行一寄存器中,然后執(zhí)行一條中斷返回指令,強(qiáng)制執(zhí)行該任務(wù)代碼。條中斷返回指令,強(qiáng)制執(zhí)行該任務(wù)代碼。當(dāng)當(dāng)OSStart()執(zhí)行后,即多任務(wù)啟動(dòng)以后,系統(tǒng)將在用戶任執(zhí)行后,即多任務(wù)啟動(dòng)以后,系統(tǒng)將在用戶任務(wù)之間,或用戶任

14、務(wù)與系統(tǒng)任務(wù)之間切換,不再返回到主函務(wù)之間,或用戶任務(wù)與系統(tǒng)任務(wù)之間切換,不再返回到主函數(shù)數(shù)main()。void TaskStart (void *pdata) #if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr; #endif char s100; INT16S key; pdata = pdata; TaskStartDispInit(); OS_ENTER_CRITICAL(); PC_VectSet(0 x08, OSTickISR); PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OS

15、StatInit(); TaskStartCreateTasks(); 與進(jìn)入臨界段代碼的方式有與進(jìn)入臨界段代碼的方式有關(guān)關(guān)定義定義16位變量位變量key,用于按鍵輸入,用于按鍵輸入本任務(wù)無(wú)參數(shù)傳遞,未使用本任務(wù)無(wú)參數(shù)傳遞,未使用pdata,但為,但為了避免編譯器警告,故執(zhí)行該語(yǔ)句了避免編譯器警告,故執(zhí)行該語(yǔ)句初始化屏幕顯示,作者自定義的函數(shù),初始化屏幕顯示,作者自定義的函數(shù),詳見(jiàn)光盤(pán)中的源程序代碼詳見(jiàn)光盤(pán)中的源程序代碼處理臨界段代碼處理臨界段代碼1)處理臨界段代碼)處理臨界段代碼關(guān)中斷關(guān)中斷 處理完成后處理完成后開(kāi)中斷開(kāi)中斷 注:開(kāi)注:開(kāi)/關(guān)中斷的方法與編譯器相關(guān)。關(guān)中斷的方法與編譯器相關(guān)。

16、2)C/OS-II定義了兩個(gè)宏(定義了兩個(gè)宏(macros)來(lái)開(kāi)中斷和關(guān)中斷:)來(lái)開(kāi)中斷和關(guān)中斷: OS_ENTER_CRITICAL( ) OS_EXIT_CRITICAL( ) 這兩個(gè)宏的定義取決于微處理器,在文件這兩個(gè)宏的定義取決于微處理器,在文件OS_CPU.H中可以找到相應(yīng)的中可以找到相應(yīng)的宏定義,而每種微處理器都有自己的宏定義,而每種微處理器都有自己的OS_CPU.H2.3.3 臨界段代碼(臨界段代碼(critical sectionscritical sections)代碼的臨界段也稱(chēng)為臨界區(qū),指處理時(shí)不可分割的代碼。代碼的臨界段也稱(chēng)為臨界區(qū),指處理時(shí)不可分割的代碼。一旦這部分代

17、碼開(kāi)始執(zhí)行,則一旦這部分代碼開(kāi)始執(zhí)行,則不允許任何中斷打入不允許任何中斷打入,因此在進(jìn),因此在進(jìn)入臨界段之前必須關(guān)中斷,而臨界段代碼執(zhí)行完后,要立即開(kāi)入臨界段之前必須關(guān)中斷,而臨界段代碼執(zhí)行完后,要立即開(kāi)中斷。中斷。OS_ENTER_CRITICAL( )OS_ENTER_CRITICAL( )、 OS_EXIT_CRITICAL( )OS_EXIT_CRITICAL( )具體實(shí)現(xiàn)具體實(shí)現(xiàn)方法有方法有3 3種種1 1)OS_CRITICAL_MATHODOS_CRITICAL_MATHOD1 1 用處理器的關(guān)中斷指令完成用處理器的關(guān)中斷指令完成OS_ENTER_CRITICAL( )OS_EN

18、TER_CRITICAL( ) 用處理器的開(kāi)中斷指令完成用處理器的開(kāi)中斷指令完成OS_EXIT_CRITICAL( )OS_EXIT_CRITICAL( )2 2)OS_CRITICAL_MATHODOS_CRITICAL_MATHOD2 2 在堆棧中保存中斷的開(kāi)在堆棧中保存中斷的開(kāi)/ /關(guān)狀態(tài),然后再關(guān)中斷,實(shí)現(xiàn)關(guān)狀態(tài),然后再關(guān)中斷,實(shí)現(xiàn)OS_ENTER_CRITICAL( )OS_ENTER_CRITICAL( ) 從堆棧中彈出原來(lái)的中斷開(kāi)從堆棧中彈出原來(lái)的中斷開(kāi)/ /關(guān)狀態(tài),實(shí)現(xiàn)關(guān)狀態(tài),實(shí)現(xiàn)OS_EXIT_CRITICAL( ) OS_EXIT_CRITICAL( ) define OS

19、_ENTER_CRITICAL( ) asm(“push psw”) asm(“DI”)define OS_EXIT_CRITICAL( ) asm(“pop psw”) 3) OS_CRITICAL_MATHOD3 一些編譯器提供了擴(kuò)展功能,用戶可以得到當(dāng)前處理一些編譯器提供了擴(kuò)展功能,用戶可以得到當(dāng)前處理器狀態(tài)字的值,并保存在器狀態(tài)字的值,并保存在C函數(shù)的局部變量中,這個(gè)函數(shù)的局部變量中,這個(gè)變量可以恢復(fù)變量可以恢復(fù)PSW。 #define OS_ENTER_CRITICAL() cpu_sr = get_processor_psw(); disable_interrupts(); #de

20、fine OS_EXIT_CRITICAL() set_processor_psw(cpu_sr);如果使用這種方式保護(hù)臨界段代碼,則須在應(yīng)用程序的相關(guān)如果使用這種方式保護(hù)臨界段代碼,則須在應(yīng)用程序的相關(guān)函數(shù)中多定義一個(gè)局部變量函數(shù)中多定義一個(gè)局部變量cpu_srcpu_sr。void TaskStart (void *pdata) #if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr; #endif char s100; INT16S key; pdata = pdata; TaskStartDispInit(); OS_ENTER_CRITICAL();

21、PC_VectSet(0 x08, OSTickISR); PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSStatInit(); TaskStartCreateTasks(); 把計(jì)算機(jī)本來(lái)為時(shí)鐘節(jié)拍提供的中斷把計(jì)算機(jī)本來(lái)為時(shí)鐘節(jié)拍提供的中斷服務(wù)程序替換成服務(wù)程序替換成m mC/OS-II需要用到的需要用到的時(shí)鐘節(jié)拍中斷服務(wù)程序時(shí)鐘節(jié)拍中斷服務(wù)程序設(shè)置時(shí)鐘節(jié)拍的頻率為設(shè)置時(shí)鐘節(jié)拍的頻率為200HzOS_TICKS_PER_SEC = 200通過(guò)該函數(shù)得知處理器在運(yùn)行所有應(yīng)用任務(wù)通過(guò)該函數(shù)得知處理器在運(yùn)行所有應(yīng)用任務(wù)時(shí)實(shí)際的時(shí)實(shí)際

22、的CPU使用率使用率這是作者自定義的一個(gè)函數(shù),其作用是建立更多這是作者自定義的一個(gè)函數(shù),其作用是建立更多的任務(wù)的任務(wù)接上頁(yè)程序接上頁(yè)程序 for (;) TaskStartDisp(); if (PC_GetKey(&key) = TRUE) if (key = 0 x1B) PC_DOSReturn(); OSCtxSwCtr = 0; OSTimeDlyHMSM(0, 0, 1, 0); 無(wú)限循環(huán)無(wú)限循環(huán)作者自定義的顯示函數(shù),在作者自定義的顯示函數(shù),在DOS窗口底部顯窗口底部顯示任務(wù)數(shù)、示任務(wù)數(shù)、CPU利用率等相關(guān)信息利用率等相關(guān)信息判斷是否有按鍵輸入判斷是否有按鍵輸入如果按下鍵為

23、如果按下鍵為Esc返回返回DOS環(huán)境環(huán)境如果沒(méi)有按下如果沒(méi)有按下Esc鍵,記錄任務(wù)切換次數(shù)的鍵,記錄任務(wù)切換次數(shù)的全局變量全局變量OSCtxSwCtr清零,以便記錄下一清零,以便記錄下一秒內(nèi)發(fā)生的任務(wù)切換次數(shù)秒內(nèi)發(fā)生的任務(wù)切換次數(shù)延時(shí)函數(shù),()中從左到右分別表示時(shí)、分、秒、毫秒。任延時(shí)函數(shù),()中從左到右分別表示時(shí)、分、秒、毫秒。任務(wù)調(diào)用該函數(shù)將自身掛起務(wù)調(diào)用該函數(shù)將自身掛起1秒,交出秒,交出CPU使用權(quán),內(nèi)核開(kāi)始使用權(quán),內(nèi)核開(kāi)始調(diào)度,找到下一個(gè)最高優(yōu)先級(jí)的就緒任務(wù)調(diào)度,找到下一個(gè)最高優(yōu)先級(jí)的就緒任務(wù)static void TaskStartCreateTasks (void) INT8U i

24、; for (i = 0; i OSTCBStkPtr = SP;清中斷源;清中斷源;重新開(kāi)中斷;重新開(kāi)中斷;執(zhí)行用戶代碼做中斷服務(wù);執(zhí)行用戶代碼做中斷服務(wù);調(diào)用調(diào)用OSIntExit( );恢復(fù)所有恢復(fù)所有CPU寄存器;寄存器;執(zhí)行中斷返回指令;執(zhí)行中斷返回指令;進(jìn)入中斷函數(shù)進(jìn)入中斷函數(shù) OSIntEnter()void OSIntEnter (void) if (OSRunning = TRUE if ( OSIntNesting 0 ) OSIntNesting-; if (OSIntNesting | OSLockNesting) = 0) OSIntExitY = OSUnMapTb

25、lOSRdyGrp; OSPrioHighRdy = (INT8U)(OSIntExitY 3) + OSUnMapTblOSRdyTblOSIntExitY); if (OSPrioHighRdy != OSPrioCur) OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy; OSCtxSwCtr+; OSIntCtxSw(); /* 調(diào)用中斷切換函數(shù),而非任務(wù)切換函數(shù)調(diào)用中斷切換函數(shù),而非任務(wù)切換函數(shù) */ OS_EXIT_CRITICAL();退出中斷函數(shù)退出中斷函數(shù) OSIntExit()l時(shí)鐘:任何操作系統(tǒng)都要提供一個(gè)周期性的信號(hào)源,以提供系統(tǒng)處理諸如

26、時(shí)鐘:任何操作系統(tǒng)都要提供一個(gè)周期性的信號(hào)源,以提供系統(tǒng)處理諸如延時(shí)、超時(shí)等與時(shí)間有關(guān)的事件,這個(gè)周期性的信號(hào)源稱(chēng)之為時(shí)鐘。延時(shí)、超時(shí)等與時(shí)間有關(guān)的事件,這個(gè)周期性的信號(hào)源稱(chēng)之為時(shí)鐘。l時(shí)鐘節(jié)拍:最小的時(shí)鐘單位稱(chēng)之為時(shí)鐘節(jié)拍(時(shí)鐘節(jié)拍:最小的時(shí)鐘單位稱(chēng)之為時(shí)鐘節(jié)拍(Time Tick)。)。l硬件定時(shí)器以時(shí)鐘節(jié)拍為周期定時(shí)產(chǎn)生中斷,其服務(wù)子程序稱(chēng)為硬件定時(shí)器以時(shí)鐘節(jié)拍為周期定時(shí)產(chǎn)生中斷,其服務(wù)子程序稱(chēng)為OSTickISR()。()。l中斷服務(wù)程序調(diào)用中斷服務(wù)程序調(diào)用OSTimeTick()來(lái)完成系統(tǒng)在每個(gè)時(shí)鐘節(jié)拍需要做的()來(lái)完成系統(tǒng)在每個(gè)時(shí)鐘節(jié)拍需要做的工作如下:工作如下: (1)給計(jì)數(shù)器)給計(jì)數(shù)器OSTime1 (2)遍歷任務(wù)控制塊鏈表中的所有任務(wù)控制塊,把各個(gè)任務(wù)塊中用來(lái)存放任務(wù)延)遍歷任務(wù)控制塊鏈表中的所有任務(wù)控制塊,把各個(gè)任務(wù)塊中用來(lái)存放任

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論