專注電子技術(shù)學(xué)習(xí)與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

Ucos-2學(xué)習(xí)筆記

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月25日   【字體:
現(xiàn)在公司做項目用的是ucos系統(tǒng),之前都在裸奔,現(xiàn)在從零開始,想把學(xué)習(xí)筆錄記錄下來。以供日后翻閱。眼前有本書是邵貝貝的,可是一看就有點頭大,還是從零開始吧!

 

為什么要用操作系統(tǒng)?

裸奔程序是由先后順序的,比如執(zhí)行程序a時,程序B在等待,等a執(zhí)行完后才允許B執(zhí)行。而在操作系統(tǒng)上我們可以理解為多個任務(wù)都在執(zhí)行,兩個人物之間可以通過操作系統(tǒng)來協(xié)調(diào),當優(yōu)先級高的緊急任務(wù)可以搶占內(nèi)核優(yōu)先執(zhí)行任務(wù)。Ucos2適用于小系統(tǒng)小規(guī)模的項目,可以提高執(zhí)行效率。嚴格地說,uc/OS-II只是一個實時操作系統(tǒng)內(nèi)核

它僅僅包含了任 務(wù) 調(diào)度、任務(wù)管理、時間管理、內(nèi)存管理和任務(wù)間的通信和同步等基本功能,沒有提供輸入輸出管理、文件系統(tǒng)、網(wǎng)絡(luò)等額外的服務(wù),我想后者可能是區(qū)別于linux的區(qū)別吧。但由于uc/OS-II良好的可擴展性和源碼開放,這些非必需的功能完全可以由用戶自己根據(jù)需要分別實現(xiàn)。

幾個概念

什么是搶占式任務(wù)?

簡單地說就是誰的優(yōu)先級高誰就可以搶占內(nèi)核或者空間來執(zhí)行優(yōu)先級高的任務(wù)。

或者這么說,高優(yōu)先級任務(wù)可以在某些時刻搶占了正在CPU上運行的低優(yōu)先級任務(wù)的CPU執(zhí)行權(quán)限。根據(jù)搶占時機又可以分為用戶空間搶占和內(nèi)核搶占。

什么是任務(wù)調(diào)度機制?

首先要創(chuàng)建任務(wù),創(chuàng)建任務(wù)的數(shù)目有限制,56個以內(nèi),創(chuàng)建任務(wù)也有優(yōu)先級,優(yōu)先級別為0時,優(yōu)先級最高。系統(tǒng)初始化完畢后,外設(shè)驅(qū)動初始化完畢后,建立任務(wù),任務(wù)中含有一些參數(shù),包括返回值,優(yōu)先級別,堆棧大小等,然后開始任務(wù)調(diào)度,也就是程序運行。

Ucos2的運行步驟?(工作原理)

首先進行操作系統(tǒng)初始化,主要完成任務(wù)控制塊(tcb)初始化,然后開始創(chuàng)建新任務(wù)、初始化任務(wù)堆棧區(qū),最后調(diào)用OSSTART()函數(shù),開始任務(wù)調(diào)度。主函數(shù)如下:

 

int main(void) 

    INT8U ret 0; 

    BspInit();      //外設(shè)功能初始化

RestoreConfigData();

OSInit();       //uCOS-II系統(tǒng)初始化 

 

  

    ret OSTaskCreate(      Start_Task, //初始化任務(wù)

                               (void*)0, //無參數(shù)

    &Start_TaskStk[APP_TASK_STK_SIZE-1], //任務(wù)堆棧大小為128*4Byte

                       PRIO_START_TASK); //優(yōu)先級最高2

 

    if (ret != OS_ERR_NONE)

    {

        DebugOut(0, "Start_Task 任務(wù)建立失敗error %d\r\n", ret);

    }

 

OSStart();      //開始任務(wù)調(diào)度

 

return 0; 

}

在多任務(wù)調(diào)度開始后,啟動時鐘源開始計數(shù),時鐘的中斷信號,延時,超時都是由此產(chǎn)生。  

當時鐘中斷來臨時,系統(tǒng)把當前正在執(zhí)行的任務(wù)掛起,保護現(xiàn)場,進行中斷處理,判斷有無任務(wù)延時到期。若有,則使該任務(wù)進入就緒態(tài),并對所有進入就緒態(tài)的任務(wù)的優(yōu)先級進行比較,通過任務(wù)切換去執(zhí)行最高優(yōu)先級的任務(wù)。若沒有別的任務(wù)進入就緒態(tài),則恢復(fù)現(xiàn)場繼續(xù)執(zhí)行原任務(wù)。另一種調(diào)度方式是任務(wù)級的調(diào)度,即通過發(fā)軟中斷命令或依靠處理器在任務(wù)執(zhí)行中調(diào)度。如任務(wù)要等待信號量或一個正在執(zhí)行的任務(wù)被掛起時,就需要在此任務(wù)中調(diào)度,找出目前處于就緒態(tài)的優(yōu)先級最高的任務(wù)去執(zhí)行。當沒有任何任務(wù)進入就緒態(tài)時,就去執(zhí)行空任務(wù)。

如圖

 


參考資料

http://wenku.baidu.com/view/948dad0303d8ce2f00662300.html 

關(guān)閉窗口

相關(guān)文章