1. 程式人生 > >μC/OS-II練習題

μC/OS-II練習題

1.在μC/OS-II中,已建立任務的任務控制塊(  A   )

A. 通過兩個指標連結成一個雙向連結串列     B.放在一個順序表中

C. 相互孤立                           D.通過一個指標連結成單鏈表

2.在下列哪一種情況下,一定會產生系統死鎖?(B)

A.任務釋放資源               B.多個任務競爭,出現了迴圈等待資源

C. 一個任務進入死迴圈        D.多個任務競爭共享型裝置

3. 在單處理器的多工系統中,任務什麼時候佔用處理器和能佔用多長時間,取決於( C )

A.任務相應的程式段的長度                   B.任務總共需要執行時間多少

C.任務自身狀態、優先順序和任務排程策略       D.任務完成什麼功能

4.如果任務TaskA對訊號量Sem呼叫OSSemPost()系統服務函式,則訊號量Sem的計數值應(D)。

A.加1       B.減1      C. 不變       D.視是否有其他任務等待該訊號量而定

5.當訊號量代表對某個共享資源的使用權時,則建立該訊號量時的訊號量計數值初始值應設定為(   B  )

A.0       B.1           C. 2       D.可取任意值

二、填空題(每空2分,共10分)

1、在μC/OS-II中,恢復一個被掛起任務函式的函式原型是OSTaskResume()

2、如果一個訊號量的事件控制塊指標為pevent,則判斷是否有任務在等待該訊號量的條件是________________________________。

3、在μC/OS-II中,已建立任務的任務控制塊指標記錄在陣列OSTCBPrioTbl[]中,判斷優先順序為prio的任務是否存在的條件是如果第n個元素是一個空指標,說明優先順序n的任務還沒有建立,否則已經存在優先順序為n的任務,而且該位置儲存了該任務的任務控制塊指標。

4、μC/OS-II提供的兩個系統任務是__空閒任務和統計任務_

5、當需要實現多個任務同步一個任務時,一般採用訊號量集事件標誌組

三、判斷題(每小題2分,共20分)

1、任務控制塊(TCB)是專為任務設定的私有資料結構,每個任務僅有一個TCB。

2、在採用訊息郵箱進行資料通訊時,訊息郵箱中存放的是訊息指標。

3、通過訊號量實現任務之間行為同步時,優先順序低的任務一般傳送訊號,優先順序高的任務一般接受訊號。

4、通過訊息郵箱進行任務之間資料通訊時,為了防止訊息丟失,一般傳送訊息任務的執行頻率較快,接受訊息任務的執行頻率較慢。

5、可以在一箇中斷服務程式ISR中呼叫傳送訊號量函式OSSemPost()。

6、可以在任務排程器加鎖情況下呼叫傳送訊息函式OSMboxPost()。

7、任務刪除就是將任務置為休眠狀態,並將其佔用的任務控制塊歸還到空任務控制塊連結串列中。

8、中斷服務程式執行完成後不一定返回到被中斷的任務。

9、μC/OS-II採用完全不同的資料結構來描述訊號量、互斥型訊號量、訊息郵箱等事件。

10、在基於μC/OS-II的應用程式中,任務的優先順序是唯一的,而且是不可以改變的。

四、簡答題(共5題,每小題6分,共30分)

1、任務的儲存結構主要由哪三部分組成?畫出任務儲存結構示意圖。

答:任務程式程式碼,任務堆疊,任務控制塊。

2、什麼是任務切換?任務切換時主要完成哪些工作?

中止正在執行的任務,轉而去執行另外的一個任務的工作。

1. 把被中止任務的斷點指標儲存到任務堆疊中;

2. 把CPU通用暫存器的內容儲存到任務堆疊中;

3. 把被中止任務的任務堆疊指標儲存到該任務的任務控制塊的OSTCBStkPtr中;

4. 獲得待執行任務的任務控制塊;

5. 使CPU通過任務控制塊獲得待執行任務的任務堆疊指標;

6. 把待執行任務堆疊中通用暫存器的內容恢復到CPU的通用暫存器中;

7. 使CPU獲得待執行任務的斷點指標(該指標是待執行任務在上一次被排程器中止執行時保留在任務堆疊中的)。

3、請說明佔先式核心(可剝奪型核心)和非佔先式核心(不可剝奪型核心)之間的區別?

4、請分析優先順序反轉產生的原因,並說明μC/OS-II解決優先順序反轉的方法。

1)在可剝奪型核心中任務以獨佔方式使用共享資源時會出現低優先順序任務先於高優先順序任務而被執行的現象這種現象叫做任務優先順序反轉。

2)使獲得訊號量任務的優先順序在使用共享資源期間暫時提升它的優先順序以使該任務不被其他的任務所打斷從而能儘快使用完共享資源並釋放資源使用權訊號量然後在釋放了資源使用權訊號量之後再恢復該任務原來的優先級別。

5、寫出將一個優先級別為prio的任務脫離就緒狀態的示意性程式碼。假設已定義如下查詢表OSMapTbl[]。

OSRedTbl[prio>>3] &=OSMapTbl[prio&0x07]=0;

OSRedGrp &= OSMapTbl[prio>>3]=0;

6、說明訊息佇列需要用到的資料結構,並通過示意圖說明它們之間的關係。