新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一個uCOS ARM系統(tǒng)的啟動過程分析及系統(tǒng)構(gòu)架

        一個uCOS ARM系統(tǒng)的啟動過程分析及系統(tǒng)構(gòu)架

        作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

        /****************************************************

        本文引用地址:http://www.104case.com/article/201610/305776.htm

        *一個uCOS ARM系統(tǒng)的啟動過程分析及系統(tǒng)構(gòu)架。 *

        *Main 函數(shù)的代碼如下: *

        *****************************************************/

        int Main(int argc, char **argv)

        {

        ARMTargetInit() // 系統(tǒng)硬件初始化

        OSInit() //初始化操作系統(tǒng)

        uHALr_ResetMMU() //復(fù)位MMU

        LCD_Init() //初始化LCD 模塊

        LCD_printf(LCD initialization is OKn) //顯示液晶屏信息

        LCD_printf(240 x 128 Text Moden)

        LoadFont() //裝載系統(tǒng)字體

        LCD_printf(Create task on uCOS-II...n) //顯示液晶屏信息

        //創(chuàng)建系統(tǒng)的任務(wù)

        OSTaskCreate(Main_Task, (void *)0,

        (OS_STK *) Main_Stack[STACKSIZE*8-1], Main_Task_Prio)

        OSTaskCreate(Led_Flash_Task, (void *)0,

        (OS_STK *) Led_Flash_Stack[STACKSIZE-1], Led_Flash_Prio )

        OSTaskCreate(Lcd_Fresh_Task, (void *)0,

        (OS_STK *) Lcd_Fresh_Stack[STACKSIZE-1], Lcd_Fresh_prio )

        OSTaskCreate(Key_Scan_Task, (void *)0,

        (OS_STK *) Key_Scan_Stack[STACKSIZE-1], Key_Scan_Task_Prio )

        LCD_printf(Starting uCOS-II...n)

        LCD_printf(Entering graph mode...n)

        LCD_ChangeMode(DspGraMode) //設(shè)置液晶屏顯示為圖形模式

        initOSGUI() //初始化圖形用戶界面

        InitRtc() //初始化系統(tǒng)時鐘

        LCDFresh_MBox=OSMboxCreate(NULL) //創(chuàng)建LCD 刷新郵箱

        Lcd_Disp_Sem=OSSemCreate(1) //創(chuàng)建LCD 緩沖區(qū)控制權(quán)旗語,初值為1 滿足互斥條件

        Nand_Rw_Sem=OSSemCreate(1) //創(chuàng)建Nand-Flash 讀寫控制權(quán)旗語,初值為1 滿足互斥條件

        ARMTargetStart() //啟動操作系統(tǒng)的硬件定時器等中斷

        OSStart() // 啟動操作系統(tǒng)

        //程序不會運行至此

        return 0

        }//main end

        /****************************************************

        *系統(tǒng)啟動的時候創(chuàng)建了4 個系統(tǒng)任務(wù),其中Main_Task 為系統(tǒng)的主任務(wù),用戶的應(yīng) *

        *用程序就是從Main_Task 任務(wù)開始的。其代碼如下: *

        *****************************************************/

        void Main_Task(void *Id) //Main_Test_Task

        {

        POSMSG pMsg=0

        ClearScreen() //清除屏幕

        for( )

        OSTimeDly(1000)

        //消息循環(huán)

        /* for( ){

        pMsg=WaitMessage(0)

        tch(pMsg-> Message){

        case OSM_KEY:

        onKey(pMsg-> WParam,pMsg-> LParam)

        break

        }

        DeleteMessage(pMsg)

        }*/

        }

        /**************************************************

        通常多操作系統(tǒng)中的任務(wù)是一個無限循環(huán),同樣,Main_Task 也要陷入一個無限循環(huán)。

        因為uCOS-II 是占先式多任務(wù)操作系統(tǒng),如果沒有比Main_Task 任務(wù)更高優(yōu)先級的任務(wù)

        進(jìn)入就緒狀態(tài),Main_Task 任務(wù)是不會放棄CPU 的控制權(quán)的。通過調(diào)用OSTimeDly(INT16U

        ticks)函數(shù),可以使操作系統(tǒng)進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個優(yōu)先級最高的就緒狀態(tài)的

        任務(wù)。參數(shù)Ticks 表示任務(wù)延時的節(jié)拍數(shù),一旦規(guī)定的時間期滿,該任務(wù)馬上又會重新進(jìn)入

        就緒狀態(tài)。

        ****************************************************/



        關(guān)鍵詞:

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 方正县| 临颍县| 永川市| 定西市| 安平县| 东丰县| 公安县| 河曲县| 太和县| 南丹县| 德庆县| 眉山市| 南川市| 兴安县| 尉氏县| 将乐县| 长乐市| 五常市| 亚东县| 临澧县| 台州市| 洛南县| 汤阴县| 东丰县| 惠来县| 容城县| 辉县市| 中超| 林周县| 瓦房店市| 眉山市| 上虞市| 信宜市| 五家渠市| 东山县| 济阳县| 永寿县| 湟中县| 寿光市| 咸丰县| 许昌县|