Firefly开源社区
标题:
蓝牙透传工程中ke_timer_set使用疑问,求指点
[打印本页]
作者:
ydwake
时间:
2016-8-12 15:21
标题:
蓝牙透传工程中ke_timer_set使用疑问,求指点
使用工程:prj_firefly_passthrough
我希望在程序跑起来后自动启动一个定时器,来执行我自定义的工作。比如定时查询一些外设的状态等。
看了说明ke_timer_set能提供一个最小10ms的定时器,所以就决定使用它了,正好工程里led也用了同样的定时器。
仿照led定时器的使用:
1,app_task.c中添加
const struct ke_msg_handler app_default_state[]=
{APP_SYS_LED_1_TIMER, (ke_msg_func_t) app_led_timer_handler},
//my timer handler
{USER_1_TIMER, (ke_msg_func_t) user_1_timer_handler},
{USER_2_TIMER, (ke_msg_func_t) user_2_timer_handler},
2,app_task.h的enum中添加
APP_SYS_LED_1_TIMER,
//my timer
USER_1_TIMER,
USER_2_TIMER,
3,在usr_design.h & usr_design.c中把相应handler添加好
int user_1_timer_handler(ke_msg_id_t const msgid, void const *param,
ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
ke_timer_clear(USER_1_TIMER, TASK_APP);
com_pdu_send(strlen("USER_1_TIMER\r\n"),"USER_1_TIMER\r\n");
return (KE_MSG_CONSUMED);
}
4,在按键的callback中试了一下ke_timer_set,ok,定时handler跑起来了,时间到了串口有打印了。
5,设置定时代码
ke_timer_set(USER_1_TIMER, TASK_APP, 100);
ke_timer_set(USER_2_TIMER, TASK_APP, 200);
这里才是重点!!!照理来说就应该是可以使用的了!!!
然后我在工程提供的usr_init(void)这个用户自定义初始化函数里面进行这个定时器的设置,定时器居然没有反应?!
而我另外设的自定义的msg及handler放在按键callback和usr_init(void),串口都是有打印的。
结论是msg在usr_init时就已经可以使用了,而timer还没可以使用。
我的理解,这个timer不就是msg的加了一个定时特例吗?发出后都到设置的handler中处理?为什么msg能用了timer还不能用?
请问我应该怎样做呢?这个timer到底在什么时候才开始可以用?
刚接触这个板子几天,对工程不少地方理解还不太够,求大神解答:'(
作者:
ydwake
时间:
2016-8-12 15:25
另外,event在usr_init中设置后,也是跟msg一样可以马上触发进入handler了。难道timer还没初始化完?
作者:
ydwake
时间:
2016-8-12 15:47
果然是timer调度器还没起来,放在第一次的ke_schedule();后,设置定时就能起来了。但这样在ke_schedule()后设置timer是不对的。但又不能用按键callback来触发我的timer,因为我要上电后自动启动的。
有没大神能指点一下该在哪里设置这个timer呢?
难道这个贴会成为1小时惨案? :'(:Q
作者:
安安
时间:
2016-8-15 14:46
ydwake 发表于 2016-8-12 15:47
果然是timer调度器还没起来,放在第一次的ke_schedule();后,设置定时就能起来了。但这样在ke_schedule()后 ...
usr_designed.h中找到这个消息响应:GAP_SET_MODE_REQ_CMP_EVT,在这个case中添加定时器就能上电启动了。理解很深刻:handshake
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1