




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、文檔 ucos-ii 操作系統(tǒng)復(fù)習(xí)大綱 一.填空題 1. uC/OS-ll 是一個(gè)簡(jiǎn)潔、易用的 基于優(yōu)先級(jí)的嵌入式 【搶占式】多任務(wù) 實(shí)時(shí)核。 2. 任務(wù)是一個(gè)無(wú)返回的無(wú)窮循環(huán)。uc/os-ii 總是運(yùn)行進(jìn)入就緒狀態(tài)的【 最高 優(yōu)先級(jí)】的任務(wù)。 3. 因?yàn)?uc/os-ii 總是運(yùn)行進(jìn)入就緒狀態(tài)的最高優(yōu)先級(jí)的任務(wù)。 所以,確定哪個(gè) 任務(wù)優(yōu)先級(jí)最高,下面該哪個(gè)任務(wù)運(yùn)行,這個(gè)工 作就是由【調(diào)度器 (schedule)來(lái)完成的。 4. 【任務(wù)級(jí)】的調(diào)度是由函數(shù) OSSched(完成的,而【中斷級(jí)】的調(diào)度是 由函數(shù)OSIntExt()完成。對(duì)于 OSSched(),它部調(diào)用的是【OS_TASK_SW(
2、)】 完成實(shí)際的調(diào)度;OSIn tExt()部調(diào)用的是【OSCtxSw()】實(shí)現(xiàn)調(diào)度。 5. 任務(wù)切換其實(shí)很簡(jiǎn)單,由如下 2 步完成: (1) 將被掛起任務(wù)的處理器寄存器推入自己的【 任務(wù)堆?!?。 (2) 然后將進(jìn)入就緒狀態(tài)的最高優(yōu)先級(jí)的任務(wù)的寄存器值從堆棧中恢復(fù)到 【寄存器】中。 6. 任務(wù)的 5 種狀態(tài)。 【睡眠態(tài)(task dormat)】:任務(wù)駐留于程序空間(rom 或 ram)中,暫時(shí)沒(méi)交給 ucos-ii 處理。 【就緒態(tài)(task ready】:任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入了就緒態(tài)。 【運(yùn)行態(tài)(task running)】:調(diào)用 OSStart ()可以啟動(dòng)多任務(wù)。OSStart
3、 ()函 數(shù)只能調(diào)用一次,一旦調(diào)用,系統(tǒng)將運(yùn)行進(jìn)入就緒態(tài)并且優(yōu)先級(jí)最高的任務(wù)。 【等待狀態(tài)(task waiti ng)】:正在運(yùn)行的任務(wù),通過(guò)延遲函數(shù)或 pend (掛起) 相關(guān)函數(shù)后,將進(jìn)入等待狀態(tài)。 【中斷狀態(tài)(ISR running)】:正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將 中斷文檔 關(guān)閉或者 ucos-ii 將中斷關(guān)閉。 7. 【不可剝奪型】核要求每個(gè)任務(wù)自我放棄 CPU 的所有權(quán)。不可剝奪型調(diào)度 法也稱作合作型多任務(wù),各個(gè)任務(wù)彼此合作共享一個(gè) CPU 8. 當(dāng)系統(tǒng)響應(yīng)時(shí)間很重要時(shí),要使用【 可剝奪型】核。最高優(yōu)先級(jí)的任務(wù)一 旦就緒,總能得到 CPU 的控制權(quán)。 9. 使用可剝
4、奪型核時(shí),應(yīng)用程序不應(yīng)直接使用不可重入型函數(shù)。調(diào)用不可重入 型函數(shù)時(shí),要滿足互斥條件,這一點(diǎn)可以用【 互斥型信號(hào)量】來(lái)實(shí)現(xiàn)。 10. 【可重入型】函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞。 11. 可重入型函數(shù)任何時(shí)候都可以被中斷, 一段時(shí)間以后又可以運(yùn)行,而相應(yīng)數(shù) 據(jù)不會(huì)丟失??芍厝胄秃瘮?shù)或者只使用【 局部變量】,即變量保存在 CPU 寄 存器中或堆棧中。如果使用全局變量,則要對(duì)全局變量予以【 保護(hù)】。 12. 每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)【 越咼】 13.卩 C/OSH初始化是通過(guò)調(diào)用系統(tǒng)函數(shù)【 數(shù)據(jù)結(jié)構(gòu)的初始化。 14多任務(wù)的啟動(dòng)是用戶通過(guò)調(diào)用【 至少要建立
5、一個(gè)應(yīng)用【任務(wù)】。 15. 卩 C/OS-n的參數(shù)配置文件名為【OS_CFG】 16. 刪除任務(wù),是說(shuō)任務(wù)將返回并處于【休眠狀態(tài)】,并不是說(shuō)任務(wù)的代碼被刪 除了,只是任務(wù)的代碼不再被 卩/os- n調(diào)用。 17. 卩 C/OSn要求用戶提供【定時(shí)中斷】來(lái)實(shí)現(xiàn)延時(shí)與超時(shí)控制等功能。 18 .定時(shí)中斷也叫做【時(shí)鐘節(jié)拍】,它應(yīng)該每秒發(fā)生 10 至 100 次。 19. 時(shí)鐘節(jié)拍的實(shí)際頻率是由用戶的應(yīng)用程序決定的。 時(shí)鐘節(jié)拍的頻率越高,系 統(tǒng)的負(fù)荷就【越重】。 20. pC/OS-ll 中的信號(hào)量由兩部分組成:一個(gè)是信號(hào)量的 【計(jì)數(shù)值】,它是一個(gè) 16 位的無(wú)符號(hào)整數(shù)(0 到 65,535 之間);另
6、一個(gè)是由等待該信號(hào)量的任務(wù)組成的 【等待任務(wù)表】。用戶要在 OS_CFGH 中將 OS_SEM_EN 開(kāi)關(guān)量常數(shù)置成【1】, 這樣pC/OS-II 才能支持信號(hào)量。 OSIint()】實(shí)現(xiàn)的,完成 卩 C/OSH所有的變量和 OSStart()】實(shí)現(xiàn)的。然而,啟動(dòng) 卩 c/OSn之前,用戶 文檔 21. 卩 C/OS 中表示當(dāng)前已經(jīng)創(chuàng)建的任務(wù)數(shù)全局變量名為:【 OSTaskCtr】 21.卩 C/OS 中表示當(dāng)前核運(yùn)行的標(biāo)記全局變量名為: 22. 在使用 OSTaskCreate 創(chuàng)建任務(wù)時(shí),若需要 TaskData 作偽參數(shù)傳遞給任務(wù) Task, 并從任務(wù) Task 中獲得傳入的字符參數(shù)值,
7、請(qǐng)?jiān)谙旅妗?】填上合適的代碼。 char TaskData=A OSTaskCreate(Task,【( (void 冷& TaskData 】,&TaskStkOTASK_STK_SIZE -1, 1); void Task (void *pdata) char value = 【*(char *)pdata 】; for (;) OSSemPe nd(Ra ndomSem, 0, &err); y = (i nt) (*(char *)pdata - A); OSSemPost(Ra ndomSem); PC_DispChar(10, 25, value, DISP
8、_FGND_WHITE + DISP_BGND_BLUE); OSTimeDly(1); 23. 在卩 C/OS 在任務(wù) Task1 中使用函數(shù) OSMboxPost()發(fā)送字符;而在 Task2 中接收 OSMboxPost ()字符,請(qǐng)?jiān)谙旅妗?】填上合適的代碼。 void Task1 (void *data) char txmsg; INT8U err; txmsg = A; for (;) OSMboxPost(TxMbox,【(void *)&txmsg 】);/* Send message to Task2*/ OSMboxPe nd(AckMbox, 0, &er
9、r); txmsg+; if (txmsg = Z) txmsg = A; void Task5 (void *data) OSR unning 】。 文檔 char *rxmsg; INT8U err; data = data; for (;) rxmsg =【(char *)】OSMboxPend(TxMbox, 0, &err); PC_DispChar(70, 18, *rxmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE); OSMboxPost(AckMbox, (void *)1); 24. 在 Task1 中使用消息隊(duì)列 OSQPe nd (
10、)函數(shù)接收消息“ Hello World! ”,而 在Task2 中使用消息隊(duì)列 OSQPost ()函數(shù)發(fā)送消息“ Hello World!”,請(qǐng)?jiān)谙旅?【 】填上合適的代碼. void Task1 (void *pdata) char *msg; INT8U err; pdata = pdata; for (;) msg =【(char *)】OSQPend(MsgQueue, 0, &err); PC_DispStr(70, 13, msg, DISP_FGND_YELLOW + DISP_BGND_BLUE); OSTimeDlyHMSM(0, 0, 0, 100); void
11、 Task2 (void *pdata) char msg20; pdata = pdata; strcpy( &m sg0, Hello World!); for (;) OSQPost(MsgQueue,【(void *)】&msg0); OSTimeDlyHMSM(0, 0, 0, 500); 名詞解釋 1 代碼的臨界段 代碼的臨界段也稱為臨界區(qū),指處理時(shí)不可分割的代碼 2資源 任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)備;資源也 可以是一個(gè)變量,一個(gè)結(jié)構(gòu)或一個(gè)數(shù)組等。 3 共享資源 可以被一個(gè)以上任務(wù)使用的資源叫做共享資源 文檔 4. 任務(wù) 一個(gè)任務(wù),也稱
12、作一個(gè)線程,是一個(gè)簡(jiǎn)單的程序,該程序可以認(rèn)為 CPU 完 全只屬該程序自己。典型地、每個(gè)任務(wù)都是一個(gè)無(wú)限的循環(huán)。 5. 任務(wù)切換 指 Con text Switch,其含義是 CPU 寄存器容切換。當(dāng)多任務(wù)核決定運(yùn)行另外 的任務(wù)時(shí),它保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài)(Context),即 CPU 寄存器中的全 部容。 6. 核 多任務(wù)系統(tǒng)中,核負(fù)責(zé)管理各個(gè)任務(wù),或者說(shuō)為每個(gè)任務(wù)分配 CPU 時(shí)間, 并且負(fù)責(zé)任務(wù)之間的通訊。核提供的基本服務(wù)是任務(wù)切換。 7. 調(diào)度(Schedule) 核的主要職責(zé)之一,就是要決定該輪到哪個(gè)任務(wù)運(yùn)行了。多數(shù)實(shí)時(shí)核是基于 優(yōu)先級(jí)調(diào)度法的。 8. 可剝奪型核 最高優(yōu)先級(jí)的任
13、務(wù)一旦就緒,總能得到 CPU 的控制權(quán)。當(dāng)一個(gè)運(yùn)行著的任 務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的 CPU 使用權(quán)就被剝奪 了,或者說(shuō)被掛起了,那個(gè)高優(yōu)先級(jí)的任務(wù)立刻得到了 CPU 的控制權(quán)。如果是 中斷服務(wù)子程序使一個(gè)高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài), 中斷完成時(shí),中斷了的任務(wù) 被掛起,優(yōu)先級(jí)高的那個(gè)任務(wù)開(kāi)始運(yùn)行。 三.簡(jiǎn)答題 1.舉例說(shuō)明 QOS-II 可移植型數(shù)據(jù)類型的定義方式 答:因?yàn)椴煌奈⑻幚砥饔胁煌淖珠L(zhǎng), pC/OS-II 的移植文件包括很多類型 定義以確??梢浦残?。PCOS-II 不使用 C 語(yǔ)言中的 short,int,long 等數(shù)據(jù)類型的定 義,因?yàn)樗鼈兣c處理器類型有
14、關(guān),隱含著不可移植性。pC/OS-II 代之以移植性強(qiáng) 的整數(shù)數(shù)據(jù)類型,這樣,既直觀又可移植(該數(shù)據(jù)類型不依賴于編譯),舉例如下: typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef un sig ned int INT16U; typedef sig ned int INT16S; typedef unsigned long INT32U; typedef signed long INT32S; 2. (jCOS-II如何定義全局變量? 答:眾所周知,全局
15、變量應(yīng)該是得到存分配且可以被其他模塊通過(guò) C 語(yǔ)言中 extern 關(guān)鍵字調(diào)用的變量。因此,必須在 .C 和.H 文件中定義。這種重復(fù)的定 文檔 義很容易導(dǎo)致錯(cuò)誤。QOS-II 采用的方法只需用在頭文件中定義一次。 uC/OS_II.H 頭文件中包括以下定義全局宏定義: #ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT extern #en dif OS_EXT INT32U OSIdleCtr; 同時(shí),uCOS_II.H 有中以下定義: #define OS_GLOBALS #in clude “ in cludes.h ” 當(dāng)編譯器
16、處理 uCOS_II.C 時(shí),它使得頭文件變成如下所示,因?yàn)?OS_EXT 被 設(shè)置為空。 INT32U OSIdleCtr; 這樣編譯器就會(huì)將這些全局變量分配在存中。當(dāng)編譯器處理其他 .C 文件時(shí), 頭文件變成了如下的樣子,因?yàn)?OS_GLOBAL 沒(méi)有定義,所以 OS_EXT 被定義 為 extern。 extern INT32U OSIdleCtr; 在這種情況下,不產(chǎn)生存分配,而任何 .C 文件都可以使用這些變量。這樣 的就只需在.H 文件中定義一次就可以了。 3. OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()的含義及作用? 答: OS_ENTER_C
17、RITICAL()關(guān)中斷; OS_EXIT_CRITICAL()開(kāi)中斷。 關(guān)中斷和開(kāi)中斷是為了保護(hù)臨界段代碼。 用戶的應(yīng)用代碼可以使用這兩個(gè)宏來(lái)開(kāi)中斷和關(guān)中斷。很明顯,關(guān)中斷會(huì)影 響中斷延遲,所以要特別小心。用戶還可以用信號(hào)量來(lái)保護(hù)臨界段代碼。 4.基于 PC 的服務(wù)中如何測(cè)量 PC_DisplayChar()的執(zhí)行時(shí)間? 答: 測(cè)量 PC_DisplayChar()的執(zhí)行時(shí)間的代碼如下: INT16U time; PC_El apsedI ni t(); PC_ElapsedStart(); PC_DispChar(40, 24, /定義時(shí)間變量 /時(shí)鐘初始化 /開(kāi)始計(jì)時(shí) A , DISP_
18、FGND_WHITE);執(zhí)行代time = PC_ElapsedStop(); /結(jié)束計(jì)時(shí) 5. uC/OS-ll 的任務(wù)框架 答: void task_xxx(void *pData) /*該任務(wù)的初始化工作*/ /*進(jìn)入該任務(wù)的死循環(huán)*/ while(1) 文檔 每個(gè)用戶的任務(wù)都必須符合事件驅(qū)動(dòng)的編程模型,即 uC/OS-II 的應(yīng)用程序 都必須是“事件驅(qū)動(dòng)的編程模型”。一個(gè)任務(wù)首先等待一個(gè)事件的發(fā)生,事件可 以是系統(tǒng)中斷發(fā)出的,也可以是其它任務(wù)發(fā)出的,又可以是任務(wù)自身等待的時(shí)間 片。當(dāng)一個(gè)事件發(fā)生了,任務(wù)再作相應(yīng)處理,處理結(jié)束后又開(kāi)始等待下一個(gè)事件 的發(fā)生。如此周而復(fù)始的任務(wù)處理模型就是
19、“事件驅(qū)動(dòng)的編程模型”。 事件驅(qū)動(dòng) 模型也涵蓋了中斷驅(qū)動(dòng)模型,uC/OS-II 事件歸根結(jié)底來(lái)自三個(gè)方面: (1) 中斷服務(wù)函數(shù)發(fā)送的事件 (2) 系統(tǒng)延時(shí)時(shí)間到所引起的 (3) 其它任務(wù)發(fā)送的事件。 6. 與共享資源打交道時(shí),使之滿足互斥條件最一般的方法包括哪些? 答: 包括:關(guān)中斷、使用測(cè)試并置位指令、禁止做任務(wù)切換、利用信號(hào)量等。 7.描述利用 序。 答: 卩 C/OSH宏調(diào)用關(guān)中斷和開(kāi)中斷處理共享數(shù)據(jù)的示意性代碼程 OS_ENTER_CRITICAL(); /*在這里處理共享數(shù)據(jù)*/ OS_EXIT_CRITICAL(); 8信號(hào)量的典型應(yīng)用包括哪些? 答: 信號(hào)量(Semaphore
20、s)是一種約定機(jī)制,在多任務(wù)核中的典型應(yīng)用包括: (1) 控制共享資源的使用權(quán)(滿足互斥條件); (2) 標(biāo)志某事件的發(fā)生 (3) 使兩個(gè)任務(wù)的行為同步 9. 對(duì)信號(hào)量只能實(shí)施哪三種操作? 答: 一般地說(shuō),對(duì)信號(hào)量只能實(shí)施三種操作: (1) 初始化(INITIALIZE),也可稱作建立(CREATE); (2) 等信號(hào)(WAIT)也可稱作掛起(PEND); (3) 給信號(hào)(SIGNAL)或發(fā)信號(hào)(POST)。 10. 給出卩 C/OSH中如何用信號(hào)量處理共享數(shù)據(jù)的示意代碼? 答: 通過(guò)獲得信號(hào)量處理共享數(shù)據(jù)的示意代碼如下: OS_EVENT *SharedDataSem; void Fun c
21、ti on (void) INT8U err; OSSemPe nd(SharedDataSem, 0, &err); 文檔 /*共享數(shù)據(jù)的處理在此進(jìn)行,(中斷是開(kāi)著的)*/ OSSemPost(SharedDataSem); 11. 給出初始化和啟動(dòng) 卩 C/OSU的示意代碼。 答: void main (void) OSInit(); /* 初始化 uC/OS-ll */ 通過(guò)調(diào)用 OSTaskCreate(或 OSTaskCreateExt(創(chuàng)建至少一個(gè)任務(wù); OSStart(); /*開(kāi)始多任務(wù)調(diào)度!OSStart()永遠(yuǎn)不會(huì)返回*/ 12. 描述建立任務(wù) OSTaskCrea
22、te(的函數(shù)原型。 答: 建立任務(wù) OSTaskCreate(的函數(shù)原型為: INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio) 其中, task:任務(wù)代碼的指針; pdata:當(dāng)任務(wù)開(kāi)始執(zhí)行時(shí)傳遞給任務(wù)的參數(shù)的指針; ptos:分配給任務(wù)的堆棧的棧頂指針; prio:分配給任務(wù)的優(yōu)先級(jí)。 13. 任務(wù)可以是一個(gè)無(wú)限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉 請(qǐng)給出示意代碼結(jié)構(gòu)。 答:Q/OS- U描述的任務(wù)示意代碼必須是以下兩種結(jié)構(gòu)之一 : void YourTask (void
23、*pdata) for (;) /*用戶代碼*/ 調(diào)用 uC/OS-U的服務(wù)例程之一: OSMboxPe nd(); OSQPe nd(); OSSemPe nd(); OSTaskDel(OS_PRIO_SELF); OSTaskSuspe nd(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM(); /*用戶代碼*/ 文檔 或 void YourTask (void *pdata) /*用戶代碼*/ OSTaskDel(OS_PRIO_SELF); 14. 卩 C/OSU任務(wù)管理提供哪些服務(wù)? 答:卩 C/OSU任務(wù)管理提供的服務(wù)包括: (1) 建立任務(wù):
24、OSTaskCreate(或 OSTaskCreateExt(; (2) 刪除任務(wù):OSTaskDel(); (3) 請(qǐng)求刪除任務(wù):OSTaskDelReq(); (4) 改變?nèi)蝿?wù)的優(yōu)先級(jí):OSTaskCha ngePrio。 (5) 掛起任務(wù):OSTaskSuspe nd() (6) 恢復(fù)任務(wù):OSTaskResume。 (7) 獲得有關(guān)任務(wù)的信息:OSTaskQuery。 15. 卩 C/OSU時(shí)間任務(wù)管理提供哪些服務(wù)? 答:卩 C/OSU時(shí)間任務(wù)管理提供的服務(wù)包括: (1) 任務(wù)延時(shí)函數(shù):OSTimeDly() (2) 按時(shí)分秒延時(shí)函數(shù):OSTimeDlyHMSM() (3) 讓處在延時(shí)
25、期的任務(wù)結(jié)束延時(shí): OSTimeDlyResume() (4) 設(shè)置系統(tǒng)時(shí)間:OSTimeGet() (5) 獲得系統(tǒng)時(shí)間:OSTimeSet() 16. 卩 C/OSU提供的數(shù)據(jù)共享和任務(wù)通訊的方法包括哪些? 答:卩 C/OSU提供的數(shù)據(jù)共享和任務(wù)通訊的方法包括五種方法: (1) 禾I用宏 OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()來(lái)關(guān)閉中斷和 打開(kāi)中斷。 (2) 利用函數(shù) OSSchedLock()和 OSSchekUnlock()對(duì)C/OS-II 中的任務(wù)調(diào)度函 數(shù)上鎖和開(kāi)鎖。 (3) 信號(hào)量。文檔 。 消息隊(duì)列。 17. 答: 對(duì)于事件控制塊進(jìn)行的一
26、些通用包括哪些操作? 對(duì)于事件控制塊進(jìn)行的一些通用操作包括: (1) 初始化一個(gè)事件控制塊:OSEventWaitListInit(); (2) 使一個(gè)任務(wù)進(jìn)入就緒態(tài): OSEve ntTaskRdy(); (3) 使一個(gè)任務(wù)進(jìn)入等待該事件的狀態(tài): OSEve ntTaskWait(); 18. 答: 卩 C/OSU信號(hào)量提供哪些服務(wù)? 卩 C/OSU信號(hào)量提供的服務(wù)包括: (1) 建立一個(gè)信號(hào)量:OSSemCreateO (2) 等待一個(gè)信號(hào)量:OSSemPe nd() (3) 發(fā)送一個(gè)信號(hào)量:OSSemPost() (4) 無(wú)等待地請(qǐng)求一個(gè)信號(hào)量: OSSemAccept(); (5) 查
27、詢一個(gè)信號(hào)量的當(dāng)前狀19. 答: 卩 C/OSU提供哪些服務(wù)? 卩 C/OSU提供的服務(wù)包括: (1) 建立一個(gè):OSMboxCreate(); (2) 等待一個(gè)中的消息:OSMboxPend(); (3) 發(fā)送一個(gè)消息到中:OSMboxPost(); (4) 無(wú)等待地從中得到一個(gè)消息:OSMboxAccept(); (5) 查詢一個(gè)的狀態(tài):OSMboxQuery() 20. 答: 卩 C/OSU消息隊(duì)列提供哪些服務(wù)? 卩 C/OSU消息隊(duì)列提供的服務(wù)包括: (1) 建立一個(gè)消息隊(duì)列:OSQCreateO; (2) 等待一個(gè)消息隊(duì)列中的消息:OSQPend(); (3) 向消息隊(duì)列發(fā)送一個(gè)消息
28、(FIFO): OSQPost(); (4) 向消息隊(duì)列發(fā)送一個(gè)消息(LIFO): OSQPostFront(); (5) 無(wú)等待地從一個(gè)消息隊(duì)列中取得消息: OSQAccept(); (6) 清空一個(gè)消息隊(duì)列:OSQFIush(); (7) 查詢一個(gè)消息隊(duì)列的狀態(tài):OSQQuery()。 21. 答: 卩 C/OSU存管理提供哪些服務(wù)? 卩 C/OSU存管理提供的服務(wù)包括: (1) 建立一個(gè)存分區(qū):OSMemCreateO; (2) 分配一個(gè)存塊:OSMemGet(); (3) 釋放一個(gè)存塊:OSMemPut(); (4) 查詢一個(gè)存分區(qū)的狀態(tài):OSMemQuery()。 文檔 22 移植
29、pC/OS- U時(shí), 要使 pC/OS-U正常運(yùn)行, 處理器必須滿足哪些基本要求? 答:要使PC/OS-n正常運(yùn)行,處理器必須滿足以下要求: (1) 處理器的 C 編譯器能產(chǎn)生可重入代碼。 (2) 用 C 語(yǔ)言就可以打開(kāi)和關(guān)閉中斷。 (3) 處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在 10 至 100Hz 之間)。 (4) 處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。 (5) 處理器有將堆棧指針和其它 CPU 寄存器讀出和存儲(chǔ)到堆棧或存中的指 令。 四論述題 1. 論述p C/osn控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖 答:p c/osn控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖如下圖所示 在任一給定的時(shí)刻,任務(wù)
30、的狀態(tài)一定是在這五種狀態(tài)之一。 (1) 睡眠態(tài)(DORMANT ):指任務(wù)駐留在程序空間之中, 還沒(méi)有交給p C/OSn 管理。一個(gè)任務(wù)可以通過(guò)調(diào)用 OSTaskDel()返回到睡眠態(tài),或通過(guò)調(diào)用該 函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)。 (2) 就緒態(tài)(READY):當(dāng)任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行。把 任務(wù)交給 p C/OSn是通過(guò)調(diào)用下述兩個(gè)函數(shù)之一: OSTaskCreate(或 OSTaskCreateExt(。 運(yùn)行態(tài)(RUN):調(diào)用 OSStart()可以啟動(dòng)多任務(wù)。OSStart()函數(shù)運(yùn)行進(jìn)入就 緒態(tài)的優(yōu)先級(jí)最高的任務(wù)。 (4) 等待狀態(tài)(WAITING):正在運(yùn)行的任務(wù)可
31、以通過(guò)調(diào)用兩個(gè)函數(shù)之一將自 身延遲一段時(shí)間,這兩個(gè)函數(shù)是 OSTimeDly()或 OSTimeDlyHMSM()。這 個(gè)任務(wù)于是進(jìn)入等待狀態(tài),等待這段時(shí)間過(guò)去,下一個(gè)優(yōu)先級(jí)最高的、 并進(jìn)入了就緒態(tài)的任務(wù)立刻被賦予了 CPU 的控制權(quán)。正在運(yùn)行的任務(wù)期 待某一事件的發(fā)生時(shí)也要等待,手段是調(diào)用以下 3 個(gè)函數(shù)之一: OSSemPend() OSMboxPend(),或 OSQPend 調(diào)用后任務(wù)進(jìn)入了等待 狀態(tài)(WAITING )。 中斷狀態(tài)(ISR):正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān) 了,或者p c/OSn將中斷關(guān)了。被中斷了的任務(wù)就進(jìn)入了中斷服務(wù)態(tài) 0: I JTh-M KI
32、KIIRH杪 DORMAN1 id /Last QI訕酣訕酣hli OSrdMRMiinHj 而紳和小小而紳和小小-i S Hfwlcla OMW畀畀: FlfEun L I Ask Stum 文檔 (ISR) 2. 論述卩 C/OSH的核心數(shù)據(jù)結(jié)構(gòu)任務(wù)控制塊(OS_TCBs) 答: 任務(wù)控制塊(OS_TCBs)是卩 C/OSU的核心數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的 CPU 使用權(quán) 被剝奪時(shí),卩 C/OSU用它來(lái)保存該任務(wù)的狀態(tài)。當(dāng)任務(wù)重新得到 CPU 使用權(quán)時(shí), 任務(wù)控制塊能確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差地繼續(xù)執(zhí)行。 OS_TCBs 全部駐留在 RAM 中。一旦任務(wù)建立了,任務(wù)控制塊 OS_TCBs
33、 將被賦值。pC/OS-II 任務(wù)控制塊數(shù)據(jù)結(jié)構(gòu)定義如下: typedef struct os_tcb OS_STK *OSTCBStkPtr; #if OS_TASK_CREATE_EXT_EN void *OSTCBExtPtr; OS_STK *OSTCBStkBottom; INT32U OSTCBStkSize; INT16U OSTCBOpt; INT16U OSTCBId; #en dif struct os_tcb *OSTCBNext; struct os_tcb *OSTCBPrev; #if (OS_Q_EN & (OS_MAX_QS = 2) | OS_MBOX
34、_EN | OS_SEM_EN OS_EVENT *OSTCBEve ntPtr; #en dif #if (OS_Q_EN & (OS_MAX_QS = 2) | OS_MBOX_EN void *OSTCBMsg; #en dif INT16U OSTCBDly INT8U OSTCBSta INT8U OSTCBPri INT8U OSTCBX; INT8U OSTCBY; INT8U OSTCBBitX; INT8U OSTCBBit #if OS_TASK_DEL_EN BOOLEAN OSTCBDelReq; #en dif OS_TCB; 其中: OSTCBStkPtr 是指向當(dāng)前任務(wù)棧頂?shù)闹羔槨?OSTCBExtPtr 指向用戶定義的任務(wù)控制塊擴(kuò)展。 OSTCBStkBottom 是指向任務(wù)棧底的指針。 OSTCBStkSize 存有棧中可容納的指針元數(shù)目而不是用字節(jié)(Byte)表示的 棧容文檔 量總數(shù)。 OSTCBId 用于存儲(chǔ)任務(wù)的識(shí)別碼。 OSTCBNext
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人經(jīng)營(yíng)合伙合同范例
- 個(gè)人與房東租房合同范例
- 做環(huán)保合同范例
- 借款房產(chǎn)質(zhì)押合同范例
- 公司監(jiān)控安裝合同范本
- 農(nóng)戶自建樓房買賣合同范例
- 倉(cāng)儲(chǔ)維修合同范例
- 代理商招標(biāo)合同范例
- 農(nóng)村租賃小菜園合同范例
- 農(nóng)戶采購(gòu)種子合同范例
- 2025年南京城市職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- (統(tǒng)編版)2025年小升初語(yǔ)文模擬考試卷(附帶答案)
- 2024年廣東省中考數(shù)學(xué)試卷(附答案)
- 2025年高考時(shí)政考題及參考答案(100題)
- DeepSeek人工智能語(yǔ)言模型探索AI世界科普課件
- 《青春期心理健康指導(dǎo)》課件
- 第18講 等腰三角形 課件中考數(shù)學(xué)復(fù)習(xí)
- 全過(guò)程工程咨詢文件管理標(biāo)準(zhǔn)
- DB65T 8024-2024 建筑用室外氣象參數(shù)標(biāo)準(zhǔn)
- 《預(yù)制高強(qiáng)混凝土風(fēng)電塔筒生產(chǎn)技術(shù)規(guī)程》文本附編制說(shuō)明
- ICD-11(國(guó)際疾病分類第十一修訂)重點(diǎn)基礎(chǔ)知識(shí)總結(jié)-
評(píng)論
0/150
提交評(píng)論