當前位置:文思屋>學習教育>畢業論文>

關於uC/OS-Ⅱ中任務切換的儀器儀表的實現例項

文思屋 人氣:7.76K

假設某儀器要實現A/D取樣、輸入控制、顯示等功能。uC/OS-Ⅱ作業系統將對這三個任務進行管理,協調各自工作。任務描述:

關於uC/OS-Ⅱ中任務切換的儀器儀表的實現例項

統計任務:每做完例行統計後執行一次顯示輸出;初始任務:每隔10節拍進行一次A/D取樣;使用者任務:每秒判斷一次是否有輸入控制訊號。

實驗中為了測量與觀察方便,採用對89C51的P1口每次取反的操作來模擬儀器執行的任務,由於關心的是作業系統的`效能,而非任務本身,因此簡化是可行的。

設定時鐘節拍:50Hz三個任務(包含系統空閒任務):

任務名優先順序操作空閒任務63空操作統計任務62每秒做一次統計並對P1。2取反初始任務4每秒對P1。0取反一次使用者任務5每10個節拍對P1。1取反一次設計中須注意以下兩點:

(1)任務的現場保護:除PUSH到堆疊的CPU暫存器外,還應包括任務執行過程中儲存到堆疊的資訊,所以每次儲存的資訊量是變化的。

(2)任務堆疊的大小應根據實際情況充分估計,避免過大或者不足。

在這個例子中定義了TASK STK SIZE(任務堆疊)為64個位元組,故在內部RAM中預留出64個位元組作為作業系統的系統堆疊,用全域性變數定義如下:

INT8U idata sp[64] at 0x30;該語句表示系統堆疊從30H開始。

(1)開始多工排程每個任務堆疊初始化情況:

堆疊指標SP=48-1+8+5+2+2+sizeof(void*),即系統堆疊放入以上資訊後SP指標所指的位置。

下面開始多工排程:

系統堆疊指標SP初始值30H,將初始任務的任務堆疊內容(在xdata段)Load到系統堆疊內,完成後SP應指向系統堆疊棧頂,然後運用pop指令切換到初始任務。

(2)在任務執行中進行任務切換切換前系統堆疊為:

將系統堆疊中從當前SP開始一直到30H的堆疊資訊儲存到當前任務堆疊中,然後把新任務的任務堆疊的內容Load到系統堆疊中來。

然後用POP指令將任務切換到新任務中去。

(3)在中斷返回時切換任務須儲存的資訊在中斷時應儲存,切換任務時,只要將SP減去由於呼叫OSIntExit()和OSIntCtxSw()兩個函式而使SP指標增加的4個位元組,其他與任務級切換一樣。