




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1 .uC/OS-II是一個簡潔、易用的基于優先級的嵌入式【搶占式】多任務實時內核。2 .任務是一個無返回的無窮循環。uc/os-ii總是運行進入就緒狀態的【最高優先級】的任務。3 .因為uc/os-ii總是運行進入就緒狀態的最高優先級的任務。所以,確定哪個任務優先級最高,下面該哪個任務運行,這個工作就是由【調度器(scheduler)】來完成的。4 .【任務級】的調度是由函數OSSchedO完成的,而【中斷級】的調度是由函數OSIntExtO完成。對于OSSchedO,它內部調用的是【OS_TASK_SW()完成實際的調度;OSIntExtO內部調用的是【OSCtxSw()實現調度。5 .任
2、務切換其實很簡單,由如下2步完成:(1)將被掛起任務的處理器寄存器推入自己的【任務堆棧】。(2)然后將進入就緒狀態的最高優先級的任務的寄存器值從堆棧中恢復到【寄存器】中。6 .任務的5種狀態。【睡眠態(taskdormat)】:任務駐留于程序空間(rom或ram)中,暫時沒交給ucos-ii處理。【就緒態(taskready):任務一旦建立,這個任務就進入了就緒態。【運行態(taskrunning):調用OSStart()可以啟動多任務。OSStart()函數只能調用一次,一旦調用,系統將運行進入就緒態并且優先級最高的任務。【等待狀態(taskwaiting):正在運行的任務,通過延遲函數或p
3、end(掛起)相關函數后,將進入等待狀態。【中斷狀態(ISRrunning)】:正在運行的任務是可以被中斷的,除非該任務將中斷關閉或者ucos-ii將中斷關閉。7 .【不可剝奪型】內核要求每個任務自我放棄CPU的所有權。不可剝奪型調度法也稱作合作型多任務,各個任務彼此合作共享一個CPU。8 .當系統響應時間很重要時,要使用【可剝奪型)內核。最高優先級的任務一旦就緒,總能得到CPU的控制權。9 .使用可剝奪型內核時,應用程序不應直接使用不可重入型函數。調用不可重入型函數時,要滿足互斥條件,這一點可以用【互斥型信號量】來實現。10 .【可重入型)函數可以被一個以上的任務調用,而不必擔心數據的破壞。
4、11 .可重入型函數任何時候都可以被中斷,一段時間以后又可以運行,而相應數據不會丟失。可重入型函數或者只使用【局部變量】,即變量保存在CPU寄存器中或堆棧中。如果使用全局變量,則要對全局變量予以【保護】。12 .每個任務都有其優先級。任務越重要,賦予的優先級應【越高】。13 ."C/OSU初始化是通過調用系統函數【OSIintO】實現的,完成C/OS所所有的變量和數據結構的初始化。14 .多任務的啟動是用戶通過調用【OSStartO實現的。然而,啟動(1C/OSU之前,用戶至少要建立一個應用【任務】15 .(1C/OSU的參數配置文件名為【OS_CFG.H】。16 .刪除任務,是說任
5、務將返回并處于【休眠狀態】,并不是說任務的代碼被刪除了,只是任務的代碼不再被?C/OS-U調用。17 .?C/OS-U要求用戶提供【定時中斷】來實現延時與超時控制等功能。18 .定時中斷也叫做【時鐘節拍】,它應該每秒發生10至100次。19 .時鐘節拍的實際頻率是由用戶的應用程序決定的。時鐘節拍的頻率越高,系統的負荷就【越重】。20 .?C/OS-II中的信號量由兩部分組成:一個是信號量的【計數值】,它是一個16位的無符號整數(0到65,535之間);另一個是由等待該信號量的任務組成的【等待任務表】。用戶要在OS_CFG.H中將OS_SEM_EN開關量常數置成【1】,這樣?C/OS-II才能支
6、持信號量。21 .?C/OS-II中表示當前已經創建的任務數全局變量名為:OSTaskCtr】。22 .?C/OS-II中表示當前內核運行的標記全局變量名為:OSRunning】。23 .在使用OSTaskCreate創建任務時,若需要TaskData作偽參數傳遞給任務Task,并從任務Task中獲得傳入的字符參數值,請在下面【】填上合適的代碼。charTaskData='A;OSTaskCreate(Task,【(void*)&TaskData,&TaskStk0TASK_STK_SIZE-1,1);voidTask(void*pdata)charvalue=*(ch
7、ar*)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);24 .在?C/OS-II在任務Taskl中使用郵箱函數OSMboxPost()發送字符;而在Task2中接收OSMboxPost()字符,請在下面【】填上合適的代碼。voidTaskl(void*data)chartxmsg;INT8Uerr;txms
8、g='A'for(;)OSMboxPost(TxMbox,【(void*)&txmsg);/*SendmessagetoTask2*/OSMboxPend(AckMbox,0,&err);txmsg+;if(txmsg='Z')txmsg='A'voidTask5(void*data)char*rxmsg;INT8Uerr;data=data;for(;)rxmsg=【(char*)OSMboxPend(TxMbox,0,&err);PC_DispChar(70,18,*rxmsg,DISP_FGND_YELLOW+DIS
9、P_BGND_BLUE);OSMboxPost(AckMbox,(void*)1);25 .在Task1中使用消息隊列OSQPend()函數接收消息“HelloWorld!,而在Task2中使用消息隊列OSQPost()函數發送消息“HelloWorld!1在下面【】填上合適的代碼.voidTask1(void*pdata)char*msg;INT8Uerr;pdata=pdata;for(;)msg=(char*)OSQPend(MsgQueue,0,&err);PC_DispStr(70,13,msg,DISP_FGND_YELLOW+DISP_BGND_BLUE);OSTimeD
10、lyHMSM(0,0,0,100);voidTask2(void*pdata)charmsg20;pdata=pdata;strcpy(&msg0,"HelloWorld!");for(;)OSQPost(MsgQueue,(void*)&msg0);OSTimeDlyHMSM(0,0,0,500);1 .舉例說明?COS-II可移植型數據類型的定義方式答:因為不同的微處理器有不同的字長,?C/OS-II的移植文件包括很多類型定義以確保可移植性。?COS-II不使用C語言中的short,int,long等數據類型的定義,因為它們與處理器類型有關,隱含著不可移
11、植性。?C/OS-II代之以移植性強的整數數據類型,這樣,既直觀又可移植(該數據類型不依賴于編譯),舉例如下:typedefunsignedcharBOOLEAN;typedefunsignedcharINT8U;typedefsignedcharINT8S;typedefunsignedintINT16U;typedefsignedintINT16S;typedefunsignedlongINT32U;typedefsignedlongINT32S;2 .?COS-II如何定義全局變量?答:眾所周知,全局變量應該是得到內存分配且可以被其他模塊通過C語言中extern關鍵字調用的變量。因此,必
12、須在.C和.H文件中定義。這種重復的定義很容易導致錯誤。?COS-II采用的方法只需用在頭文件中定義一次。uC/OS_II.H頭文件中包括以下定義全局宏定義:#ifdefOS_GLOBALS#defineOS_EXT#else#defineOS_EXTextern#endifOS_EXTINT32UOSIdleCtr;同時,uCOS_II.H有中以下定義:#defineOS_GLOBALS#include“includes.h"當編譯器處理uCOS_II.C時,它使得頭文件變成如下所示,因為OS_EXT被設置為空。INT32UOSIdleCtr;這樣編譯器就會將這些全局變量分配在內存
13、中。當編譯器處理其他.C文件時,頭文件變成了如下的樣子,因為OS_GLOBAL沒有定義,所以OS_EXT被定義為extern。externINT32UOSIdleCtr;在這種情況下,不產生內存分配,而任何.C文件都可以使用這些變量。這樣的就只需在.H文件中定義一次就可以了。3 .OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的含義及作用?答:OS_ENTER_CRITICAL():關中斷;OS_EXIT_CRITICAL():開中斷。關中斷和開中斷是為了保護臨界段代碼。用戶的應用代碼可以使用這兩個宏來開中斷和關中斷。很明顯,關中斷會影響中斷延遲,所以要特別小心。
14、用戶還可以用信號量來保護臨界段代碼。4 .基于PC的服務中如何測量PC_DisplayChar()的執行時間?答:測量PC_DisplayChar()的執行時間的代碼如下:INT16Utime;/定義時間變量PC_ElapsedInit();時鐘初始化PC_ElapsedStartO;/開始計時PC_DispChar(40,24,'A',DISP_FGND_WHITE);撅行代碼time=PC_ElapsedStop();/結束計時5 .uC/OS-II的任務框架答:voidtask_xxx(void*pData)/*該任務的初始化工作*/*進入該任務的死循環*/while(1
15、)每個用戶的任務都必須符合事件驅動的編程模型,即uC/OS-II的應用程序都必須是事件驅動的編程模型”。一個任務首先等待一個事件的發生,事件可以是系統中斷發出的,也可以是其它任務發出的,又可以是任務自身等待的時間片。當一個事件發生了,任務再作相應處理,處理結束后又開始等待下一個事件的發生。如此周而復始的任務處理模型就是事件驅動的編程模型事件驅動模型也涵蓋了中斷驅動模型,uC/OS-II事件歸根結底來自三個方面:(1)中斷服務函數發送的事件(2)系統延時時間到所引起的(3)其它任務發送的事件。6 .與共享資源打交道時,使之滿足互斥條件最一般的方法包括哪些?答:包括:關中斷、使用測試并置位指令、禁
16、止做任務切換、利用信號量等。7 .描述利用gC/OS_n宏調用關中斷和開中斷處理共享數據的示意性代碼程序。答:OS_ENTER_CRITICAL();/*在這里處理共享數據*/OS_EXIT_CRITICAL();8 .信號量的典型應用包括哪些?答:信號量(Semaphores)是一種約定機制,在多任務內核中的典型應用包括:(1)控制共享資源的使用權(滿足互斥條件);(2)標志某事件的發生(3)使兩個任務的行為同步9 .對信號量只能實施哪三種操作?答:一般地說,對信號量只能實施三種操作:(1) 初始化(INITIALIZE),也可稱作建立(CREATE);(2) 等信號(WAIT)也可稱彳掛起
17、(PEND);(3) 給信號(SIGNAL)或發彳t號(POST)。10 .給出四C/OS中中如何用信號量處理共享數據的示意代碼?答:通過獲得信號量處理共享數據的示意代碼如下:OS_EVENT*SharedDataSem;voidFunction(void)INT8Uerr;OSSemPend(SharedDataSem,0,&err);/*共享數據的處理在此進行,(中斷是開著的)*/OSSemPost(SharedDataSem);11 .給出初始化和啟動gC/OS-n的示意代碼。答:voidmain(void)OSInitO;/*初始化uC/OS-II*/.通過調用OSTaskCr
18、eateO或OSTaskCreateExtO創建至少一個任務;.OSStartO;/*開始多任務調度!OSStart()永遠不會返回*/12 .描述建立任務OSTaskCreateO的函數原型。答:建立任務OSTaskCreateO的函數原型為:INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio)其中,task:任務代碼的指針;pdata:當任務開始執行時傳遞給任務的參數的指針;ptos:分配給任務的堆棧的棧頂指針;prio:分配給任務的優先級。13 .任務可以是一個無限的循環,也可以是在一次執行完畢后
19、被刪除掉。請給出示意代碼結構。答:?C/OS-描描述的任務示意代碼必須是以下兩種結構之一:voidYourTask(void*pdata)for(;)/*用戶代碼*/調用?C/OS-服的服務例程之一OSMboxPendO;OSQPendO;OSSemPend。;OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDlyO;OSTimeDlyHMSMO;/*用戶代碼*/或voidYourTask(void*pdata)/*用戶代碼*/OSTaskDel(OS_PRIO_SELF);14 .gc/osn任務管理提供哪些服務?答:gc/
20、os-任任務管理提供的服務包括:(1)建立任務:OSTaskCreate。或OSTaskCreateExt。;(2)刪除任務:OSTaskDelO;(3)請求刪除任務:OSTaskDelReqO;(4)改變任務的優先級:OSTaskChangePrioO;(5)掛起任務:OSTaskSuspend。;(6)恢復任務:OSTaskResumeO;(7)獲得有關任務的信息:OSTaskQueryO。15 .四C/OS時時間任務管理提供哪些服務?答:gC/OS-任時間任務管理提供的服務包括:(1) 任務延時函數:OSTimeDlyO(2) 按時分秒延時函數:OSTimeDlyHMSMO(3) 讓處在
21、延時期的任務結束延時:OSTimeDlyResume。(4)設置系統時間:OSTimeGetO(5)獲得系統時間:OSTimeSetO16 .四C/OS提提供的數據共享和任務通訊的方法包括哪些?答:gC/OS-提提供的數據共享和任務通訊的方法包括五種方法:(1)利用宏OS_ENTER_CRITICAL0和OS_EXIT_CRITICAL()來關閉中斷和打開中斷。(2)利用函數OSSchedLock。和OSSchekUnlock。又t?C/OS-II中的任務調度函數上鎖和開鎖。(3)信號量。(4)郵箱。(5)消息隊列。17 .對于事件控制塊進行的一些通用包括哪些操作?答:對于事件控制塊進行的一些
22、通用操作包括:(1) 初始化一個事件控制塊:OSEventWaitListInitO;(2) 使一個任務進入就緒態:OSEventTaskRdyO;(3) 使一個任務進入等待該事件的狀態:OSEventTaskWaitO;(4) 因為等待超時而使一個任務進入就緒態:OSEventTOO。18. (XC/OSn信號量提供哪些服務?答:gC/OS-信信號量提供的服務包括:(1) 建立一個彳t號量:OSSemCreate。;(2) 等待一個信號量:OSSemPendO;(3) 發送一個信號量:OSSemPostO;(4) 無等待地請求一個信號量:OSSemAcceptO;(5) 查詢一個信號量的當前
23、狀態:OSSemQueryO。19. gC/OSn郵箱提供哪些服務?答:gC/OS-提郵箱提供的服務包括:(1)建立一個郵箱:OSMboxCreate。;(2)等待一個郵箱中的消息:OSMboxPendO;(3)發送一個消息到郵箱中:OSMboxPostO;(4)無等待地從郵箱中得到一個消息:OSMboxAccept();(5)查詢一個郵箱的狀態:OSMboxQueryO20. 四c/osn消息隊列提供哪些服務?答:gC/OS-隊消息隊列提供的服務包括:(1)建立一個消息隊列:OSQCreateO;(2)等待一個消息隊列中的消息:OSQPendO;(3)向消息隊列發送一個消息(FIFO):OS
24、QPostO;(4)向消息隊列發送一個消息(LIFO):OSQPostFrontO;(5)無等待地從一個消息隊列中取得消息:OSQAcceptO;(6)清空一個消息隊列:OSQFlushO;(7)查詢一個消息隊列的狀態:OSQQueryO。21.四c/osn內存管理提供哪些服務?答:gC/OS-存內存管理提供的服務包括:(1) 建立一個內存分區:OSMemCreate。;(2) 分配一個內存塊:OSMemGetO;(3) 釋放一個內存塊:OSMemPutO;(4) 查詢一個內存分區的狀態:OSMemQueryO。22.移植?C/OS-時,要使?C/OS-正常運行,處理器必須滿足哪些基本要求?答
25、:要使?C/OS-正常運行,處理器必須滿足以下要求:(1)處理器的C編譯器能產生可重入代碼。(2)用C語言就可以打開和關閉中斷。(3)處理器支持中斷,并且能產生定時中斷(通常在10至100Hz之間)。(4)處理器支持能夠容納一定量數據(可能是幾千字節)的硬件堆棧。(5)處理器有將堆棧指針和其它CPU寄存器讀出和存儲到堆棧或內存中的指令。四.論述題1 .論述C/O&U控制下的任務狀態轉換圖答:UC/OS-控控制下的任務狀態轉換圖如下圖所示。在任一給定的時刻,任務的狀態一定是在這五種狀態之一。(1)睡眠態(DORMANT):指任務駐留在程序空間之中,還沒有交給"C/OS管管理。一
26、個任務可以通過調用OSTaskDel()返回到睡眠態,或通過調用該函數讓另一個任務進入睡眠態。(2)就緒態(READY):當任務一旦建立,這個任務就進入就緒態準備運行。把任務交給C/OS-U是通過調用下述兩個函數之一:OSTaskCreate。或OSTaskCreateExt。(3)運行態(RUN):調用OSStart()可以啟動多任務。OSStart()函數運行進入就緒態的優先級最高的任務。(4)等待狀態(WAITING):正在運行的任務可以通過調用兩個函數之一將自身延遲一段時間,這兩個函數是OSTimeDlyO或OSTimeDlyHMSMO。這個任務于是進入等待狀態,等待這段時間過去,下一
27、個優先級最高的、并進入了就緒態的任務立刻被賦予了CPU的控制權。正在運行的任務期待某一事件的發生時也要等待,手段是調用以下3個函數之一:OSSemPendO,OSMboxPend(),或OSQPendO。調用后任務進入了等待狀態(WAITING)。(5)中斷狀態(ISR):正在運行的任務是可以被中斷的,除非該任務將中斷關了,或者"C/OS-U將中斷關了。被中斷了的任務就進入了中斷服務態(ISR)。2 .論述"C/O&U的核心數據結構任務控制塊(OS_TCBs)答:任務控制塊(OS_TCBs)是C/OS-U的核心數據結構,當任務的CPU使用權被剝奪時,C/OS-來用它
28、來保存該任務的狀態。當任務重新得至ICPU使用權時,任務控制塊能確保任務從當時被中斷的那一點絲毫不差地繼續執行。OS_TCBs全部駐留在RAM中。旦任務建立了,任務控制塊OS_TCBs將被賦值。?C/OS-II任務控制塊數據結構定義如下:typedefstructos_tcbOS_STK*OSTCBStkPtr;#ifOS_TASK_CREATE_EXT_ENvoid*OSTCBExtPtr;OS_STK*OSTCBStkBottom;INT32UOSTCBStkSize;INT16UOSTCBOpt;INT16UOSTCBId;#endifstructos_tcb*OSTCBNext;str
29、uctos_tcb*OSTCBPrev;#if(OS_Q_EN&&(OS_MAX_QS>=2)|OS_MBOX_EN|OS_SEM_ENOS_EVENT*OSTCBEventPtr;#endif#if(OS_Q_EN&&(OS_MAX_QS>=2)|OS_MBOX_ENvoid*OSTCBMsg;#endifINT16UOSTCBDly;INT8UOSTCBStat;INT8UOSTCBPrio;INT8UOSTCBX;INT8UOSTCBY;INT8UOSTCBBitX;INT8UOSTCBBitY;#ifOS_TASK_DEL_ENBOOLEANOSTCBDelReq;#endifOS_TCB;其中:OSTCBStkPtr是指向當前任務棧頂的指針。OSTCBExtPtr指向用戶定義的任務控制塊擴展。OSTCBStkBottom是指向任務棧底的指針。OSTCBStkSize存有棧中可容納的指針元數目而不是用字節(Byte)表示的棧容量總數。OSTCBId用于存儲任務的識別碼。OSTCBNext和OSTCBPrev用于任務控制塊OS_TCBs的雙重鏈接。OSTCBEventPtr是指向事件控制塊的指針。OSTCBMsg是指向傳給任務的消息的指針。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年低碳城市規劃與城市綠化策略案例分析
- 2025年新高二數學(人教A版暑假銜接)新課預習-2.1.2 兩條直線平行和垂直的判定(學生版)-新高二暑假銜接
- 《稅法實務》課件第五章 企業所得稅實務2
- 2025年傳統工業制造行業智能制造解決方案研究
- 2025電子產品買賣合同書樣本
- 二氫吡啶類降壓藥
- 2025版附期限借款合同范本
- 初中體育考試試題及答案
- 線性代數A期末考試試題及答案
- 《2025新能源發電項目監理合同》
- 煤礦心理疏導培訓課件
- 綠色城市旅游麗江古城景區介紹
- 2025屆山西省長治市市級名校中考生物全真模擬試題含解析
- MODS病人監測與護理
- 2025年中化學生態環境有限公司招聘筆試參考題庫含答案解析
- 國泰君安證券業務類文件歸檔范圍和檔案保管期限表
- 2023-2024學年江蘇南京鼓樓區七年級下冊語文期中試卷及答案
- 妥善處理相鄰關系課件
- 新建3英寸半導體芯片生產及測試封裝項目環評資料環境影響
- 2024春期國開河南電大法律事務專科《婚姻家庭法學》無紙化考試(作業練習1至3+我要考試)試題及答案
- 【MOOC】《數字電子技術基礎》(北京交通大學)章節中國大學慕課答案
評論
0/150
提交評論