為什么要用操作系統?
裸奔程序是由先后順序的,比如執行程序a時,程序B在等待,等a執行完后才允許B執行。而在操作系統上我們可以理解為多個任務都在執行,兩個人物之間可以通過操作系統來協調,當優先級高的緊急任務可以搶占內核優先執行任務。Ucos2適用于小系統小規模的項目,可以提高執行效率。嚴格地說,uc/OS-II只是一個實時操作系統內核
它僅僅包含了任 務 調度、任務管理、時間管理、內存管理和任務間的通信和同步等基本功能,沒有提供輸入輸出管理、文件系統、網絡等額外的服務,我想后者可能是區別于linux的區別吧。但由于uc/OS-II良好的可擴展性和源碼開放,這些非必需的功能完全可以由用戶自己根據需要分別實現。
幾個概念
什么是搶占式任務?
簡單地說就是誰的優先級高誰就可以搶占內核或者空間來執行優先級高的任務。
或者這么說,高優先級任務可以在某些時刻搶占了正在CPU上運行的低優先級任務的CPU執行權限。根據搶占時機又可以分為用戶空間搶占和內核搶占。
什么是任務調度機制?
首先要創建任務,創建任務的數目有限制,56個以內,創建任務也有優先級,優先級別為0時,優先級最高。系統初始化完畢后,外設驅動初始化完畢后,建立任務,任務中含有一些參數,包括返回值,優先級別,堆棧大小等,然后開始任務調度,也就是程序運行。
Ucos2的運行步驟?(工作原理)
首先進行操作系統初始化,主要完成任務控制塊(tcb)初始化,然后開始創建新任務、初始化任務堆棧區,最后調用OSSTART()函數,開始任務調度。主函數如下:
int
{
RestoreConfigData();
OSInit();
OSStart();
return
}
在多任務調度開始后,啟動時鐘源開始計數,時鐘的中斷信號,延時,超時都是由此產生。
當時鐘中斷來臨時,系統把當前正在執行的任務掛起,保護現場,進行中斷處理,判斷有無任務延時到期。若有,則使該任務進入就緒態,并對所有進入就緒態的任務的優先級進行比較,通過任務切換去執行最高優先級的任務。若沒有別的任務進入就緒態,則恢復現場繼續執行原任務。另一種調度方式是任務級的調度,即通過發軟中斷命令或依靠處理器在任務執行中調度。如任務要等待信號量或一個正在執行的任務被掛起時,就需要在此任務中調度,找出目前處于就緒態的優先級最高的任務去執行。當沒有任何任務進入就緒態時,就去執行空任務。
如圖
參考資料
http://wenku.baidu.com/view/948dad0303d8ce2f00662300