lcdhome论坛_zoran软件流程

上传人:第*** 文档编号:31597189 上传时间:2018-02-08 格式:DOC 页数:9 大小:59KB
返回 下载 相关 举报
lcdhome论坛_zoran软件流程_第1页
第1页 / 共9页
lcdhome论坛_zoran软件流程_第2页
第2页 / 共9页
lcdhome论坛_zoran软件流程_第3页
第3页 / 共9页
lcdhome论坛_zoran软件流程_第4页
第4页 / 共9页
lcdhome论坛_zoran软件流程_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《lcdhome论坛_zoran软件流程》由会员分享,可在线阅读,更多相关《lcdhome论坛_zoran软件流程(9页珍藏版)》请在金锄头文库上搜索。

1、 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()函数push axcallexit ;从 ma

2、in 函数中返回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_cUI

3、CoreMsgSent = 0;g_cPlayFileMsgSent = 0;/复位内核状态kernalStatus.bCoreInitDone = FALSE;kernalStatus.bDecodeInitDone = FALSE;kernalStatus.bDriveInitDone = FALSE;kernalStatus.bUIInitDone = FALSE;Ker_createSystemTasks(); /创建系统任务TimersInit(); /初始化计数器/定时器start_rtos(); /启动实时操作系统(RTOS)Ker_startSystemTasks(); /启动

4、系统任务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_

5、Main(power_on); /初始化完成,进入 drive-driver 死循环drive-driver 死循环函数 ZFE_Main 是时间处理主函数,它接收来自系统或用户的消息,然后调用相关模块进行处理。定义如下:void ZFE_Main(BOOL power_on)PMQ_MSG curr_msg;PMQ_ReceiveMessage( /接收一条新消息PMQ_DeleteMsgQueTail();/从 PMQ 消息队列中删除一条旧消息if (power_on)while(1)if(curr_msg.op&PMQ_MSG_TYPE_MASK)=CARD_MSG_ID) /智能卡的消

6、息处理Card_Handler(else /碟片的消息处理DISC_Handler(在系统初始化完成后,整个系统的运行就是一个接收消息(事件) 和处理消息(事件) 的过程。系统初始化过程中利用函数Ker_createSystemTasks()和 Ker_startSystemTasks()分别创建和启动了以下 3 个任务:1, 内核任务(CORE),对应执行代码函数 core_dispatch()2, 用户接口任务(UI),对应执行代码函数 ui_dispatch()3, 解码任务(DECODE) ,对应执行代码函数 DCD_Main()注意:如果定义了宏_DEBUG,则会新增一个 debug

7、 任务。三个任务会分时的使用 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; /下面是内核任务

8、主循环while (TRUE)/等待内核任务事件 (消息)evt = Ker_RecvEvent(EVENT_CLASS_CORE, /将事件(消息)发给内核处理机run_all_core_handlers(HDLR_EVENT, evt, param);acknowledge_event(evt); /确认并处理事件(消息)初始化内核任务函数 core_init()定义如下:static void core_init(void)ResetWatchdogVars(); /复位 watchdogPS_Restore(); / 恢复用户设置(菜单等)DEC_PowerUp(); /上电/ 初始化

9、 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_eve

10、nt_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 u

11、i_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

12、);/建立面板事件(消息 )处理机,执行代码为 FP_EventHandler 函数install_ui_event_handler(FP_EventHandler);/设置用户接口任务 (UI)完成标志kernalStatus.bUIInitDone = TRUE;/ 打开计数器,至此所有任务初始化完成outport(IMASK, (inport(IMASK) /UI 任务主循环while (1)/等待 UI 事件(消息)evt = Ker_RecvEvent(EVENT_CLASS_UI, /将接收到的事件 (消息)发给 UI 处理机run_all_ui_handlers(HDLR_EVE

13、NT, evt, param); /确认和处理 UI 事件(消息)acknowledge_event(evt);UI 任务函数共定义了 2 个处理机,分别用来处理一般 UI 事件和面板 UI 事件。对应的函数分别为 UI_EventHandler 和FP_EventHandler。3, 解码任务(DECODE) 函数 DCD_Main(),此函数代码部分ZORAN 未开放。至此,我们所能看到的事件处理机主要有 4 个,如下表所示:名称 所属任务 执行函数非播放(广义) 状态处理机 内核(CORE) no_disc_fsm浏览事件处理机 内核(CORE) BrowseHandler普通 UI 事件处理机 UI UI_EventHandler前面板 UI 事件处理机 UI FP_EventHandler

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号