一個uCOS ARM系統(tǒng)的啟動過程分析及系統(tǒng)構(gòu)架
/****************************************************
本文引用地址:http://cafeforensic.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ù)
進入就緒狀態(tài),Main_Task 任務(wù)是不會放棄CPU 的控制權(quán)的。通過調(diào)用OSTimeDly(INT16U
ticks)函數(shù),可以使操作系統(tǒng)進行一次任務(wù)調(diào)度,并且執(zhí)行下一個優(yōu)先級最高的就緒狀態(tài)的
任務(wù)。參數(shù)Ticks 表示任務(wù)延時的節(jié)拍數(shù),一旦規(guī)定的時間期滿,該任務(wù)馬上又會重新進入
就緒狀態(tài)。
****************************************************/
評論