




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ucos-ii操作系統(tǒng)復(fù)習(xí)大綱 一.填空題 1 .uC/OS-II是一個簡潔、易用的基于優(yōu)先級的嵌入式【搶占式】多任務(wù)實時內(nèi)核。 2 .任務(wù)是一個無返回的無窮循環(huán)。uc/os-ii總是運行進入就緒狀態(tài)的【最高優(yōu)先級】的任務(wù)。 3 .因為 uc/os-ii總是運行進入就緒狀態(tài)的最高優(yōu)先級的任務(wù)。所以,確定哪個 任務(wù)優(yōu)先級最高,下面該哪個任務(wù)運行,這個工作就是由【調(diào)度器(scheduler)】來完成的。 4 . 【任務(wù)級】 的調(diào)度是由函數(shù) OSSched(證成的, 而 【中斷級】 的調(diào)度是由函數(shù) OSIntExt()完成。對于 OSSched(),它內(nèi)部調(diào)用的是【OS_TASK_SW()完成實際的
2、調(diào)度;OSIntExt()內(nèi)部調(diào)用的是【OSCtxSw()實現(xiàn)調(diào)度。 5 .任務(wù)切換其實很簡單,由如下 2 步完成: (1)將被掛起任務(wù)的處理器寄存器推入自己的【任務(wù)堆棧 1 (2)然后將進入就緒狀態(tài)的最高優(yōu)先級的任務(wù)的寄存器值從堆棧中恢復(fù)到【寄存器】中。 6 .任務(wù)的 5 種狀態(tài)。 【睡眠態(tài)(taskdormat)】:任務(wù)駐留于程序空間(rom 或 ram)中,暫時沒交給 ucos-ii處理。 【就緒態(tài)(taskread:任務(wù)一旦建立,這個任務(wù)就進入了就緒態(tài)。 【運行態(tài)(taskrunning):調(diào)用 OSStart()可以啟動多任務(wù)。OSStart()函數(shù)只能調(diào)用一次,一旦調(diào)用,系統(tǒng)將運行
3、進入就緒態(tài)并且優(yōu)先級最高的任務(wù)。 【等待狀態(tài)(taskwaiting):正在運行的任務(wù),通過延遲函數(shù)或 pend(掛起) 相關(guān)函數(shù)后,將進入等待狀態(tài)。 【中斷狀態(tài)(ISRrunning):正在運行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)閉或者 ucos-ii將中斷關(guān)閉。 7 .【不可剝奪型】內(nèi)核要求每個任務(wù)自我放棄 CPU 勺所有權(quán)。不可剝奪型調(diào)度法也稱作合作型多任務(wù),各個任務(wù)彼此合作共享一個 CPU 8 .當(dāng)系統(tǒng)響應(yīng)時間很重要時,要使用【可剝奪型】內(nèi)核。最高優(yōu)先級的任務(wù)一旦就緒,總能得到 CPU 的控制權(quán)。 9 .使用可剝奪型內(nèi)核時,應(yīng)用程序不應(yīng)直接使用不可重入型函數(shù)。調(diào)用不可重入型函數(shù)時,
4、要滿足互斥條件,這一點可以用【互斥型信號量】來實現(xiàn)。 10 .【可重入型】函數(shù)可以被一個以上的任務(wù)調(diào)用,而不必擔(dān)心數(shù)據(jù)的破壞。 11 .可重入型函數(shù)任何時候都可以被中斷,一段時間以后又可以運行,而相應(yīng)數(shù)據(jù)不會丟失。可重入型函數(shù)或者只使用【局部變量】,即變量保存在 CPU 寄存器中或堆棧中。如果使用全局變量,則要對全局變量予以【保護】。 12 .每個任務(wù)都有其優(yōu)先級。任務(wù)越重要,賦予的優(yōu)先級應(yīng)【越高】。 13 .科C/OSn初始化是通過調(diào)用系統(tǒng)函數(shù)【OSIint()實現(xiàn)的,完成科C/OSn所有的變量和數(shù)據(jù)結(jié)構(gòu)的初始化。 14 .多任務(wù)的啟動是用戶通過調(diào)用【OSStart()】實現(xiàn)的。然而,啟動科
5、C/OSn之前,用戶至少要建立一個應(yīng)用【任務(wù)】。 15 .NC/OS-II的參數(shù)配置文件名為【OS_CFG.H。 16 .刪除任務(wù),是說任務(wù)將返回并處于【休眠狀態(tài)】,并不是說任務(wù)的代碼被刪除了,只是任務(wù)的代碼不再被仙/OS-II調(diào)用。 17 .NC/OSR 要求用戶提供【定時中斷】來實現(xiàn)延時與超時控制等功能。 18 .定時中斷也叫做【時鐘節(jié)拍】,它應(yīng)該每秒發(fā)生 10 至 100 次。 19 .時鐘節(jié)拍的實際頻率是由用戶的應(yīng)用程序決定的。時鐘節(jié)拍的頻率越高,系 統(tǒng)的負荷就【越重】。 20 .血/OS-II中的信號量由兩部分組成:一個是信號量的【計數(shù)值】,它是一個 16 位的無符號整數(shù)(0 到 6
6、5,535 之間);另一個是由等待該信號量的任務(wù)組成的 【等待任務(wù)表用戶要在 OS_CFGH 中將 OS_SEM_EN 開關(guān)量常數(shù)置成【11,這樣pC/OS-II才能支持信號量。 21 .NC/OS 中表示當(dāng)前已經(jīng)創(chuàng)建的任務(wù)數(shù)全局變量名為:OSTaskCtr】 21 .NC/OS 中表示當(dāng)前內(nèi)核運行的標記全局變量名為:OSRunning 22 .在使用 OSTaskCreate&J 建任務(wù)時,若需要 TaskData 作偽參數(shù)傳遞給任務(wù) Task,并從任務(wù) Task中獲得傳入的字符參數(shù)值,請在下面【】填上合適的代碼。 charTaskData=A; OSTaskCreate(Task,
7、【(void*)&TaskData,&TaskStk0TASK_STK_SIZE -1,1); voidTask(void*pdata) charvalue=*(char*)pdata;for(;) OSSemPend(RandomSem,0,&err); y=(int)(*(char*)pdata-A); OSSemPost(RandomSem); PC_DispChar(10,25,value,DISP_FGND_WHITE+DISP_BGND_BLUE); OSTimeDly(1); 23 .在 C/OSI在任務(wù) Task1 中使用郵箱函數(shù) OSMboxPost(
8、)發(fā)送字符;而在 Task2 中接收 OSMboxPost()字符,請在下面【】填上合適的代碼。 voidTask1(void*data)chartxmsg; INT8Uerr; txmsg=A; for(;) OSMboxPost(TxMbox,【(void*)&txmsg);/*Sendmessageto Task2*/ OSMboxPend(AckMbox,0,&err); txmsg+; if(txmsg=Z)txmsg=A; voidTask5(void*data) char*rxmsg; INT8Uerr; data=data; for(;) rxmsg=【(cha
9、r*)】OSMboxPend(TxMbox,0,&err); PC_DispChar(70,18,*rxmsg,DISP_FGND_YELLOW+DISP_BGND_BLUE); OSMboxPost(AckMbox,(void*)1); 24 .在 Task1 中使用消息隊列 OSQPend()函數(shù)接收消息“HelloWorld!”,而在 Task2 中使用消息隊列 OSQPost()函數(shù)發(fā)送消息“HelloWorld!”,請在下面 【1填上合適的代碼. voidTask1(void*pdata) char*msg; INT8Uerr; pdata=pdata; for(;) msg
10、=(char*)】OSQPend(MsgQueue,0,&err); PC_DispStr(70,13,msg,DISP_FGND_YELLOW+DISP_BGND_BLUE); OSTimeDlyHMSM(0,0,0,100); voidTask2(void*pdata) charmsg20; pdata=pdata; strcpy(&msg0,HelloWorld!); for(;) OSQPost(MsgQueue,(void*)&msg0); OSTimeDlyHMSM(0,0,0,500); 二.名詞解釋 1 .代碼的臨界段 代碼的臨界段也稱為臨界區(qū),指處理時
11、不可分割的代碼。 2 .資源 任何為任務(wù)所占用的實體都可稱為資源。資源可以是輸入輸出設(shè)備;資源也 可以是一個變量,一個結(jié)構(gòu)或一個數(shù)組等。 3 .共享資源 可以被一個以上任務(wù)使用的資源叫做共享資源。 4 .任務(wù) 一個任務(wù),也稱作一個線程,是一個簡單的程序,該程序可以認為 CPU完 全只屬該程序自己。典型地、每個任務(wù)都是一個無限的循環(huán)。 5 .任務(wù)切換 指 ContextSwitch,其含義是 CPU 寄存器內(nèi)容切換。 當(dāng)多任務(wù)內(nèi)核決定運行另外的任務(wù)時,它保存正在運行任務(wù)的當(dāng)前狀態(tài)(Context),即 CPU 寄存器中 的全部內(nèi)容。 6 .內(nèi)核 多任務(wù)系統(tǒng)中,內(nèi)核負責(zé)管理各個任務(wù),或者說為每個任
12、務(wù)分配 CPU 時間, 并且負責(zé)任務(wù)之間的通訊。內(nèi)核提供的基本服務(wù)是任務(wù)切換。 7 .調(diào)度(Schedule。 內(nèi)核的主要職責(zé)之一,就是要決定該輪到哪個任務(wù)運行了。多數(shù)實時內(nèi)核是基于優(yōu)先級調(diào)度法的。 8 .可剝奪型內(nèi)核 最高優(yōu)先級的任務(wù)一旦就緒,總能得到 CPU 的控制權(quán)。當(dāng)一個運行著的任務(wù)使一個比它優(yōu)先級高的任務(wù)進入了就緒態(tài),當(dāng)前任務(wù)的 CPU 使用權(quán)就被剝奪了,或者說被掛起了,那個高優(yōu)先級的任務(wù)立刻得到了 CPU的控制權(quán)。如果是中斷服務(wù)子程序使一個高優(yōu)先級的任務(wù)進入就緒態(tài),中斷完成時,中斷了的任務(wù)被掛起,優(yōu)先級高的那個任務(wù)開始運行。 三.簡答題 1. 舉例說明 pCOS-II可移植型數(shù)據(jù)類
13、型的定義方式 答:因為不同的微處理器有不同的字長,山/OS-II的移植文件包括很多類型 定義以確保可移植性。 pCOS-II不使用 C 語言中的 short,int,10ng 等數(shù)據(jù)類型的定義, 因為它們與處理器類型有關(guān), 隱含著不可移植性。血/OS-II代之以移植性強的整數(shù)數(shù)據(jù)類型,這樣,既直觀又可移植(該數(shù)據(jù)類型不依賴于編譯),舉例如下: typedefunsignedcharBOOLEAN; typedefunsignedcharINT8U; typedefsignedcharINT8S; typedefunsignedintINT16U; typedefsignedintINT16S;
14、 typedefunsignedlongINT32U; typedefsignedlongINT32S; 2. pCOS-II如何定義全局變量? 答:眾所周知,全局變量應(yīng)該是得到內(nèi)存分配且可以被其他模塊通過 C 語言 中 extern關(guān)鍵字調(diào)用的變量。因此,必須在.C 和.H 文件中定義。這種重復(fù)的定義很容易導(dǎo)致錯誤。血 OS-II采用的方法只需用在頭文件中定義一次。 uC/OS_II.H 頭文件中包括以下定義全局宏定義: #ifdefOS_GLOBALS #defineOS_EXT #else #defineOS_EXTextern #endif OS_EXTINT32UOSIdleCtr;
15、 同時,uCOS_II.H 有中以下定義: #defineOS_GLOBALS #include“includes.h 當(dāng)編譯器處理 uCOS_II.C 時,它使得頭文件變成如下所示,因為 OS_EXT 被設(shè)置為空。 INT32UOSIdleCtr; 這樣編譯器就會將這些全局變量分配在內(nèi)存中。當(dāng)編譯器處理其他.C 文件 時,頭文件變成了如下的樣子,因為 OS_GLOBAL 沒有定義,所以 OS_EXT 被定義為extern。 externINT32UOSIdleCtr; 在這種情況下,不產(chǎn)生內(nèi)存分配,而任何.C 文件都可以使用這些變量。這樣的就只需在.H 文件中定義一次就可以了。 3. OS_
16、ENTER_CRITICAL()和 OS_EXIT_CRITICAL()的含義及作用? 答:OS_ENTER_CRITICAL()關(guān)卡斷; OS_EXIT_CRITICAL():開中斷。 關(guān) G 斷和亓中斷是為了保護臨界段代碼。 用戶的應(yīng)用代碼可以使用這兩個宏來開中斷和關(guān)中斷。很明顯,關(guān)中斷會影響中斷延遲,所以要特別小心。用戶還可以用信號量來保護臨界段代碼。 4. 基于 PC 的服務(wù)中如何測量 PC_DisplayChar()的執(zhí)行時間? 答: 測量 PC_DisplayChar()的執(zhí)行時間的代碼如下: INT16Utime;定義時間變量 PC_ElapsedInit();時鐘初始化 PC_
17、ElapsedStart();開始計時 PC_DispChar(40,24,A,DISP_FGND_WHITE/;執(zhí)行代碼 time=PC_ElapsedStop();/結(jié)束計時 5. uC/OS-II的任務(wù)框架 答: voidtask_xxx(void*pData) /*該任務(wù)的初始化工作*/ /*進入該任務(wù)的死循環(huán)*/ while(1) ) ) 每個用戶的任務(wù)都必須符合事件驅(qū)動的編程模型,即 uC/OS-II的應(yīng)用程序 都必須是“事件驅(qū)動的編程模型”。一個任務(wù)首先等待一個事件的發(fā)生,事件可以是系統(tǒng)中斷發(fā)出的,也可以是其它任務(wù)發(fā)出的,又可以是任務(wù)自身等待的時間片。當(dāng)一個事件發(fā)生了,任務(wù)再作相
18、應(yīng)處理,處理結(jié)束后又開始等待下一個事件的發(fā)生。如此周而復(fù)始的任務(wù)處理模型就是“事件驅(qū)動的編程模型”。事件驅(qū)動 模型也涵蓋了中斷驅(qū)動模型,uC/OS-II事件歸根結(jié)底來自三個方面: (1)中斷服務(wù)函數(shù)發(fā)送的事件 (2)系統(tǒng)延時時間到所引起的 (3)其它任務(wù)發(fā)送的事件。 6 .與共享資源打交道時,使之滿足互斥條件最一般的方法包括哪些?答: 包括:關(guān)中斷、使用測試并置位指令、禁止做任務(wù)切換、利用信號量等。 7 .描述利用仙 C/OS_宏調(diào)用關(guān)中斷和開中斷處理共享數(shù)據(jù)的示意性代碼程序。 答: OS_ENTER_CRITICAL(); /*在這里處理共享數(shù)據(jù)*/ OS_EXIT_CRITICAL();
19、8 .信號量的典型應(yīng)用包括哪些? 答: 信號量(Semaphores)是一種約定機制,在多任務(wù)內(nèi)核中的典型應(yīng)用包括: (1) 控制共享資源的使用權(quán)(滿足互斥條件); (2)標志某事件的發(fā)生 (3)使兩個任務(wù)的行為同步 9 .對信號量只能實施哪三種操作?答: 一般地說,對信號量只能實施三種操作: (1) 初始化(INITIALIZE),也可稱作建立(CREATE); (2) 等信號(WAIT)也可稱作掛起(PEND); (3) 給信號(SIGNAL)或發(fā)信號(POST)。 10 .給出祖 C/OSH 中如何用信號量處理共享數(shù)據(jù)的示意代碼?答: 通過獲得信號量處理共享數(shù)據(jù)的示意代碼如下: OS_E
20、VENT*SharedDataSem; voidFunction(void) INT8Uerr; OSSemPend(SharedDataSem,0,&err); /*共享數(shù)據(jù)的處理在此進行,(中斷是開著的)*/OSSemPost(SharedDataSem); 11 給出初始化和啟動叱C/(S-n的示意代碼。 答: voidmain(void) OSInit();/*初始化 uC/OS-II*/ . 通過調(diào)用 OSTaskCreate(或 OSTaskCreateExt(創(chuàng)建至少一個任務(wù); . OSStart();/*開始多任務(wù)調(diào)度!OSStart()永遠不會返回*/ 12 .描述建
21、立任務(wù) OSTaskCreate(的函數(shù)原型。 答: 建立任務(wù) OSTaskCreate(的函數(shù)原型為: INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio) 其中, task:任務(wù)代碼的指針; pdata:當(dāng)任務(wù)開始執(zhí)行時傳遞給任務(wù)的參數(shù)的指針; ptos:分配給任務(wù)的堆棧的棧頂指針; prio:分配給任務(wù)的優(yōu)先級。 13 .任務(wù)可以是一個無限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉。 請給出示意代碼結(jié)構(gòu)。 答:pC/OS-n描述的任務(wù)示意代碼必須是以下兩種結(jié)構(gòu)之一: voidYourTask(voi
22、d*pdata) for(;) /*用戶代碼*/ 調(diào)用心/OS-H 的服務(wù)例程之一: OSMboxPend(); OSQPend(); OSSemPend(); OSTaskDel(OS_PRIO_SELF); OSTaskSuspend(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM(); /*用戶代碼*/ 或 voidYourTask(void*pdata) /*用戶代碼*/ OSTaskDel(OS_PRIO_SELF); 14 .仙 C/OSII任務(wù)管理提供哪些服務(wù)? 答:NC/OSII任務(wù)管理提供的服務(wù)包括: (1)建立任務(wù):OSTaskCreat
23、e(或 OSTaskCreateExtQ; (2)刪除任務(wù):OSTaskDel(); (3)請求刪除任務(wù):OSTaskDelReq(); (4)改變?nèi)蝿?wù)的優(yōu)先級:OSTaskChangePrio() (5)掛起任務(wù):OSTaskSuspend() (6)恢復(fù)任務(wù):OSTaskResume() (7)獲得有關(guān)任務(wù)的信息:OSTaskQuery( 15 .CC/OSH 時間任務(wù)管理提供哪些服務(wù)? 答:NC/OSII時間任務(wù)管理提供的服務(wù)包括: (1) 任務(wù)延時函數(shù):OSTimeDly() (2) 按時分秒延時函數(shù):OSTimeDlyHMSM() (3) 讓處在延時期的任務(wù)結(jié)束延時:OSTimeDl
24、yResume() (4) 設(shè)置系統(tǒng)時間:OSTimeGet() (5) 獲得系統(tǒng)時間:OSTimeSet() 16 .仙 C/OSII提供的數(shù)據(jù)共享和任務(wù)通訊的方法包括哪些? 答:NC/OSH 提供的數(shù)據(jù)共享和任務(wù)通訊的方法包括五種方法: (1)利用宏 OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()來關(guān)閉中斷和打開中斷。 (2)禾 I 用函數(shù) OSSchedLock(開口 OSSchekUnlock()對心/OS-II中的任務(wù)調(diào)度函數(shù)上鎖和開鎖。 (3)信號量。 郵箱。 (5)消息隊列。 17 .對于事件控制塊進行的一些通用包括哪些操作? 答:對于事件控制塊進
25、行的一些通用操作包括: (1) 初始化一個事件控制塊:OSEventWa 讓 Listing); (2) 使一個任務(wù)進入就緒態(tài):OSEventTaskRdy(); (3) 使一個任務(wù)進入等待該事件的狀態(tài):OSEventTaskWait(); (4)因為等待超時而使一個任務(wù)進入就緒態(tài):OSEventTO()。 18 .仙 C/OSH 信號量提供哪些服務(wù)? 答:NC/OSR 信號量提供的服務(wù)包括: (1) 建立一個信號量:OSSemCreate() (2) 等待一個信號量:OSSemPend() (3)發(fā)送一個信號量:OSSemPost() (4)無等待地請求一個信號量:OSSemAccept()
26、; (5)查詢一個信號量的當(dāng)前狀態(tài):OSSemQuery()= 19 .仙 C/OSH 郵箱提供哪些服務(wù)? 答:CC/OSH 郵箱提供的服務(wù)包括: (1)建立一個郵箱:OSMboxCreate(); (2)等待一個郵箱中的消息:OSMboxPend(); (3)發(fā)送一個消息到郵箱中:OSMboxPost(); (4)無等待地從郵箱中得到一個消息:OSMboxAccept(); (5)查詢一個郵箱的狀態(tài):OSMboxQuery() 20.叱 C/OSR 消息隊列提供哪些服務(wù)? 答:NC/OSR 消息隊列提供的服務(wù)包括: (1)建立一個消息隊列:OSQCreate(); (2)等待一個消息隊列中的
27、消息:OSQPend(); (3)向消息隊列發(fā)送一個消息(FIFO):OSQPost(); (4)向消息隊列發(fā)送一個消息(LIFO):OSQPostFront(); (5)無等待地從一個消息隊列中取得消息:OSQAccept(); (6)清空一個消息隊列:OSQFlush(); (7)查詢一個消息隊列的狀態(tài):OSQQuery()。 21.NC/OSII內(nèi)存管理提供哪些服務(wù)? 答:NC/OSH 內(nèi)存管理提供的服務(wù)包括: (1) 建立一個內(nèi)存分區(qū):OSMemCreateQ; (2) 分配一個內(nèi)存塊:OSMemGet(); (3) 釋放一個內(nèi)存塊:OSMemPut(); (4) 查詢一個內(nèi)存分區(qū)的狀
28、態(tài):OSMemQuery()。 22.移植 pC/OS-II時,要使 pC/OS-II正常運行,處理器必須滿足哪些基本要求?答:要使心/OS-II正常運行,處理器必須滿足以下要求: (1)處理器的 C 編譯器能產(chǎn)生可重入代碼。 (2)用 C 語言就可以打開和關(guān)閉中斷。 (3)處理器支持中斷,并且能產(chǎn)生定時中斷(通常在 10 至 100Hz 之間)。 (4)處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。 (5)處理器有將堆棧指針和其它 CPU 寄存器讀出和存儲到堆棧或內(nèi)存中的指令。 四.論述題 1 .論述 NC/OSII控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖 答:NC/OSII控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖
29、如下圖所示 DORhlAN1 id IlHurr.kLTftskStatM 在任一給定的時刻,任務(wù)的狀態(tài)一定是在這五種狀態(tài)之一。 (1)睡眠態(tài)(DORMANT):指任務(wù)駐留在程序空間之中,還沒有交給仙 C/OSH 管理。一個任務(wù)可以通過調(diào)用 OSTaskDel()返回到睡眠態(tài),或通過調(diào)用該函數(shù)讓另一個任務(wù)進入睡眠態(tài)。 (2)就緒態(tài)(READY):當(dāng)任務(wù)一旦建立,這個任務(wù)就進入就緒態(tài)準備運行。把任務(wù)交給卜C/OSn是通過調(diào)用下述兩個函數(shù)之一:OSTaskCreate(或 OSTaskCreateExt() 運行態(tài)(RUN):調(diào)用 OSStart()可以啟動多任務(wù)。OSStart()函數(shù)運行進入就
30、緒態(tài)的優(yōu)先級最高的任務(wù)。 等待狀態(tài)(WAITING):正在運行的任務(wù)可以通過調(diào)用兩個函數(shù)之一將自身延遲一段時間,這兩個函數(shù)是 OSTimeDly()或 OSTimeDlyHMSM()。這個任務(wù)于是進入等待狀態(tài),等待這段時間過去,下一個優(yōu)先級最高的、并進入了就緒態(tài)的任務(wù)立刻被賦予了 CPU 的控制權(quán)。 正在運行的任務(wù)期待某一事件的發(fā)生時也要等待,手段是調(diào)用以下 3 個函數(shù)之一: OSSemPend()OSMboxPend(),或 OSQPend(調(diào)用后任務(wù)進入了等待狀態(tài)(WAITING)。 (5)中斷狀態(tài)(ISR):正在運行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)了,或者pC/OSR 將中斷關(guān)了
31、。被中斷了的任務(wù)就進入了中斷服務(wù)態(tài)汕WU;,;, 0:-FfrFiaiI 依“Mill M 曲山.i SHfwocla 弊 I :產(chǎn) TliMh 資1ngi (ISR) 2,論述世 C/OSII的核心數(shù)據(jù)結(jié)構(gòu)任務(wù)控制塊(OS_TCBs) 答: 任務(wù)控制塊(OS_TCBs)是叱C/OSH 的核心數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的 CPU 使用權(quán)被剝奪時,NC/OSII用它來保存該任務(wù)的狀態(tài)。當(dāng)任務(wù)重新得到 CPU 使用權(quán)時,任務(wù)控制塊能確保任務(wù)從當(dāng)時被中斷白那一點絲毫不差地繼續(xù)執(zhí)行。OS_TCBs 全部駐留在 RAM 中。一旦任務(wù)建立了,任務(wù)控制塊 OS_TCBs 將被賦值。pC/OS-II任務(wù)控制塊數(shù)據(jù)結(jié)構(gòu)定
32、義如下: typedefstructos_tcb OS_STK*OSTCBStkPtr; #ifOS_TASK_CREATE_EXT_EN void*OSTCBExtPtr; OS_STK*OSTCBStkBottom; INT32UOSTCBStkSize; INT16UOSTCBOpt; INT16UOSTCBId; #endif structos_tcb*OSTCBNext; structos_tcb*OSTCBPrev; #if(OS_Q_EN&(OS_MAX_QS=2)|OS_MBOX_EN|OS_SEM_ENOS_EVENT*OSTCBEventPtr; #endif #i
33、f(OS_Q_EN&(OS_MAX_QS=2)|OS_MBOX_EN void*OSTCBMsg; #endif INT16UOSTCBDIy; INT8UOSTCBStat; INT8UOSTCBPrio; INT8UOSTCBX; INT8UOSTCBY; INT8UOSTCBBitX; INT8UOSTCBBitY; #ifOS_TASK_DEL_EN BOOLEANOSTCBDelReq; #endif OS_TCB; 標中: OSTCBStkPtr 是指向當(dāng)前任務(wù)棧頂?shù)闹羔槨?OSTCBExtPtr 指向用戶定義的任務(wù)控制塊擴展。 OSTCBStkBottom 是指向任務(wù)棧底的指針。 OSTCBStkSize 存有棧中可容納的指針元數(shù)目而不是用字節(jié)(Byte)表示的棧容量總數(shù)。 OSTCBId 用于存儲任務(wù)的識別碼。 OSTCBNext 和 OSTCBPrev用于任務(wù)控制塊 OS_TCBs 的
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車輛中介合同范本
- 掛扣公司合同范本
- 市場專員合同范本
- 借款合同范本法院范本
- 建設(shè)施工工程委托代建合同范本
- 電商外包服務(wù)合同范本
- 酒水采購合同范本
- 機房改造項目合同范本
- 餐飲合伙合同范本
- 中介租房合同范本
- 【人教版化學(xué)】必修1 知識點默寫小紙條(答案背誦版)
- 危險化學(xué)品目錄(2024版)
- 腦卒中-腦卒中的康復(fù)治療
- 疫情統(tǒng)計學(xué)智慧樹知到答案2024年浙江大學(xué)
- 手機歸屬地表格
- 人教版八年級數(shù)學(xué)第二學(xué)期教學(xué)計劃+教學(xué)進度表
- IEST-RP-CC0053
- 模糊邏輯與模糊推理
- 玉米收割機的設(shè)計(機械CAD圖紙)
- 更高更妙的物理《摩擦角與自鎖現(xiàn)象》精講
- 金屬補償器計算大全
評論
0/150
提交評論