LCDHome论坛_ZORAN软件流程.doc_第1页
LCDHome论坛_ZORAN软件流程.doc_第2页
LCDHome论坛_ZORAN软件流程.doc_第3页
LCDHome论坛_ZORAN软件流程.doc_第4页
LCDHome论坛_ZORAN软件流程.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ZORAN软件流程 ZORAN966/962采用PARADIGM C编译系统,其编译程序入口文件为c0.asm。c0.asm中定义了CPU级系统上电初始化所需执行的操作以及相关的定义。C0.asm中定义了整个系统的入口函数_startup,定义如下:BegProc_startup, far; CPU启动程序入口CPU系统堆栈,内存(ROM-RAM),段寄存器,BSS区等初始化callInitialize ;初始化数据寄存器和代码寄存器,指定应用程序入口callmain ;CPU初始化完成,调用应用程序入口main()函数pushaxcallexit ;从main函数中返回jmp _startup ;跳回到CPU启动程序入口EndProc_startup 应用程序入口main()函数定义在main.c文件中。Main()函数流程如下:屏蔽中断等功能以便系统初始化_disable()初始化中断索引表InitInterruptVectorTable()配置IO口和GPIO口HAL_Init()初始化和使用UART口(UART1)init_serio()初始化内核Ker_Init()初始化FE,硬件和软件模块drv_dispatch()内核初始化函数Ker_Init()定义如下:void Ker_Init(void)g_cUICoreMsgSent = 0;g_cPlayFileMsgSent = 0; /复位内核状态kernalStatus.bCoreInitDone = FALSE;kernalStatus.bDecodeInitDone = FALSE;kernalStatus.bDriveInitDone = FALSE;kernalStatus.bUIInitDone = FALSE;Ker_createSystemTasks(); /创建系统任务 TimersInit(); /初始化计数器/定时器 start_rtos(); /启动实时操作系统(RTOS) Ker_startSystemTasks(); /启动系统任务return;初始化FE,硬件和软件模块函数drv_dispatch()定义如下:void drv_dispatch(void)BOOL power_on = TRUE; InterruptEnable(); /开中断while (!kernalStatus.bCoreInitDone) /等待内核任务初始化完成Ker_SleepUs(5000UL);ZFE_Init(); /配置FE硬件部分ZFE_InitSubModules(power_on,TRUE); /初始化子模块/设置驱动任务初始化完成标志kernalStatus.bDriveInitDone = TRUE;ZFE_Main(power_on); /初始化完成,进入drive-driver死循环drive-driver死循环函数ZFE_Main是时间处理主函数,它接收来自系统或用户的消息,然后调用相关模块进行处理。定义如下:void ZFE_Main(BOOL power_on)PMQ_MSG curr_msg;PMQ_ReceiveMessage(&curr_msg); /接收一条新消息PMQ_DeleteMsgQueTail();/从PMQ消息队列中删除一条旧消息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);在系统初始化完成后,整个系统的运行就是一个接收消息(事件)和处理消息(事件)的过程。系统初始化过程中利用函数Ker_createSystemTasks()和Ker_startSystemTasks()分别创建和启动了以下3个任务:1, 内核任务(CORE),对应执行代码函数core_dispatch()2, 用户接口任务(UI),对应执行代码函数ui_dispatch()3, 解码任务(DECODE),对应执行代码函数DCD_Main()注意:如果定义了宏_DEBUG,则会新增一个debug任务。三个任务会分时的使用CPU以实现正常工作,下面我们对三个任务执行部分作说明:1, 内核任务core_dispatch()函数,定义如下:void core_dispatch(void)EVENT evt;void *param;_enable(); /打开中断等功能。while (!kernalStatus.bDecodeInitDone) /等待解码任务初始化完毕Ker_SleepUs(5000L); / sleep 5mscore_init(); /初始化内核任务/修改核心任务初始化完成标志kernalStatus.bCoreInitDone = TRUE; /下面是内核任务主循环while (TRUE)/等待内核任务事件(消息)evt = Ker_RecvEvent(EVENT_CLASS_CORE, ¶m); /将事件(消息)发给内核处理机run_all_core_handlers(HDLR_EVENT, evt, param);acknowledge_event(evt); /确认并处理事件(消息)初始化内核任务函数core_init()定义如下:static void core_init(void)ResetWatchdogVars(); /复位watchdogPS_Restore(); / 恢复用户设置(菜单等)DEC_PowerUp(); /上电/ 初始化PBC模块PBC_Command(PBC_CMD_INIT, NULL, NULL);VFD_InitDisplay(); / 初始化前面板(FP)Logo_display(eStartup); /显示开机LOGOdrv_init(); /复位LOADERg_power_state = POWER_SEQUENCE_IN_ON_STATE; /建立内核非播放(广义)事件状态处理机,执行函数no_disc_fsm()install_core_event_handler(no_disc_fsm); /建立内核浏览事件处理机,执行函数BrowseHandlerinstall_core_event_handler(BrowseHandler);/ 初始化书签core_clear_bookmark_info(0); /* Clear all bookmarks */inport(GPCIO_STATUS_ADDR); ir_init(); /初始化遥控器模块fp_init(); /初始化前面板模块内核任务(CORE)通过其初始化函数core_init()建立了内核非播放(广义)事件状态处理机和内核浏览事件处理机两个处理机,他们的执行函数分别为no_disc_fsm和BrowseHandler。2, 用户接口任务(UI)函数ui_dispatch(),定义如下:void ui_dispatch(void)EVENT evt;void *param;_enable();/打开中断等功能。 /等待内核任务(CORE)和解码任务(DECODE)初始化完成while (!kernalStatus.bCoreInitDone | !kernalStatus.bDecodeInitDone | !kernalStatus.bDriveInitDone)Ker_SleepUs(5000L); /* sleep 5 ms */ /建立UI事件(消息)处理机,执行代码为UI_EventHandler函数install_ui_event_handler(UI_EventHandler); /建立面板事件(消息)处理机,执行代码为FP_EventHandler函数install_ui_event_handler(FP_EventHandler); /设置用户接口任务(UI)完成标志kernalStatus.bUIInitDone = TRUE;/ 打开计数器,至此所有任务初始化完成outport(IMASK, (inport(IMASK) & (IMASK_TMR);/UI任务主循环while (1)/等待UI事件(消息)evt = Ker_RecvEvent(EVENT_CLASS_UI, ¶m);/将接收到的事件(消息)发给UI处理机run_all_ui_handlers(HDLR_EVENT, evt, param); /确认和处理UI事件(消息)acknowledge_event(evt);UI任务函数共定义了2个处理机,分别用来处理一般UI事件和面板UI事件。对应的函数分别为UI_EventHandler和FP_EventHandle

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论