MTK timer 机制总结.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MTK timer 机制总结

M T K timer 小结 1 MTK timer 有很多种,从最低层的KAL(kernel adpat layer)到MMI,都有timer的身影。 先来看一下KAL的timer,KAL timer 是非常底层的timer,它的实现是直接封装MTK的RTOS(nuleus)的timer,实现方式是由HISR,从而这种timer具有很高的优先级,也就是说,当这个timer 超时时,就会触发一个HISR(高级中断 High Level ISR (Interrupt Service Routine)),这个中断会回调注册的回调函数。所以这种timer 使用时,要比较小心,它的优先级很高,在回调函数运行时,其他事件是得不到处理的。 kal_timerid kal_create_timer (kal_char* timer_name_ptr); //创建一个timer,参数是timer的名字 void kal_set_timer (kal_timerid timer_id, kal_timer_func_ptr handler_func_ptr, void* handler_param_ptr, \ kal_uint32 delay, kal_uint32 reschedule_time); //设置timer 超时时间, timer_id 是 create 返回值,handler_func_ptr是回调函数,handler_param_ptr 是回调函数返回的参数(一般回调函数都是这么设置,这样很灵活),delay,是超时时间,注意这个参数的单位是ticks 不是ms。reschedule_time 表示是否循环使用timer,0 表示 timer 超时一次就停止,1 表示自动循环启动timer。 第二种timer 是 stack timer,这种timer 与 KAL timer 最大的区别是:stack timer 超时后,发送一个超时消息到相应task的消息队列,由task的消息队列来处理这个消息,而不像KAL timer,直接在中断状态回调注册函数。从时间的精确性来说,stack timer 可能没有KAL timer 精确(发送消息,task 切换等都要花费时间),但是 stack 更加的安全(在 task 里处理这个消息),提高并发性(stack timer 到期后只是发送了一个消息,具体并不处理)。当然 stack timer 底层具体实现还是依靠KAL timer。有一点需要注意的是,当stack timer 超时后,向消息队列发送了消息,但是这个消息还没有来得及处理,假如这个时候取消了这个timer,此时需要特别处理,虽然这种情况发生的概率很小。 void stack_init_timer(stack_timer_struct *stack_timer, kal_char *timer_name, module_type module_id); // stack timer 初始化 module_id 是要接受消息的mdoule,也就是当stack timer 超时,会向该module发送消息。 kal_bool stack_is_time_out_valid(stack_timer_struct *stack_timer); //判断这个消息是否继续有效,也就是是否需要处理,这个函数就是用于方式上面提到那种情况的发生。 void stack_process_time_out(stack_timer_struct *stack_timer); //这个函数与上面的函数成对使用,具体看例子。 void stack_start_timer(stack_timer_struct *stack_timer, kal_uint16 timer_indx, kal_uint32 init_time); //启动定时期,timer_index timer 索引, 超时时间。 M T K timer 小结 2 在 MTK timer 小结 1 提到了两种timer,KAL timer 和 stack timer, 这两种timer 在平时用的比较少,在驱动开发,或者时间要求特别精确的情况下,使用 KAL timer, 一般在task要管理一组timer,用 stack timer 加上 event scheduler,后者就是今天要介绍的第三种timer。 第三种timer: event scheduler event scheduler 处理的timer 时间精确性上来说,相对不是那么精确,对于上层app应用来说,是必不可少的。MMI 层的ti

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档