- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MTK featurephone timer学习研究文档
timer学习研究
MTK定时器和定时器消息机制分析
内容:
1,先来了解下我们常用的定时器以及在哪些地方用到;
2,定时器使用了哪些数据结构,定时器在MTK的几个应用层上的联系是怎么样的;
3,分析一个timer的开启和结束的完整流程;
4,问答:
(1)mtk系统内部是怎么管理这些timer的?
(2)tiemr从start到stop的整个流程是怎么处理的?
(3)如何创建自己的timer?
(4)如何设计一个tmer管理器的应用?比如闹钟。
1,先来了解下我们常用的定时器以及在哪些地方用到;
一,定时器调用的函数(参考L300项目):
1,StartTimer();
StopTimer(); //需要自定义一个定时器id;
例如:
1,先定义一个timerID:
/*来到文件:TimerEvents.h的枚举MMI_TIMER_IDS*/
MY_TEMER_ID,
2,/*打开定时器*/
StartTimer(MY_TEMER_ID,500,funcPtr);
3,/*关闭定时器*/
StopTimer(MY_TEMER_ID);
2,gui_start_timer();
gui_cancel_timer(); //不用自定义定时器id;
例如:
/*开启一个定时器,只要传入延时时间和回调函数就可以了*/
gui_start_timer( delay,funcPtr );
/*关闭定时器*/
gui_cancel_timer( funcPtr );
二,如何自定义一个定时器:
首先,定义自己的Timer
typedef struct MyTimerItem
{
const int index;//多个timer时使用,在这个例子里是没有用的
int delay;//1000相当于1秒
unsigned char used;//是否被使用,
FuncPtr timerFunc;//执行的函数
int isCircle;//timer是否循环
}MyTimer;
/*
在文件TimerEvents.h里有一个enum,叫做MMI_TIMER_IDS,它存放了所有timer的索引,如果想要使用一个自己的timer,就要在这个enum时加上自己的一项.一般加在后面,即MAX_TIMERS的前一个.
typedef enum
{
// Start for for Keypad based timer.
KEY_TIMER_ID_NONE = 0,
KEY_TIMER_ID0 = 1,
KEY_TIMER_ID1,
KEY_TIMER_ID2,
KEY_TIMER_ID3,
......
中间忽略无数个
MY_TEMER_BASE_ID,
MY_TEMER_END_ID = My_TEMER_BASE_ID + 5,
MAX_TIMERS
} MMI_TIMER_IDS;
*/
my_timer_baseid = MY_TEMER_BASE_ID;
//函数StartTimer和StopTimer在文件Events.c里实现.
static MyTimer mytimer = { 0, 1000, 0, MyTimerHanler, 1 };
//timer处理函数
void MyUpdateTimerHanler()
{
MyTimer * t = mytimer;
//写下你要的操作
// 使定时器,继续工作, MTK 的定时器执行一次就会关闭
if(t-isCircle)
文档评论(0)