在安富萊stm32-v5開發板系統篇手冊中,對簡單的排程器進行介紹。由於最近在學習使用uc/os,對任務的排程比較感興趣,為此參照該資料進行了實驗,驗證文章中的觀點。
以下是合作式排程器的特性,與最常見的前後台程式有很大相似。
1、合作式排程器提供了一種單任務的的系統結構
操作:2、在特定的時刻被排程執行(以週期性或者單次方式)
3、當任務需要執行的時候,被新增到等待佇列。
4、當cpu空閒的時候,執行等待佇列中的下乙個(如果有的話)。
5、任務執行直到完成,然後由排程器來控制。
合作式排程器可以由簡單的**來實現,主要分為三個部分:1、重新整理函式;2、新增任務函式;3、排程函式。其中,只需將排程函式放入main函式的while迴圈中,重新整理函式放入定時中斷的處理函式中即可。當然,在進入while迴圈之前需要初始化定時中斷,新增自己想新增的任務。以下是**部分:
主函式:
int main(void)
}重新整理函式:
void sch_update(void)
}else}}
}排程函式:
void sch_scheduler(void)}}
}以及新增任務和刪除任務函式:
uint8_t sch_addtask(void (*pfunction)(void), uint32_t delay, uint32_t period)
if(index == sch_max_tasks)
mytask[index].ptask = pfunction;
mytask[index].delay = delay;
mytask[index].period = period;
mytask[index].runme = 0;
return index;
}void sch_deletetask(uint8_t index)
以上幾個函式就可以完成這個排程器的設計。不過正如資料所說,這個排程器不可避免的需要正視只有乙個中斷、任務執行疊加等問題。對於只需要同一時刻進行乙個任務處理的情況,該排程器還是不錯的選擇。合作式排程器**簡單,程式本質上可**,安全而且可靠。但是只適合簡單的應用場景。
資料結構 火車排程實驗 合作
project1 火車車廂重排排程 姓名 饒 姓名 蘇 姓名 盧 姓名 彭 題目要求 問題描述 一列火車要將n節車廂分別送往n個車站。車站按1 n的次序編號,火車按照n,n 1,1的編號次序經過車站假設車廂的標號就是其目的地車站的編號。題目要求 給定乙個任意的車廂排列次序。重新排列車廂,使其按照從1...
搶占式排程與非搶占式排程
資料 這是本人在作業系統期中考試前複習是碰到的問題,花了一些時間解決,現在記錄下來。在學習 cpu 排程的時候,關於搶占式 非搶占式排程方式有不理解的地方,想不到google一下就出來了很好的解釋,看來還是要多搜尋多思考。cpu 排程決策可以在如下四種環境下發生 對於第1和第4兩種情況,沒有選擇只有...
實驗2 作業排程
專業 商軟一班 姓名 李新佳 學號 201406114143 1.實驗目的 1 加深對作業排程演算法的理解 2 進行程式設計的訓練。2 實驗要求 用高階語言編寫乙個或多個作業排程的模擬程式。單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程作業時不必考慮...