新聞中心

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

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

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

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

本文引用地址:http://2s4d.com/article/201610/305776.htm

*一個(gè)uCOS ARM系統(tǒng)的啟動(dòng)過(guò)程分析及系統(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)時(shí)鐘

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

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

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

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

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

//程序不會(huì)運(yùn)行至此

return 0

}//main end

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

*系統(tǒng)啟動(dòng)的時(shí)候創(chuàng)建了4 個(gè)系統(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ù)是一個(gè)無(wú)限循環(huán),同樣,Main_Task 也要陷入一個(gè)無(wú)限循環(huán)。

因?yàn)閡COS-II 是占先式多任務(wù)操作系統(tǒng),如果沒(méi)有比Main_Task 任務(wù)更高優(yōu)先級(jí)的任務(wù)

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

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

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

就緒狀態(tài)。

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



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

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

關(guān)閉