Firefly开源社区

打印 上一主题 下一主题

蓝牙透传工程中ke_timer_set使用疑问,求指点

19

积分

0

威望

0

贡献

游客

积分
19

蓝牙透传工程中ke_timer_set使用疑问,求指点

发表于 2016-8-12 15:21:37      浏览:9796 | 回复:3        打印      只看该作者   [复制链接] 楼主
使用工程: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到底在什么时候才开始可以用?


刚接触这个板子几天,对工程不少地方理解还不太够,求大神解答:'(


回复

使用道具 举报

19

积分

0

威望

0

贡献

游客

积分
19
发表于 2016-8-12 15:25:07        只看该作者  沙发
另外,event在usr_init中设置后,也是跟msg一样可以马上触发进入handler了。难道timer还没初始化完?
回复

使用道具 举报

19

积分

0

威望

0

贡献

游客

积分
19
发表于 2016-8-12 15:47:05        只看该作者  板凳
果然是timer调度器还没起来,放在第一次的ke_schedule();后,设置定时就能起来了。但这样在ke_schedule()后设置timer是不对的。但又不能用按键callback来触发我的timer,因为我要上电后自动启动的。
有没大神能指点一下该在哪里设置这个timer呢?

难道这个贴会成为1小时惨案?   :'(:Q
回复

使用道具 举报

400

积分

0

威望

0

贡献

注册会员

Rank: 8Rank: 8

积分
400
QQ
发表于 2016-8-15 14:46:57        只看该作者  地板
ydwake 发表于 2016-8-12 15:47
果然是timer调度器还没起来,放在第一次的ke_schedule();后,设置定时就能起来了。但这样在ke_schedule()后 ...

usr_designed.h中找到这个消息响应:GAP_SET_MODE_REQ_CMP_EVT,在这个case中添加定时器就能上电启动了。理解很深刻:handshake
没个性,不签名!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表