古詩詞大全網 - 成語用法 - ucos原理

ucos原理

ucos-ii是壹個可剝奪型內核的實時操作系統,以stm32來說,使用系統滴答定時器,定時產生壹個時鐘節拍,來推動任務的調度,管理,切換等。

關於系統大概的運行原理

2.當產生壹個時鐘節拍時,如果有比當前運行任務優先級更高的任務就緒,那麽優先級(“優先級”為0時優先級最高)高的任務搶占CPU,CPU保存現場環境,放入該任務堆棧中。再將優先級高的任務的堆棧中的現場環境取出來,寫入CPU寄存器中。(CPU中的寄存器暫時還沒有仔細去研究)。當這個任務執行進入延時,或是要等待某個時間或者信號量。那麽它將放棄CPU的使用權,系統會從任務就緒表中,把優先級最高的且就緒狀態的任務賦予CPU的使用權。至此來推動整個系統,調度所有的任務。

不發生中斷時UCOS系統時間與任務的切換

①.假設當前運行的任務是低優先級的任務,CPU程序寄存器中存在的壹些寄存器都是低優先級的任務

②當程序運行到檢測到高優先級的任務進入就緒狀態的時候,此時CPU發送壹些命令,把CPU當前的壹些程序寄存器的內容復制到低優先級任務的堆棧中。也就是1過程。

③.此時通過剛剛的就緒表的機制,可以從程序中得到最高優先級的任務,也就是2過程=

④.最後的過程3就是把剛剛的高優先級任務的堆棧指針復制到CPU的程序寄存器當中,實現任務的切換。

當有中斷時,UCOS系統的執行原理

當程序正在執行壹個中斷服務函數時,發生壹個系統滴答中斷,因為系統滴答定時器的優先級高,所以會中斷這個中斷服務函數執行任務切換。而有些時候,中斷時不能延時的。例如接收數據時,會發生接收錯誤。造成嚴重的後果。

這時,就有下圖中的操作,可以避免。

PendSV異常(我稱它為中斷)編程為最低的優先級中斷。如果某個中斷正在執行,而系統滴答搶占了它,那麽這個中斷將懸起壹個PendSV中斷,來緩期執行任務切換。

UCOS的任務切換時間可以在os_cfg.h中去設置OS_TICKS_PER_SEC宏UCOS任務數等配置也可以在該文件中去尋找。

UCOS-II主要提供服務

內存管理

多任務管理

外圍資源管理

關於Make 與編譯

書中有講這壹塊,所以我也記錄下我的理解

由於我平時都用keil這樣的集成開發環境,之前也有學習過壹段時間的linux,但是對編譯,makefile這些理解的還是不是很好。

編輯makefile 來將源文件和包含的頭文件編譯成需要的.obj文件,然後再將這些.obj文件鏈接成,想要生成的程序。關於makefile好像每壹種編譯器都有自己的makefile規則和命令,因為以前學習GCC編譯器和現在書上看到的BCC編譯器寫的makefile好像不太壹樣。我也沒有去深究。

所以還是集成開發環境好,工具還是怎麽方便怎麽來。需要學習的原理的時候再去理解,實際的應用中用自己寫的Makefile去編譯文件怕是石樂誌哦。

UCOS的任務

任務三要素(我理解的)

任務控制塊

OSTaskCreate((void()(void))start_task,

//任務函數

(void*)0,

//傳遞給任務函數的參數

(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],

//任務堆棧的棧頂

(INT8U)START_TASK_PRIO,

//任務的優先級

主要包含了任務的棧頂地址,

如果處理器的堆棧是高地址向下生長的那麽棧頂地址