




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng)程序設(shè)計(jì)練習(xí)題;1uC/OS-II是一個(gè)簡(jiǎn)潔、易用的 基于優(yōu)先級(jí)的嵌入式搶占式多任務(wù)實(shí)時(shí)內(nèi)核。2任務(wù)是一個(gè)執(zhí)行體,包括:代碼、控制塊和任務(wù)堆棧。3.任務(wù)代碼可是無(wú)返回的無(wú)窮循環(huán),也可以是一次性代碼,但最后一定要?jiǎng)h除執(zhí)行操作的一次性代碼;4因?yàn)閡c/os-ii總是運(yùn)行進(jìn)入就緒狀態(tài)中任務(wù)優(yōu)先級(jí)最高,下面該哪個(gè)任務(wù)運(yùn)行,這個(gè)工作就由調(diào)度器進(jìn)行切換調(diào)度操作來(lái)完成的;5任務(wù)級(jí)的調(diào)度是由函數(shù)OSSched()和函數(shù)OSIntExt()完成6任務(wù)級(jí)的調(diào)度是由函數(shù)OSSched()完成的,而【 中斷級(jí) 】的調(diào)度是由函數(shù)OSIntExt() 完成。對(duì)于OSSched(),它內(nèi)部調(diào)用的是OS_TASK_
2、SW()完成實(shí)際的調(diào)度;OSIntExt()內(nèi)部調(diào)用的是OSCtxSw() 實(shí)現(xiàn)調(diào)度。7 任務(wù)切換其實(shí)很簡(jiǎn)單,由如下2步完成:(1)將被掛起任務(wù)的處理器寄存器推入自己的任務(wù)堆棧。(2)然后將進(jìn)入就緒狀態(tài)的最高優(yōu)先級(jí)的任務(wù)的寄存器值從堆棧中恢復(fù)到寄存器中。8任務(wù)的5種狀態(tài)?!舅邞B(tài)(task dormat) 】:任務(wù)駐留于程序空間(rom或ram)中,暫時(shí)沒(méi)交給ucos-ii處理?!揪途w態(tài)(task ready)】:任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入了就緒態(tài)?!具\(yùn)行態(tài)(task running)】:調(diào)用OSStart()可以啟動(dòng)多任務(wù)。OSStart()函數(shù)只能調(diào)用一次,一旦調(diào)用,系統(tǒng)將運(yùn)行進(jìn)入就緒態(tài)
3、并且優(yōu)先級(jí)最高的任務(wù)?!镜却隣顟B(tài)(task waiting)】:正在運(yùn)行的任務(wù),通過(guò)延遲函數(shù)或pend(掛起)相關(guān)函數(shù)后,將進(jìn)入等待狀態(tài)?!局袛酄顟B(tài)(ISR running)】:正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)閉或者ucos-ii將中斷關(guān)閉。9【 不可剝奪型 】?jī)?nèi)核要求每個(gè)任務(wù)自我放棄CPU的所有權(quán)。不可剝奪型調(diào)度法也稱作合作型多任務(wù)調(diào)度法,各個(gè)任務(wù)彼此合作共享一個(gè)CPU。10當(dāng)系統(tǒng)響應(yīng)時(shí)間很重要時(shí),要使用【 可剝奪型 】?jī)?nèi)核。最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。11使用可剝奪型內(nèi)核時(shí),應(yīng)用程序不應(yīng)直接使用不可重入型函數(shù)。調(diào)用不可重入型函數(shù)時(shí),要滿足互斥條件,這一
4、點(diǎn)可以用【 互斥型信號(hào)量 】來(lái)實(shí)現(xiàn)。(可重入(reentrant)函數(shù)可以由多于一個(gè)任務(wù)并發(fā)使用,而不必?fù)?dān)心數(shù)據(jù)錯(cuò)誤。相反, 不可重入(non-reentrant)函數(shù)不能由超過(guò)一個(gè)任務(wù)所共享,除非能確保函數(shù)的互斥(或者使用信號(hào)量,或者在代碼的關(guān)鍵部分禁用中斷)??芍厝牒瘮?shù)可以在任意時(shí)刻被中斷,稍后再繼續(xù)運(yùn)行,不會(huì)丟失數(shù)據(jù)??芍厝牒瘮?shù)要么使用本地變量,要么在使用全局變量時(shí)保護(hù)自己的數(shù)據(jù)。)12【 可重入型 】函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞。13可重入型函數(shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會(huì)丟失??芍厝胄秃瘮?shù)或者只使用【 局部變量 】,即變量保存在C
5、PU寄存器中或堆棧中。如果使用全局變量,則要對(duì)全局變量予以【 保護(hù) 】。14每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)【 越高 】。15C/OS-初始化是通過(guò)調(diào)用系統(tǒng)函數(shù)【OSIint()】實(shí)現(xiàn)的,完成C/OS-所有的變量和數(shù)據(jù)結(jié)構(gòu)的初始化。16多任務(wù)的啟動(dòng)是用戶通過(guò)調(diào)用【OSStart()】實(shí)現(xiàn)的。然而,啟動(dòng)C/OS-之前,用戶至少要建立一個(gè)應(yīng)用【任務(wù)】。17 C/OS-的參數(shù)配置文件名為【OS_CFG.H】。18 刪除任務(wù),是說(shuō)任務(wù)將返回并處于【休眠狀態(tài)】,并不是說(shuō)任務(wù)的代碼被刪除了,只是任務(wù)的代碼不再被C/OS-調(diào)用。19C/OS-要求用戶提供【定時(shí)中斷】來(lái)實(shí)現(xiàn)延時(shí)與超時(shí)控制等功能
6、。20定時(shí)中斷也叫做【時(shí)鐘節(jié)拍】,它應(yīng)該每秒發(fā)生10至100次。21. 時(shí)鐘節(jié)拍的實(shí)際頻率是由用戶的應(yīng)用程序決定的。時(shí)鐘節(jié)拍的頻率越高,系統(tǒng)的負(fù)荷就【越重】。22C/OS-II中的信號(hào)量由兩部分組成:一個(gè)是信號(hào)量的【計(jì)數(shù)值】,它是一個(gè)16位的無(wú)符號(hào)整數(shù)(0 到65,535之間);另一個(gè)是由等待該信號(hào)量的任務(wù)組成的【等待任務(wù)表】。 用戶要在OS_CFG.H中將OS_SEM_EN開(kāi)關(guān)量常數(shù)置成【 1 】 ,這樣C/OS-II才能支持信號(hào)量。23. C/OS-II中表示當(dāng)前已經(jīng)創(chuàng)建的任務(wù)數(shù)全局變量名為:【 OSTaskCtr 】。24. C/OS-II中表示當(dāng)前內(nèi)核運(yùn)行的標(biāo)記全局變量名為:【 OSR
7、unning 】。25在使用OSTaskCreate創(chuàng)建任務(wù)時(shí),若需要TaskData作偽參數(shù)傳遞給任務(wù)Task,并從任務(wù)Task中獲得傳入的字符參數(shù)值,請(qǐng)?jiān)谙旅妗?】填上合適的代碼。char TaskData=?A?;OSTaskCreate(Task, 【(void *)& TaskData 】, &TaskStk0TASK_STK_SIZE- 1, 1);void Task (void *pdata)char value = 【 *(char *)pdata 】;for (;) OSSemPend(RandomSem, 0, &err);y = (int) (*(
8、char *)pdata - 'A');OSSemPost(RandomSem); PC_DispChar(10, 25, value, DISP_FGND_WHITE +DISP_BGND_BLUE);OSTimeDly(1);26. 在C/OS-II在任務(wù)Task1中使用郵箱函數(shù)OSMboxPost()發(fā)送字符;而在Task2中接收OSMboxPost()字符, 請(qǐng)?jiān)谙旅妗?】填上合適的代碼。void Task1 (void *data)char txmsg;INT8U err;txmsg = 'A'for (;) OSMboxPost(TxMbox, 【
9、(void *)&txmsg】); /* Send message toTask2*/OSMboxPend(AckMbox, 0, &err);txmsg+; if (txmsg = 'Z') txmsg = 'A'void Task5 (void *data)char *rxmsg;INT8U err;data = data;for (;) rxmsg = 【(char *)】OSMboxPend(TxMbox, 0, &err);PC_DispChar(70, 18, *rxmsg, DISP_FGND_YELLOW +DISP_BG
10、ND_BLUE);OSMboxPost(AckMbox, (void *)1); 27. 在Task1中使用消息隊(duì)列OSQPend()函數(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_YELLO
11、W +DISP_BGND_BLUE);OSTimeDlyHMSM(0, 0, 0, 100);void Task2 (void *pdata)char msg20;pdata = pdata;strcpy(&msg0, " Hello World!");for (;) OSQPost(MsgQueue, 【(void *)】&msg0);OSTimeDlyHMSM(0, 0, 0, 500);28 C/OS-II操作系統(tǒng)使用OSSchedLock()函數(shù)和OSSchedUnlock()函數(shù)進(jìn)行鎖定(不允許任務(wù)級(jí)調(diào)度)和解鎖(重新允許任務(wù)級(jí)調(diào)度)調(diào)度器,在用戶
12、應(yīng)用程序中,OSSchedLock()和OSSchedUnlock()是 【 成對(duì)出現(xiàn)的 】,否則系統(tǒng)有可能出錯(cuò)。29代碼的臨界段代碼的臨界段也稱為臨界區(qū),指處理時(shí)不可分割的代碼。30資源任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)備;資源也可以是一個(gè)變量,一個(gè)結(jié)構(gòu)或一個(gè)數(shù)組等。31共享資源可以被一個(gè)以上任務(wù)使用的資源叫做共享資源。32任務(wù)一個(gè)任務(wù),也稱作一個(gè)線程,是一個(gè)簡(jiǎn)單的程序,該程序可以認(rèn)為CPU完全只屬該程序自己。典型地、每個(gè)任務(wù)都是一個(gè)無(wú)限的循環(huán)。33任務(wù)切換指Context Switch,其含義是CPU寄存器內(nèi)容切換。當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí),它保存正在運(yùn)行任務(wù)
13、的當(dāng)前狀態(tài)(Context),即CPU寄存器中的全部?jī)?nèi)容。34內(nèi)核多任務(wù)系統(tǒng)中,內(nèi)核負(fù)責(zé)管理各個(gè)任務(wù),或者說(shuō)為每個(gè)任務(wù)分配CPU時(shí)間,并且負(fù)責(zé)任務(wù)之間的通訊。內(nèi)核提供的基本服務(wù)是任務(wù)切換。35調(diào)度(Scheduler)內(nèi)核的主要職責(zé)之一,就是要決定該輪到哪個(gè)任務(wù)運(yùn)行了。多數(shù)實(shí)時(shí)內(nèi)核是基于優(yōu)先級(jí)調(diào)度法的。36可剝奪型內(nèi)核最高優(yōu)先級(jí)的任務(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ù)被掛
14、起,優(yōu)先級(jí)高的那個(gè)任務(wù)開(kāi)始運(yùn)行。37. 任務(wù)基本信息內(nèi)涵(1) CPU中的PC寄存器:任務(wù)(程序)當(dāng)前執(zhí)行的位置;(2) CPU中的通用寄存器:任務(wù)當(dāng)前執(zhí)行代碼所涉及的臨時(shí)數(shù)據(jù);(3) CPU中的狀態(tài)寄存器:存儲(chǔ)當(dāng)前CPU的狀態(tài)。38. 任務(wù)切換任務(wù)切換是指從一個(gè)任務(wù)直接切換到另一個(gè)任務(wù),引起該次切換是由于某一個(gè)非中斷引起的事件或主動(dòng)放棄或調(diào)用節(jié)拍函數(shù)時(shí),使一個(gè)更高優(yōu)先級(jí)的任務(wù)處于就緒狀態(tài),暫停正在運(yùn)行著的任務(wù),轉(zhuǎn)而切換去執(zhí)行更高優(yōu)先級(jí)任務(wù);也可由中斷后,中斷退出時(shí)進(jìn)行任務(wù)調(diào)度,重新去執(zhí)行更高優(yōu)先級(jí)任務(wù)。39. 舉例說(shuō)明COS-II可移植型數(shù)據(jù)類型的定義方式答:因?yàn)椴煌奈⑻幚砥饔胁煌淖珠L(zhǎng),
15、C/OS-II的移植文件包括很多類型定義以確??梢浦残?。COS-II不使用C語(yǔ)言中的short,int,long等數(shù)據(jù)類型的定義,因?yàn)樗鼈兣c處理器類型有關(guān),隱含著不可移植性。C/OS-II代之以移植性強(qiáng)的整數(shù)數(shù)據(jù)類型,這樣,既直觀又可移植(該數(shù)據(jù)類型不依賴于編譯),舉例如下: typedef unsigned char BOOLEAN;typedef unsigned char INT8U;typedef signed char INT8S;typedef unsigned int INT16U;typedef signed int INT16S;typedef unsigned long I
16、NT32U;typedef signed long INT32S;40. COS-II如何定義全局變量?答:眾所周知,全局變量應(yīng)該是得到內(nèi)存分配且可以被其他模塊通過(guò)C語(yǔ)言中extern關(guān)鍵字調(diào)用的變量。因此,必須在 .C 和 .H 文件中定義。這種重復(fù)的定義很容易導(dǎo)致錯(cuò)誤。COS-II采用的方法只需用在頭文件中定義一次。 uC/OS_II.H 頭文件中包括以下定義全局宏定義:#ifdef OS_GLOBALS#define OS_EXT#else#define OS_EXT extern#endifOS_EXT INT32U OSIdleCtr;同時(shí),uCOS_II.H有中以下定義:#defi
17、ne OS_GLOBALS#include “includes.h”當(dāng)編譯器處理uCOS_II.C時(shí),它使得頭文件變成如下所示,因?yàn)镺S_EXT被設(shè)置為空。INT32U OSIdleCtr;這樣編譯器就會(huì)將這些全局變量分配在內(nèi)存中。當(dāng)編譯器處理其他.C文件時(shí),頭文件變成了如下的樣子,因?yàn)镺S_GLOBAL沒(méi)有定義,所以O(shè)S_EXT被定義為extern。extern INT32U OSIdleCtr;在這種情況下,不產(chǎn)生內(nèi)存分配,而任何 .C文件都可以使用這些變量。這樣的就只需在 .H 文件中定義一次就可以了。41. OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL(
18、)的含義及作用? 答:OS_ENTER_CRITICAL() :關(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ù)臨界段代碼。42基于PC的服務(wù)中如何測(cè)量PC_DisplayChar()的執(zhí)行時(shí)間?答:測(cè)量PC_DisplayChar()的執(zhí)行時(shí)間的代碼如下:INT16U time; /定義時(shí)間變量PC_ElapsedInit(); /時(shí)鐘初始化PC_ElapsedStart(); /開(kāi)始計(jì)時(shí)PC_DispChar(40, 24, ?A?
19、, DISP_FGND_WHITE); /執(zhí)行代碼time = PC_ElapsedStop(); /結(jié)束計(jì)時(shí)43uC/OS-II的任務(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ù)處理模型就是“
20、事件驅(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ā)送的事件。44 與共享資源打交道時(shí),使之滿足互斥條件最一般的方法包括哪些? 答:包括:關(guān)中斷、使用測(cè)試并置位指令、禁止做任務(wù)切換、利用信號(hào)量等。45. 描述利用C/OS_ 宏調(diào)用關(guān)中斷和開(kāi)中斷處理共享數(shù)據(jù)的示意性代碼程答:OS_ENTER_CRITICAL();/*在這里處理共享數(shù)據(jù)*/OS_EXIT_CRITICAL();46. 信號(hào)量的典型應(yīng)用包括哪些?答:信號(hào)量(Semaphores) 是一種約定機(jī)制,在多任務(wù)內(nèi)核中的典
21、型應(yīng)用包括:(1) 控制共享資源的使用權(quán)(滿足互斥條件);(2) 標(biāo)志某事件的發(fā)生(3) 使兩個(gè)任務(wù)的行為同步47對(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)。48.給出C/OS-中如何用信號(hào)量處理共享數(shù)據(jù)的示意代碼?答:通過(guò)獲得信號(hào)量處理共享數(shù)據(jù)的示意代碼如下:OS_EVENT *SharedDataSem;void Function (void)INT8U err;OSSemPend(Shared
22、DataSem, 0, &err);/*共享數(shù)據(jù)的處理在此進(jìn)行,(中斷是開(kāi)著的)*/OSSemPost(SharedDataSem);49.給出初始化和啟動(dòng)C/OS-的示意代碼。答:void main (void)OSInit(); /* 初始化uC/OS-II */.通過(guò)調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個(gè)任務(wù); .OSStart(); /* 開(kāi)始多任務(wù)調(diào)度!OSStart()永遠(yuǎn)不會(huì)返回 */ 50 描述建立任務(wù)OSTaskCreate()的函數(shù)原型。建立任務(wù)OSTaskCreate()的函數(shù)原型為:INT8U OSTaskCreate
23、(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í)。51任務(wù)可以是一個(gè)無(wú)限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉。 請(qǐng)給出示意代碼結(jié)構(gòu)。答:C/OS-描述的任務(wù)示意代碼必須是以下兩種結(jié)構(gòu)之一:void YourTask (void *pdata)for (;) /* 用戶代碼 */調(diào)用C/OS-的服務(wù)例程之一:OSMboxPend();OSQPend();OSS
24、emPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/* 用戶代碼 */或void YourTask (void *pdata)/* 用戶代碼 */OSTaskDel(OS_PRIO_SELF);52C/OS-任務(wù)管理提供哪些服務(wù)?答:C/OS-任務(wù)管理提供的服務(wù)包括:(1)建立任務(wù):OSTaskCreate()或OSTaskCreateExt();(2)刪除任務(wù):OSTaskDel();(3)請(qǐng)求刪除任務(wù):OSTaskDelReq();(4)改變?nèi)蝿?wù)的優(yōu)先級(jí):OSTa
25、skChangePrio();(5)掛起任務(wù):OSTaskSuspend();(6)恢復(fù)任務(wù):OSTaskResume();(7)獲得有關(guān)任務(wù)的信息:OSTaskQuery()。53C/OS-時(shí)間任務(wù)管理提供哪些服務(wù)?答:C/OS-時(shí)間任務(wù)管理提供的服務(wù)包括:(1) 任務(wù)延時(shí)函數(shù):OSTimeDly()(2) 按時(shí)分秒延時(shí)函數(shù):OSTimeDlyHMSM()(3) 讓處在延時(shí)期的任務(wù)結(jié)束延時(shí):OSTimeDlyResume()(4) 設(shè)置系統(tǒng)時(shí)間:OSTimeGet()(5) 獲得系統(tǒng)時(shí)間:OSTimeSet()54. C/OS-提供的數(shù)據(jù)共享和任務(wù)通訊的方法包括哪些?答:C/OS-提供的數(shù)據(jù)
26、共享和任務(wù)通訊的方法包括五種方法:(1) 利用宏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)量。(4) 郵箱。(5) 消息隊(duì)列。55對(duì)于事件控制塊進(jìn)行的一些通用包括哪些操作?答:對(duì)于事件控制塊進(jìn)行的一些通用操作包括:(1) 初始化一個(gè)事件控制塊: OSEventWaitListInit();(2) 使一個(gè)任務(wù)進(jìn)入就緒態(tài):OSEventTaskRdy();(3) 使一個(gè)任務(wù)進(jìn)入等待該事件的狀態(tài):OSEventTas
27、kWait();(4) 因?yàn)榈却瑫r(shí)而使一個(gè)任務(wù)進(jìn)入就緒態(tài):OSEventTO()。56C/OS-信號(hào)量提供哪些服務(wù)?答:C/OS-信號(hào)量提供的服務(wù)包括:(1) 建立一個(gè)信號(hào)量:OSSemCreate();(2) 等待一個(gè)信號(hào)量:OSSemPend();(3)發(fā)送一個(gè)信號(hào)量:OSSemPost();(4)無(wú)等待地請(qǐng)求一個(gè)信號(hào)量:OSSemAccept();(5)查詢一個(gè)信號(hào)量的當(dāng)前狀態(tài):OSSemQuery()。57C/OS-郵箱提供哪些服務(wù)?答:C/OS-郵箱提供的服務(wù)包括:(1)建立一個(gè)郵箱:OSMboxCreate();(2)等待一個(gè)郵箱中的消息:OSMboxPend();(3)發(fā)送一個(gè)
28、消息到郵箱中:OSMboxPost();(4)無(wú)等待地從郵箱中得到一個(gè)消息:OSMboxAccept();(5)查詢一個(gè)郵箱的狀態(tài):OSMboxQuery()58C/OS-消息隊(duì)列提供哪些服務(wù)?答:C/OS-消息隊(duì)列提供的服務(wù)包括:;(1)建立一個(gè)消息隊(duì)列:OSQCreate();(2)等待一個(gè)消息隊(duì)列中的消息:OSQPend(;(3)向消息隊(duì)列發(fā)送一個(gè)消息(FIFO):OSQ;(4)向消息隊(duì)列發(fā)送一個(gè)消息(LIFO):OSQ;(5)無(wú)等待地從一個(gè)消息隊(duì)列中取得消息:OSQA;(6)清空一個(gè)消息隊(duì)列:OSQFlush();(7)查詢一個(gè)消息答:C/OS-消息隊(duì)列提供的服務(wù)包括:(1)建立一個(gè)消
29、息隊(duì)列:OSQCreate();(2)等待一個(gè)消息隊(duì)列中的消息:OSQPend();(3)向消息隊(duì)列發(fā)送一個(gè)消息(FIFO):OSQPost();(4)向消息隊(duì)列發(fā)送一個(gè)消息(LIFO):OSQPostFront();(5)無(wú)等待地從一個(gè)消息隊(duì)列中取得消息:OSQAccept();(6)清空一個(gè)消息隊(duì)列:OSQFlush();(7)查詢一個(gè)消息隊(duì)列的狀態(tài):OSQQuery()。59C/OS-內(nèi)存管理提供哪些服務(wù)?答:C/OS-內(nèi)存管理提供的服務(wù)包括:(1) 建立一個(gè)內(nèi)存分區(qū):OSMemCreate();(2) 分配一個(gè)內(nèi)存塊:OSMemGet();(3) 釋放一個(gè)內(nèi)存塊:OSMemPut();
30、(4) 查詢一個(gè)內(nèi)存分區(qū)的狀態(tài):OSMemQuery()。60移植C/OS-時(shí),要使C/OS-正常運(yùn)行,處理器必須滿足哪些基本要求? 答:要使C/OS-正常運(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ǔ)到堆?;騼?nèi)存中的指令。61. 舉例描述C/OS-II基于任務(wù)的應(yīng)用程序設(shè)計(jì)方法 答:#include <includes.h>#
31、define TASK_STK_SIZE 128OS_STK AppStk_oneTASK_STK_SIZE; /任務(wù)one的堆棧 OS_STK AppStk_twoTASK_STK_SIZE; /任務(wù)two的堆棧 OS_STK AppStk_threeTASK_STK_SIZE; /任務(wù)three的堆棧static void App_one(void *p_arg); /任務(wù)one代碼static void App_two(void *p_arg); /任務(wù)two代碼static void App_three(void *p_arg); /任務(wù)three代碼void main(int arg
32、c, char *argv)OSInit(); /初始化系統(tǒng) /依次創(chuàng)建三個(gè)任務(wù)OSTaskCreate(App_one,NULL,(OS_STK*)&AppStk_oneTASK_STK_SIZE-1,(INT8U)10);OSTaskCreate(App_two,NULL,(OS_STK*)&AppStk_twoTASK_STK_SIZE-1,(INT8U)20);OSTaskCreate(App_three,NULL,(OS_STK*)&AppStk_threeTASK_STK_SIZE-1,(INT8U)30);OSStart(); 啟動(dòng)多任務(wù),將CPU控制權(quán)交
33、給系統(tǒng)62. C/OS-II調(diào)度算法原理及其和調(diào)度方式答:(1)優(yōu)先級(jí)調(diào)度算法原理為:給每一個(gè)任務(wù)分配一個(gè)惟一優(yōu)先級(jí),各優(yōu)先級(jí)用一個(gè)整形數(shù)值標(biāo)識(shí),某優(yōu)先級(jí)的值越大,其優(yōu)先級(jí)越低;某優(yōu)先級(jí)的值越小,其優(yōu)先級(jí)越高。也就是說(shuō),如果當(dāng)前操作系統(tǒng)準(zhǔn)備進(jìn)行調(diào)度,當(dāng)有兩個(gè)任務(wù)處于就緒狀態(tài), 系統(tǒng)將優(yōu)先執(zhí)行優(yōu)先級(jí)別高的任務(wù)。(2) C/OS-II操作系統(tǒng)有兩種調(diào)度方式:任務(wù)級(jí)任務(wù)調(diào)度和中斷級(jí)任務(wù)調(diào)度,C/OS-II操作系統(tǒng)在完成中斷后允許進(jìn)行新的調(diào)度。63. 描述C/OS-II操作系統(tǒng)的任務(wù)級(jí)任務(wù)調(diào)度OS_Sched()的主要功能答: (1)查找當(dāng)前就緒表中最高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)值;(2)調(diào)用OS_Sched
34、New()函數(shù)進(jìn)行任務(wù)切換,切換到新任務(wù)執(zhí)行。64從消息郵箱中讀取消息的方式及其函數(shù)原型 ?答:(1) 從消息郵箱中讀取消息的方式包括:非阻塞式讀取和阻塞式讀取兩種方式。(2) 非阻塞式讀取是指無(wú)論消息郵箱中是否有數(shù)據(jù),讀取操作也不阻塞,直接返回,顯然,如果有數(shù)據(jù),將讀取出來(lái),如果沒(méi)有數(shù)據(jù),將讀取為NULL。 其函數(shù)原型為:void *OSMboxAccept (OS_EVENT *pevent)(3) 阻塞式讀取是指在消息郵箱中有數(shù)據(jù)時(shí),直接讀取出來(lái);如果沒(méi)有數(shù)據(jù),則使當(dāng)前任務(wù)進(jìn)入等待狀態(tài),系統(tǒng)執(zhí)行調(diào)度程序執(zhí)行新的任務(wù),當(dāng)下一次消息到來(lái)時(shí)將激活等待表中的最高優(yōu)先級(jí)任務(wù),從而使該任務(wù)進(jìn)入就緒狀
35、態(tài)。為了避免任務(wù)一直處于等待狀態(tài)(所等待的資源一直未分配),可以設(shè)置一個(gè)等待的時(shí)間范圍,當(dāng)超過(guò)該延遲時(shí),則直接返回。其函數(shù)原型為:void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)65. 論述C/OS-控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖答:C/OS-控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖如下圖所示。在任一給定的時(shí)刻,任務(wù)的狀態(tài)一定是在這五種狀態(tài)之一。(1) 睡眠態(tài)(DORMANT):指任務(wù)駐留在程序空間之中,還沒(méi)有交給C/OS-管理。一個(gè)任務(wù)可以通過(guò)調(diào)用OSTaskDel()返回到睡眠態(tài),或通過(guò)調(diào)用該函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)。(2) 就緒態(tài)(R
36、EADY):當(dāng)任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行。把任務(wù)交給C/OS-是通過(guò)調(diào)用下述兩個(gè)函數(shù)之一:OSTaskCreate()或OSTaskCreateExt()。(3) 運(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ù)可以通過(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ā)
37、生時(shí)也要等待,手段是調(diào)用以下3個(gè)函數(shù)之一:OSSemPend(),OSMboxPend(),或OSQPend()。調(diào)用后任務(wù)進(jìn)入了等待狀態(tài)(WAITING)。(5) 中斷狀態(tài)(ISR): 正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)了,或者C/OS-將中斷關(guān)了。被中斷了的任務(wù)就進(jìn)入了中斷服務(wù)態(tài)(ISR)。66. 論述C/OS-的核心數(shù)據(jù)結(jié)構(gòu)任務(wù)控制塊(OS_TCBs)答:任務(wù)控制塊(OS_TCBs)是C/OS-的核心數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的CPU使用權(quán)被剝奪時(shí),C/OS-用它來(lái)保存該任務(wù)的狀態(tài)。當(dāng)任務(wù)重新得到CPU使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差地繼續(xù)執(zhí)行。OS_TCB
38、s全部駐留在RAM中。一旦任務(wù)建立了,任務(wù)控制塊OS_TCBs將被賦值。C/OS-II任務(wù)控制塊數(shù)據(jù)結(jié)構(gòu)定義如下:typedef struct os_tcb OS_STK *OSTCBStkPtr;#if OS_TASK_CREATE_EXT_ENvoid *OSTCBExtPtr;OS_STK *OSTCBStkBottom;INT32U OSTCBStkSize;INT16U OSTCBOpt;INT16U OSTCBId;#endifstruct os_tcb *OSTCBNext;struct os_tcb *OSTCBPrev;#if (OS_Q_EN && (OS_
39、MAX_QS >= 2) | OS_MBOX_EN | OS_SEM_EN OS_EVENT *OSTCBEventPtr;#endif#if (OS_Q_EN && (OS_MAX_QS >= 2) | OS_MBOX_ENvoid *OSTCBMsg;#endifINT16U OSTCBDly;INT8U OSTCBStat;INT8U OSTCBPrio;INT8U OSTCBX;INT8U OSTCBY;INT8U OSTCBBitX;INT8U OSTCBBitY;#if OS_TASK_DEL_ENBOOLEAN OSTCBDelReq;#endif O
40、S_TCB;其中:OSTCBStkPtr是指向當(dāng)前任務(wù)棧頂?shù)闹羔?。OSTCBExtPtr 指向用戶定義的任務(wù)控制塊擴(kuò)展。OSTCBStkBottom是指向任務(wù)棧底的指針。OSTCBStkSize存有棧中可容納的指針元數(shù)目而不是用字節(jié)(Byte)表示的棧容量總數(shù)。OSTCBId用于存儲(chǔ)任務(wù)的識(shí)別碼。OSTCBNext和OSTCBPrev用于任務(wù)控制塊OS_TCBs的雙重鏈接。 OSTCBEventPtr是指向事件控制塊的指針。OSTCBMsg是指向傳給任務(wù)的消息的指針。OSTCBStat是任務(wù)的狀態(tài)字。OSTCBPrio是任務(wù)優(yōu)先級(jí)。OSTCBDelReq是一個(gè)布爾量,用于表示該任務(wù)是否需要?jiǎng)h除
41、。OSTCBX, OSTCBY, OSTCBBitX和 OSTCBBitY用于加速任務(wù)進(jìn)入就緒態(tài)的過(guò)程或進(jìn)入等待事件發(fā)生狀態(tài)的過(guò)程。3論述事件控制塊ECB數(shù)據(jù)結(jié)構(gòu)答:C/OS-II通過(guò)uCOS_II.H 中定義的OS_EVENT數(shù)據(jù)結(jié)構(gòu)來(lái)維護(hù)一個(gè)事件控制塊的所有信息。該事件控制塊ECB數(shù)據(jù)結(jié)構(gòu)的定義如下:typedef struct void *OSEventPtr; /* 指向消息或者消息隊(duì)列的指針 */ INT8U OSEventTblOS_EVENT_TBL_SIZE; /* 等待任務(wù)列表 */ INT16U OSEventCnt; /* 計(jì)數(shù)器(當(dāng)事件是信號(hào)量時(shí)) */ INT8U O
42、SEventType; /* 時(shí)間類型 */INT8U OSEventGrp; /* 等待任務(wù)所在的組 */ OS_EVENT;其中:OSEventPtr指針: 只有在所定義的事件是郵箱或者消息隊(duì)列時(shí)才使用。當(dāng)所定義的事件是郵箱時(shí),它指向一個(gè)消息,而當(dāng)所定義的事件是消息隊(duì)列時(shí),它指向一個(gè)數(shù)據(jù)結(jié)構(gòu).OSEventTbl 和 OSEventGrp: 兩者包含的是系統(tǒng)中處于就緒狀態(tài)的任務(wù)。OSEventCnt:當(dāng)事件是一個(gè)信號(hào)量時(shí),用于信號(hào)量的計(jì)數(shù)器。OSEventType:定義了事件的具體類型。67論述C/OS-II內(nèi)存的管理的內(nèi)存控制塊數(shù)據(jù)結(jié)構(gòu)答:為了便于內(nèi)存的管理,在C/OS-II中使用;內(nèi)存
43、控制塊的數(shù)據(jù)結(jié)構(gòu)定義如下:;typedefstruct;void*OSMemAddr;;void*OSMemFreeList;;INT32UOSMemBlkSize;;INT32UOSMemNBlks;;INT32UOSMemNFree;;OS_MEM;;其中:;OSMemAddr是指向內(nèi)存分區(qū)起始地答:為了便于內(nèi)存的管理,在C/OS-II中使用內(nèi)存控制塊(memory control blocks)的數(shù)據(jù)結(jié)構(gòu)來(lái)跟蹤每一個(gè)內(nèi)存分區(qū),系統(tǒng)中的每個(gè)內(nèi)存分區(qū)都有它自己的內(nèi)存控制塊。內(nèi)存控制塊的數(shù)據(jù)結(jié)構(gòu)定義如下:typedef struct void *OSMemAddr;void *OSMemFre
44、eList;INT32U OSMemBlkSize;INT32U OSMemNBlks;INT32U OSMemNFree; OS_MEM;其中:OSMemAddr是指向內(nèi)存分區(qū)起始地址的指針。OSMemFreeList是指向下一個(gè)空閑內(nèi)存控制塊或者下一個(gè)空閑的內(nèi)存塊的指針。OSMemBlkSize是內(nèi)存分區(qū)中內(nèi)存塊的大小,是用戶建立該內(nèi)存分區(qū)時(shí)指定的。OSMemNBlks是內(nèi)存分區(qū)中總的內(nèi)存塊數(shù)量,也是用戶建立該內(nèi)存分區(qū)時(shí)指定的。OSMemNFree是內(nèi)存分區(qū)中當(dāng)前可以得空閑內(nèi)存塊數(shù)量。68、啟動(dòng)µC/OS-II任務(wù)的函數(shù)是_ OSStart( )_。69、OSTaskCreate
45、(void(*task)(void*pd),void * pdata,OS_STK * ptos,INT8U prio)功能是_創(chuàng)建任務(wù)_。70、µC/OS-II用來(lái)記錄任務(wù)的堆棧指針、任務(wù)的當(dāng)前狀態(tài)、任務(wù)的優(yōu)先級(jí)別的數(shù)據(jù)結(jié)構(gòu)稱為任務(wù)控制塊(OS_TCB)。71、µC/OS-II有兩種調(diào)度器,一種是任務(wù)級(jí)的調(diào)度器;另一種是中斷級(jí)的調(diào)度器。72、void OSTimeDly(INT16U ticks)中參數(shù)ticks是指_定時(shí)計(jì)數(shù)器確定的時(shí)間段,又稱節(jié)拍_。73、OSTimeDly()或OSTimeDlyHMSM( )的作用是_延時(shí)操作_。74、如果OSEventGrp的值是
46、01101000(二進(jìn)制),而對(duì)應(yīng)的OSUnMapTblOSEventGrp值為3,如果.OSEventTbl3的值是11100100(二進(jìn)制),OSUnMapTblOSEventTbl3的值為2,則處于等待狀態(tài)的任務(wù)的最高優(yōu)先級(jí)是3×8+226。75、能防止出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象的信號(hào)叫做互斥型信號(hào)量。76、消息郵箱是能在任務(wù)之間傳遞消息的指針的數(shù)據(jù)結(jié)構(gòu)。77、µC/OS-II的任務(wù)狀態(tài)有5個(gè)狀態(tài);分別是:1)睡眠狀態(tài);2)就緒狀態(tài);3)運(yùn)行狀態(tài);4)等待狀態(tài);5)中斷服務(wù)狀態(tài)。78、從任務(wù)的存儲(chǔ)結(jié)構(gòu)來(lái)看,µC/OS-II的任務(wù)由三個(gè)組成部分構(gòu)成,其三部分為:1)任
47、務(wù)程序代碼;2)任務(wù)堆棧;3)任務(wù)控制塊。79、µC/OS-II任務(wù)優(yōu)先級(jí)最多可建立64級(jí),其中設(shè)定級(jí)為最高級(jí)。80、操作消息隊(duì)列時(shí)向指針數(shù)組中插入消息指針有2種方式,它們是: 先進(jìn)先出(FIFO)方式和后進(jìn)先出(LIFO)方式。81、µC/OS-II任務(wù)的代碼結(jié)構(gòu)是( C )。A) 對(duì)象結(jié)構(gòu);B)數(shù)據(jù)結(jié)構(gòu);C)一個(gè)帶有臨界段的無(wú)限循環(huán);D)表結(jié)構(gòu)。82、µC/OS-II的任務(wù)控制塊是采用( B )結(jié)構(gòu)。A)一條鏈表;B)兩條鏈表;C)三條鏈表;D)四條鏈表;83、µC/OS-II中指向當(dāng)前正在運(yùn)行的任務(wù)指針為( B )。A)OSTCBList B) O
48、STCBCur C)OSTCBFreeList D) OSEVENTList84、µC/OS-II中空任務(wù)控制鏈表的創(chuàng)建是由( B )函數(shù)實(shí)現(xiàn)的。A)OSTCBInit( ) B) OSInit( ) C)OSTaskCreate( ) D) OSStart( )85、解決任務(wù)優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象的方法是建立( D )A)消息郵箱 B)信號(hào)量 C)消息隊(duì)列 D) 互斥型信號(hào)量86、變量OSRdyGrp有作用是( C )?A) 記錄就緒任務(wù)的分組信息 B)記錄就緒任務(wù)優(yōu)先級(jí) C)記錄就緒表分組后組內(nèi)有否就緒信息 C)記錄就緒任務(wù)是否就緒87、請(qǐng)求信號(hào)量函數(shù)是( D )。A)OSFlagPen
49、d() B) OSMboxPend() C)OSQPend() D) OSSemPend( )88、µC/OS-II中OSTCBDly變量是按( C )計(jì)算進(jìn)行的。A)秒 B)毫秒 C)節(jié)拍 D)微秒89、什么是代碼的臨界區(qū)?答:代碼的監(jiān)界區(qū)是指處理時(shí)不可分割的代碼,運(yùn)行這些代碼不允許被打斷。一旦這部分代碼開(kāi)始執(zhí)行,則不允許任何中斷打入。中斷不調(diào)用任何臨界區(qū)的代碼或不訪問(wèn)任何臨界區(qū)使用的共享資源時(shí),這個(gè)中斷是可能可以執(zhí)行。為確保臨界區(qū)代碼的執(zhí)行,在進(jìn)入臨界區(qū)之前要關(guān)中斷,而臨界區(qū)代碼執(zhí)行完成以后要立即開(kāi)中斷。90、什么是嵌入式操作系統(tǒng)?為何要使用嵌入式操作系統(tǒng)?答:運(yùn)用在嵌入式系統(tǒng)上
50、的實(shí)時(shí)操作系統(tǒng),具有事件驅(qū)動(dòng)和任務(wù)(進(jìn)程)調(diào)度功能,且在有限時(shí)隙內(nèi)能完成事件的響應(yīng)和任務(wù)(進(jìn)程)的切換,能可靠、實(shí)時(shí)、靈活地管理嵌入式系統(tǒng)上的各種資源和任務(wù)。使用嵌入式操作系統(tǒng),能方便實(shí)時(shí)應(yīng)用軟件的開(kāi)發(fā)和有機(jī)地整合,能有效地管理和協(xié)調(diào)各項(xiàng)工作,因此是開(kāi)發(fā)和運(yùn)行非常重要的環(huán)境。91、請(qǐng)寫(xiě)出從任務(wù)就緒表中獲取優(yōu)先級(jí)別最高的就緒任務(wù)優(yōu)先級(jí)prio的代碼段:答: y =OSUnMapTalOSRdyGrp;x=OSUnMapTalOSRdyTbly;prio = (y<<3)+x;或y=OSUnMapTblOSRdyGrp;prio = (INT8U)(y<<3)+OSUnMa
51、pTblOSRdyTbly);92、初始化函數(shù)OSInit( )對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化時(shí),請(qǐng)舉出4個(gè)主要是創(chuàng)建內(nèi)容?答:主要?jiǎng)?chuàng)建的內(nèi)容是 (1)空的內(nèi)任務(wù)控制塊鏈表(OSTCBFreeList);(2)空的事件控制塊鏈表(OSEventFreeList);(3)空的消息隊(duì)列控制塊鏈表(OSQFreeList);(4)空的標(biāo)志控制塊鏈表(OSFlagFreeList);(5)存儲(chǔ)控制塊鏈表(OSMemFreeList);93、簡(jiǎn)述µC/OS-II的中斷過(guò)程?答:系統(tǒng)接收到中斷請(qǐng)求后,如果這時(shí)CPU處于中斷允許狀態(tài)(即中斷是開(kāi)放的),系統(tǒng)就會(huì)中止正在運(yùn)行的當(dāng)前任務(wù),而按照中斷向量的指向轉(zhuǎn)而
52、去運(yùn)行中斷服務(wù)子程序;當(dāng)中斷服務(wù)子程序的運(yùn)行結(jié)束后,系統(tǒng)將會(huì)根據(jù)情況返回到被中止的任務(wù)繼續(xù)運(yùn)行,或者轉(zhuǎn)向運(yùn)行另一個(gè)具有更高優(yōu)先級(jí)別的就緒任務(wù)。94、為什么µC/OS-II的中斷服務(wù)子程序中不能請(qǐng)求信號(hào)量?答:這是由于OSSemPend()的執(zhí)行同時(shí)要執(zhí)行OSEventTaskWait(),而中斷服務(wù)子程序并非任務(wù)代碼,也就是非任務(wù)請(qǐng)求,顯然請(qǐng)求的實(shí)體不合理,導(dǎo)致程序執(zhí)行錯(cuò)誤。95、任務(wù)級(jí)切換和中斷級(jí)任務(wù)切換為什么沒(méi)有使用同一切換函數(shù)? 答:中斷切換時(shí)要保護(hù)的操作已在中斷服務(wù)子程序中完成,因此OSIntCtxSw( )中不包含保護(hù)代碼,即無(wú)需壓棧操作,而任務(wù)級(jí)切換OSCtxSw( )就
53、多一些保護(hù)代碼段。96、描述µC/OS-II中的信號(hào)量結(jié)構(gòu)組成?答:µC/OS-II中的信號(hào)量由兩部分組成:一個(gè)是信號(hào)量的計(jì)數(shù)值,它是一個(gè)16位的無(wú)符號(hào)整數(shù)(0 到65,535之間);另一個(gè)是由等待該信號(hào)量的任務(wù)組成的等待任務(wù)表。用戶要在OS_CFG.H中將OS_SEM_EN開(kāi)關(guān)量常數(shù)置成1,這樣µC/OS-II才能支持信號(hào)量。97、互斥型信號(hào)量是如何防止優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象出現(xiàn)的?答:互斥型信號(hào)量是一個(gè)二值信號(hào)量,其事件控制塊中,成員OSEventCnt被分成了低8位和高8位兩部分,低8位用來(lái)存放信號(hào)值(該值為0xFF時(shí),信號(hào)為有效,否則信號(hào)為無(wú)效),高8位用來(lái)存放避
54、免出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象而提升的優(yōu)先級(jí)別prio。當(dāng)任務(wù)占有一個(gè)獨(dú)占式共享資源時(shí),事件控制塊的成員OSEventCnt低8位就不再是0xFF,如果任務(wù)的優(yōu)先級(jí)不是最高的,此時(shí),就要將成員OSEventCnt高8位作為本任務(wù)的prio,以使任務(wù)的優(yōu)先級(jí)此時(shí)最高,防止優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象出現(xiàn)。 98、什么叫消息郵箱?答:在多任務(wù)間需要在任務(wù)與任務(wù)之間傳遞一個(gè)數(shù)據(jù)的方式,該數(shù)據(jù)是在存儲(chǔ)空間開(kāi)出一個(gè)緩沖區(qū)的內(nèi)容,建立緩沖區(qū)指針,并能傳遞指針的數(shù)據(jù)結(jié)構(gòu)稱為消息郵箱。99、請(qǐng)描述標(biāo)志組中的OSFlagFlags和等待任務(wù)鏈表OSFlagNodeFlags作用?答:OSFlagFlags提供信號(hào)量集的所有信號(hào)狀態(tài),每一個(gè)信號(hào)占據(jù)一個(gè)二進(jìn)制位。當(dāng)所占位為1時(shí),表示此信號(hào)量集中該信號(hào)量有效,否則該信號(hào)量無(wú)效。從而辨別信號(hào)量集中信號(hào)量的分布特點(diǎn)。而等待任務(wù)鏈表OSFlagNod
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廢物處理與回收合同書(shū)
- 農(nóng)村土地承包合同管理與風(fēng)險(xiǎn)防控
- 教師勞動(dòng)合同
- 標(biāo)準(zhǔn)域名轉(zhuǎn)讓合同書(shū)范本
- 挖機(jī)租賃業(yè)務(wù)合同
- 小額借款合同示例
- 糧食儲(chǔ)備庫(kù)租賃合同標(biāo)準(zhǔn)文本
- 家庭護(hù)理保姆服務(wù)合同細(xì)則
- 木材加工企業(yè)的設(shè)備更新與技術(shù)改造考核試卷
- 木制品三維建模與虛擬現(xiàn)實(shí)考核試卷
- 油田設(shè)備租賃行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃行業(yè)投資戰(zhàn)略研究報(bào)告(2024-2030)
- 中國(guó)古典風(fēng)格設(shè)計(jì)
- 市政綜合項(xiàng)目工程竣工項(xiàng)目驗(yàn)收總結(jié)報(bào)告自評(píng)
- 2019譯林版高中英語(yǔ)全七冊(cè)單詞總表
- T-BJCC 1003-2024 首店、首發(fā)活動(dòng)、首發(fā)中心界定標(biāo)準(zhǔn)
- 園區(qū)宣傳方案
- 銀行承兌匯票和商業(yè)承兌匯票課件
- 《園林生態(tài)學(xué)》課件
- 初中化學(xué)實(shí)驗(yàn)報(bào)告單(上)
- 貨物質(zhì)量與安全控制方案
- 高中物理多普勒效應(yīng)練習(xí)題
評(píng)論
0/150
提交評(píng)論