欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    mtk 面试的几个主要问题.docx

    • 资源ID:1059197       资源大小:21.71KB        全文页数:11页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    mtk 面试的几个主要问题.docx

    3.2分析这是窗口建立过程的一个通用处理结构,这里简洁说明一下,每个函数的详细实现和功能请阅读代码。EntryNewScreen初始化建立一个窗口须要的变量和过程,并退出上一个窗口,清除按键处理函数等;SetParcntHandler很重要,设置当前父窗口全局变量的MENUlD,用来定位到当前是在哪一个窗口,后面依据他来在菜单树中查找到高亮的菜单项的MENUID,找到菜单项的MENUID后,通过mmi_frm_get_hi1ite_hd1r(U16menu_id)可以找到菜单项对应的高ghtSoftkeyFunction(GoBackHistory,KEY_EVENT_UP)等函数设置这个窗口要响应哪些按键事务,并设置好相应的处理函数。3. 3高亮函数触发过程RegisterHighlightHand1er把ExecuteCurrHiliteHandler注册成一个通用的高亮处理函数,事实上是给MMI_list_highlight_handler函数指针赋值°触发则须要调用MMIist_highlight_handler«由于MTK平台支持各种菜单形式,比如纯文本的菜单、带CHECKBoX的、带RADIO的、带一个图片的、带两个图片的、两行的。我们现在只对一种标准菜单进行分析,其他形式的分析方法相同。if(flagWGUI_I.IST_MENU_DISAB1.E_VO1._KEY)register_fixed_list_keys_exO;elsercgistcr_fixed_list_keys();来注册按键事务处理函数,其实现过程很简洁:voidregister_fixed_list_keys(void)/*/+1.ocalVariables*/*f三/不*/*CodeBt)dy*/*/SetKeyHandler(fixed_list_goto_previous_itern,KEY_UP_ARROW,KEY_EVENT_DOWN);SetKeyHandler(fixed_list_goto_next_item,KEY_DOlfN_ARRoKKEYEVENT_DOWN);SetKeyHand1er(fixed_1ist_goto_previous_item,KEY_VO1._UP,KEY_EVENUX)WN);SetKeyHandler(fixed_list_goto_next_item,KEY_VO1._DOWN,KEY_EVENT_DOWN);关于如何实现按键事务的响应、按键的处理逻辑,又姑一个专题了。大致包括键盘中断、去抖、键盘映射、检测、进程通信、应用部分按键处理机制等,有机会再写出文档。4相关学问点说明:4. 1初始化相关高亮的一些全局变量会在InitEVentSo里进行初始化,在event,c文件里。这个函数在开机过程中的一个调用栈关系如下:InitEvcnts();InitEvcntHandlersBeforcPowcrOn();voidMMI_task(oslEntryType*entry_param)InitEventsO:还会在InitFramcwork()中被调用,而InitFramCWork()会由于开机的状态不同,如USB开机、闹钟开机等,调用流程也不尽相同。详细的可参见我的另一篇应用开机流程的文档。4.2菜单结构及查找4.2.1菜单数数组示意constCUSTOM_MENUmtk_nCustMenus=l,0,18,0,16,2,10933,11062,(U16*)n0rderMenuItem0,2,0,3,1,0,1,26218,26085,(U16*)n0rderMenuItem_l,3,2,0,1,0,1,555,0,(U16*)0,5,2,0,1,0,1,26173,0,(U16*)0),0,0,0,0,0,0,0,0,(U16*)0)r0,0,0,0,0,0,0,0,(U16*)0),0,0,0,0,0,0,0,0,(U16*)0,。4,2,0,1,0,1,552,0,(U16*)0,0,0,0,0,0,0,0,0,(U16*)0t0,0,0,0,0,0,0,0,(U16*)0f0,0,0,0,0,0,0,0,(U16*)0,CUSTO1.MENUneUStMenUSMAXJ4ENUTEMS;4.2.2通过父窗口MENUID及高亮INDEX找到高亮窗口MENUIDU16GetSeqItemId_Ext(U16parent-iternid,U16index)/*/*1.ocaIVariables*/*/U8i=0,idx=O;U16item_id=0;U8chiId_count=(U8)nCustMcnusparent_itCm_idT.nNumoCMcnu11em;2I三三三三三三三三三三三三三W*/*CodeBody*/*/#ifdefDEVAPP_RESOURCEif(parent_item_id=MENU_ID_DEVAPP_START)KeturnDevAppGetSeqItemId_Ext(parent_item_id,index):#Cndiffor(i=0;ichild_count;i+)item_id=nCustMenusparent_item_id-l.nOrderMenuItemldi:ifrm_tcst_menu_itcm_hide(itcm-id)*theitemisnothidden*/if(idx=index)(break:elseidx+;MM1.TRACE(MMI_R_TRC_G2_GUI,MM1.RESGEN_A1.1._VENUJn)E,parent_item_id);returnitem.id;4.2.3通过高亮窗口MENUID找到对应的高亮函数FuncPtrmmi_frm_get_hiIite_hd1r(U16menu_id)/*/*1.ocalVartables*/*/U32index;f*mmmm/不*/*CodeBt)dy*/*/*Firstlysearchthedynamictablc*/if(mmi_frm_binary_search(U32)menukid,(mmi_frm_pair_data_struet*)mmi_frmint_hi1ite_hdlr_table,(U32)mmi_frm_int_hilite_hd1r_count,index)returnmmi_fnn_int_hi1ite_hdlr_tableindex,hilite-hdlr;AAndthensearchtheconstanttable.TheconstanttableiSgenerantedbyresgen.*/elseif(mmi_frm_binary_search(U32)mcnu_id,(mmi_frm_pair_data_struct*)const_hi1itejd1r_tab1e,(U32)ARRAY_CoUMT(mmifrm_const_hi1ite_hd1Jtable),indcx)returnmmi_frm_const_hi1ite_hd1r_tab1eindex.hilite_hd1r;else(returnNU1.1.;3MTK内存管理1内存管理。平台不供应动态安排内存的方式:应用程序须要运用动态安排内存时,可以采纳以下几种方式:与系统其他模块共享内存,典型的是运用MED模块的内存:定义一个静态数组,交给系统adm托管,然后调用kal_adm_allocxkal_admJree等内存操作函数实现动态内存安排:定义一个静态数组,应用自己实现基于此数组的安排和管理,也就是实现自己的内存管理模块。2内存安排机制在MTK的资料中,介绍了它的内存管理机制,有3种:ADM、Controlbuffer、SystemMemoryc>后两个是系统运用的,与上层应用无关。但是我对kal_system_alIoc也做了初步分析。sys_mem_ptr,其估计应当指向的是SystemJIem.Pool,debugmempIr,其估计应当指向的是dcbug_Mem_Poo1.经过初步分析,kal_system_alIoc就是从SystemMcmPool做箍洁的加法操作,SySJnem_IefJsize就是SystemJIem.Pool还剩下多少。kal_systeni_alloc从SySJnCm_pIr起先来计算要取的内存。ctrl_buf是通过kal_system_alIoc的内存,然后再通过NU_Create_Partition_Pool创建POo1.O系统的一些taskStaCk.等也都是通过kal_system_alloc来安排的。也就是说,Controlbuffer、SystemMemory用的都是System_Mcni_Poo1的空间。而System_Mem_Pool可以查到,是在custom_configmem函数中配置。ADM就完全没有运用操作系统供应的内存管理算法,是平台自创了一套。开发者,可以自己开拓一个POO1.,自己在这个池用ADV供应的内存管理API完成内存的动态管理。详细的安排算法,就没有再细看,跟一些通用的内存安排算法应当一样。但是在以前调试一个问题的时候,应当是可以断定,ADV在每一个allocnode前后都加了GAP调试区,来推断是否被overwrite0至于系统中,究竟是用了多少块内存用于ADM,各块内存又是让哪些应用在共享,开发者可能更清晰。在系统中是否建立了对内存动态安排的监控机制,比如杳询内存泄漏、动态内存运用效率等等。3少于2K运用get_ctrl_buffere大于2K运用adnget_ctrl_buffer是在系统定义的一块区域申请空间。这段空间被分为好多块均等大小。似乎有以下几种方式:2个1K*24个O.5K*46个0.25K*8.申请的话,按首适应尊法。这就是你所说的小块内存管理。adm主要是你自己定义的一块全局数组比如400K.你可以运用它的adm相关函数去动态申请释放这100K大小的区域,维护也靠你自己。4任孑务管理任务管理。系统任务采纳静态创建方式,静态配置任务优先级、栈大小、任务全局唯一ID等:不供应动态创建Task的方式;任务内部以及任务之间的通信通过内部事务队列和外部事务队列完成pplication_Initialize中的mainp函数,负责任务的创建。我们在代码中见不到任务创建的函数,只须要维护任务初始化参数数据结构。对于系统的那些task信息,都保存在sys_comp_config_lbl变量中,我们看不到。但是MTK供应应客户的custom_comp_config_tbl,客户是可以修改的,在这里用户可以定义自己的task。关于任务,须要关切数据结构COmPlaSkjlandICJStrUCto关于comptaskhandler_struct成员的执行依次,应当是:comp_init_func在系统还未schedule即在Application_Initialize中完成,然后taskschedule后执行comp_entry_func<>comp_cfg_funccomp_reset_f

    注意事项

    本文(mtk 面试的几个主要问题.docx)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 1wenmi网站版权所有

    经营许可证编号:宁ICP备2022001189号-1

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!

    收起
    展开