資源描述:
《LCDHome論壇_ZORAN軟件流程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、ZORAN軟件流程ZORAN966/962采用PARADIGMC++編譯系統(tǒng),其編譯程序入口文件為c0.asm。c0.asm中定義了CPU級(jí)系統(tǒng)上電初始化所需執(zhí)行的操作以及相關(guān)的定義。C0.asm中定義了整個(gè)系統(tǒng)的入口函數(shù)_startup,定義如下:BegProc_startup,far;CPU啟動(dòng)程序入口CPU系統(tǒng)堆棧,內(nèi)存(ROM->RAM),段寄存器,BSS區(qū)等初始化callInitialize;初始化數(shù)據(jù)寄存器和代碼寄存器,指定應(yīng)用程序入口callmain;CPU初始化完成,調(diào)用應(yīng)用程序入口main()函數(shù)pushaxcal
2、lexit;從main函數(shù)中返回jmp_startup;跳回到CPU啟動(dòng)程序入口EndProc_startup應(yīng)用程序入口main()函數(shù)定義在main.c文件中。Main()函數(shù)流程如下:屏蔽中斷等功能以便系統(tǒng)初始化_disable()初始化中斷索引表InitInterruptVectorTable()配置IO口和GPIO口HAL_Init()初始化和使用UART口(UART1)init_serio()初始化內(nèi)核Ker_Init()初始化FE,硬件和軟件模塊drv_dispatch()內(nèi)核初始化函數(shù)Ker_Init()定義如下:v
3、oidKer_Init(void){g_cUICoreMsgSent=0;g_cPlayFileMsgSent=0;//復(fù)位內(nèi)核狀態(tài)kernalStatus.bCoreInitDone=FALSE;kernalStatus.bDecodeInitDone=FALSE;kernalStatus.bDriveInitDone=FALSE;kernalStatus.bUIInitDone=FALSE;Ker_createSystemTasks();//創(chuàng)建系統(tǒng)任務(wù)TimersInit();//初始化計(jì)數(shù)器/定時(shí)器start_rtos();
4、//啟動(dòng)實(shí)時(shí)操作系統(tǒng)(RTOS)Ker_startSystemTasks();//啟動(dòng)系統(tǒng)任務(wù)return;}初始化FE,硬件和軟件模塊函數(shù)drv_dispatch()定義如下:voiddrv_dispatch(void){BOOLpower_on=TRUE;InterruptEnable();//開中斷while(!kernalStatus.bCoreInitDone)//等待內(nèi)核任務(wù)初始化完成{Ker_SleepUs(5000UL);}ZFE_Init();//配置FE硬件部分ZFE_InitSubModules(power_o
5、n,TRUE);//初始化子模塊//設(shè)置驅(qū)動(dòng)任務(wù)初始化完成標(biāo)志kernalStatus.bDriveInitDone=TRUE;ZFE_Main(power_on);//初始化完成,進(jìn)入drive-driver死循環(huán)}drive-driver死循環(huán)函數(shù)ZFE_Main是時(shí)間處理主函數(shù),它接收來(lái)自系統(tǒng)或用戶的消息,然后調(diào)用相關(guān)模塊進(jìn)行處理。定義如下:voidZFE_Main(BOOLpower_on){PMQ_MSGcurr_msg;PMQ_ReceiveMessage(&curr_msg);//接收一條新消息PMQ_DeleteMs
6、gQueTail();//從PMQ消息隊(duì)列中刪除一條舊消息if(power_on){while(1){if((curr_msg.op&PMQ_MSG_TYPE_MASK)==CARD_MSG_ID){//智能卡的消息處理Card_Handler(&curr_msg);}else{//碟片的消息處理DISC_Handler(&curr_msg);}}}}在系統(tǒng)初始化完成后,整個(gè)系統(tǒng)的運(yùn)行就是一個(gè)接收消息(事件)和處理消息(事件)的過(guò)程。系統(tǒng)初始化過(guò)程中利用函數(shù)Ker_createSystemTasks()和Ker_startSyste
7、mTasks()分別創(chuàng)建和啟動(dòng)了以下3個(gè)任務(wù):1,內(nèi)核任務(wù)(CORE),對(duì)應(yīng)執(zhí)行代碼函數(shù)core_dispatch()2,用戶接口任務(wù)(UI),對(duì)應(yīng)執(zhí)行代碼函數(shù)ui_dispatch()3,解碼任務(wù)(DECODE),對(duì)應(yīng)執(zhí)行代碼函數(shù)DCD_Main()注意:如果定義了宏_DEBUG,則會(huì)新增一個(gè)debug任務(wù)。三個(gè)任務(wù)會(huì)分時(shí)的使用CPU以實(shí)現(xiàn)正常工作,下面我們對(duì)三個(gè)任務(wù)執(zhí)行部分作說(shuō)明:1,內(nèi)核任務(wù)core_dispatch()函數(shù),定義如下:voidcore_dispatch(void){EVENTevt;void*param;_e
8、nable();//打開中斷等功能。while(!kernalStatus.bDecodeInitDone){//等待解碼任務(wù)初始化完畢Ker_SleepUs(5000L);//sleep5ms}core_init();//初始化內(nèi)核