![LCDHome论坛_ZORAN软件流程.doc_第1页](http://file.renrendoc.com/FileRoot1/2020-1/11/3830597a-2b9c-406b-ae6e-6d5239c467dd/3830597a-2b9c-406b-ae6e-6d5239c467dd1.gif)
![LCDHome论坛_ZORAN软件流程.doc_第2页](http://file.renrendoc.com/FileRoot1/2020-1/11/3830597a-2b9c-406b-ae6e-6d5239c467dd/3830597a-2b9c-406b-ae6e-6d5239c467dd2.gif)
![LCDHome论坛_ZORAN软件流程.doc_第3页](http://file.renrendoc.com/FileRoot1/2020-1/11/3830597a-2b9c-406b-ae6e-6d5239c467dd/3830597a-2b9c-406b-ae6e-6d5239c467dd3.gif)
![LCDHome论坛_ZORAN软件流程.doc_第4页](http://file.renrendoc.com/FileRoot1/2020-1/11/3830597a-2b9c-406b-ae6e-6d5239c467dd/3830597a-2b9c-406b-ae6e-6d5239c467dd4.gif)
![LCDHome论坛_ZORAN软件流程.doc_第5页](http://file.renrendoc.com/FileRoot1/2020-1/11/3830597a-2b9c-406b-ae6e-6d5239c467dd/3830597a-2b9c-406b-ae6e-6d5239c467dd5.gif)
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年01月2025年荆州市沙市区事业单位人才引进30人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2024年12月湖南省衡阳县事业单位急需紧缺人才引进29人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025发电企业安全工器具管理标准
- 荷叶母亲课件、教案、音频朗读
- 《椰树海滨风景》课件
- 借哪吒精神燃开学斗志 开学主题班会课件
- 2025年初中主题班会课件:好习惯成就好人生
- 2025至2031年中国12英寸吊装球机行业投资前景及策略咨询研究报告
- 2025至2030年中国阿伦磷酸钠数据监测研究报告
- 2025至2030年中国铝材氧化着色钛碟数据监测研究报告
- 2024-2025学年物理人教版八年级上册-6.4-密度的应用-课件
- 山西电网新能源场站涉网试验流程使用说明书
- 矿山应急管理培训
- DB41T 2486-2023 叉车维护保养与自行检查规范
- 1、DL-T5113.1-2019 水利水电工程单元工程质量等级评定标准第一部分:土建工程用表
- 三相四线及三相三线错误接线向量图分析及更正
- 120急救车辆管理规范与120驾驶员管理制度
- 2024年医院感染管理制度(四篇)
- 白酒业务员考勤管理制度
- 2024年海南省海口市小升初数学试卷(含答案)
- 小班班本课程《吃饭这件小事》
评论
0/150
提交评论