MTK task 小结 3
2013-03-11 22:03
127 查看
在 MTK task 小结 3 中写到创建一个MTK task,没有写完,今天把剩下的写完。下面需要介绍 创建task 信息的函数。
这个函数的结构是不是很眼熟,对,就是 MTK task 小结 2 介绍MMI task 创建函数 mmi_create,创建函数的格式都是一样的,具体结构体的说明就看 MTK task 小结 2 ,相应的函数可以补充,简单期间就有一个入口函数,不过一般都够了。
这样,一个task 就建立完成了。 如果想给自己的task 建立一个强大的 timer 功能,那么就可以根据 MTK timer 小结 3 里介绍的那样,建立一个event scheduler timer,注意,这个stack timer 里的mod 要写成 MOD_TASK_TEST 而不是 MOD_MMI,这样 MSG_ID_TIMER_EXPIRY 就会发送到这个task里面,只要进行相应的处理就ok了。task 之间的交互是通过消息来传递的,当然也可以通过全局变量,共享内存等等(这里不是linux 那样的共享内存,因为MTK 里面,整个系统的地址空间只有一个,那么一个task里的内存,可以被另一个task访问,只要知道地址,没有限制,具体可以看 MTK 内存管理简单总结)。只要自己控制好(互斥问题),还是比较灵活的。比如想要在 这个task 里面处理按键事件,比较繁琐,先要在MMI task里面接受按键事件,然后根据自己定义的消息,把这个按键事件发送到这个task里面,这个task里面根据相应的消息处理函数,分发处理。一般来说,task 做一些后台处理比较方便(跟io有关的),如果想实现并行(linux时间片那样系统自动切换task),那是不现实,因为这个不是抢占式系统,优先级高task的除非自己挂起,否则会一直运行。虽然说如果两个task 如果优先级一样,或进行轮询,但是我自己试了,没有实现,不知道是否是当时没有用对。如果有实现的童鞋一定要告诉我,
转自:http://blog.csdn.net/yanwuxufeng/archive/2010/07/26/5767681.aspx
kal_bool task_test_create(comptask_handler_struct **handle) { static const comptask_handler_struct task_test_handler_info = { task_test_main, /* task entry function */ NULL, /* task initialization function */ NULL, /* task configuration function */ NULL, /* task reset handler */ NULL, /* task termination handler */ }; *handle = (comptask_handler_struct *)&task_test_handler_info; return KAL_TRUE; }
这个函数的结构是不是很眼熟,对,就是 MTK task 小结 2 介绍MMI task 创建函数 mmi_create,创建函数的格式都是一样的,具体结构体的说明就看 MTK task 小结 2 ,相应的函数可以补充,简单期间就有一个入口函数,不过一般都够了。
void task_test_main(task_entry_struct * task_entry_ptr) { // 消息实体 ilm_struct current_ilm; //消息队列id oslMsgqid qid = task_info_g[task_entry_ptr->task_indx].task_ext_qid; //初始化一些信息,这里只会被执行一次 tast_test_init() // 进入消息循环 while ( 1 ) { //接受消息,如果没有消息,挂起该 task receive_msg_ext_q(qid , ¤t_ilm); //根据消息 id 处理各种消息 switch (current_ilm.msg_id) { case MSG_ID_TASK_TEST_XX: break; default: break; } free_ilm(¤t_ilm); } }
这样,一个task 就建立完成了。 如果想给自己的task 建立一个强大的 timer 功能,那么就可以根据 MTK timer 小结 3 里介绍的那样,建立一个event scheduler timer,注意,这个stack timer 里的mod 要写成 MOD_TASK_TEST 而不是 MOD_MMI,这样 MSG_ID_TIMER_EXPIRY 就会发送到这个task里面,只要进行相应的处理就ok了。task 之间的交互是通过消息来传递的,当然也可以通过全局变量,共享内存等等(这里不是linux 那样的共享内存,因为MTK 里面,整个系统的地址空间只有一个,那么一个task里的内存,可以被另一个task访问,只要知道地址,没有限制,具体可以看 MTK 内存管理简单总结)。只要自己控制好(互斥问题),还是比较灵活的。比如想要在 这个task 里面处理按键事件,比较繁琐,先要在MMI task里面接受按键事件,然后根据自己定义的消息,把这个按键事件发送到这个task里面,这个task里面根据相应的消息处理函数,分发处理。一般来说,task 做一些后台处理比较方便(跟io有关的),如果想实现并行(linux时间片那样系统自动切换task),那是不现实,因为这个不是抢占式系统,优先级高task的除非自己挂起,否则会一直运行。虽然说如果两个task 如果优先级一样,或进行轮询,但是我自己试了,没有实现,不知道是否是当时没有用对。如果有实现的童鞋一定要告诉我,
转自:http://blog.csdn.net/yanwuxufeng/archive/2010/07/26/5767681.aspx
相关文章推荐
- MTK task 小结 4
- MTK task 小结 1
- MTK task 小结 2
- MTK task 小结 2
- MTK task 小结 4
- MTK task 小结 2
- MTK task 小结 1
- MTK task 小结 3
- struct和class区别小结
- 菜鸟每星期小结(一)
- STL学习小结
- fstab文件字段小结
- linux中命令的输入流输出流小结
- 数学专题小结:FFT算法
- Dagger2 小结
- 正则表达式小结
- [转] slave_exec_mode=IDEMPOTENT的行为小结
- SharePoint 2007常见的一些问题小结(1)
- 项目小结 spring mvc 和jdo
- [Python入门及进阶笔记]Python-魔术方法小结(方法运算符重载)