再次定时器问题

5个帖子/ 0新
最后一篇
Drnick1.
离线
最后一次露面:4年7个月前
加入:2014-07-01 11:55
再次定时器问题

我正试图了解计时器的工作原理。我已经实现了一个定时器处理程序,闪烁LED。然后它再次实现计时器。我希望计时器再次闪光并闪光,但它只会发射一次计时器。

我使用的基本代码是dialog_beacon 3.40.6
1)我在app_api.h中添加了app_my_timer到app_msg
2)我添加了{app_my_timer,(ke_msg_func_t)app_my_timer_handler},到app_task_handler.h
3)我已将以下处理程序添加到app.c
int app_my_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)
{
//为清晰起见删除了闪存LED的代码(但它适用于OK)
ke_timer_set(app_my_timer,task_app,100);// 100是1秒 - 重置计时器
return(ke_msg_consumed);
}
我在app.c中添加了一个初始计时器到app_init,设置了以下代码行:
ke_timer_set(app_my_timer,task_app,300);// 100是1秒

当系统启动时,它会达到App_Init并在载有任何Beacon Project所做的任何内容之前,执行3秒定时器的线路。
大约3秒后,此计时器必须过期并执行计时器处理程序,因为我的LED闪烁。我在计时器处理程序中放了一个突破点,所以我知道它到了那里。
然后,它应该执行设置下一个定时器间隔的行1秒。
然后它永远不会恢复定时器处理程序(但仍然运行,因为它仍然发送广告数据包)

为什么它永远不会重新触发定时器处理程序中设置的计时器?

设备:
mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨drnick1,

嗨drnick1,

您不需要其他任何内容才能使计时器运行。当BLE完成其配置时,请尝试设置计时器(app_set_dev_config_complete_func)。在app_init()函数中,您的计时器不起作用,因为在主循环之外。因此,当调用调度程序时,存在重置和所有挂起命令,因为重置所有挂起的消息被取消。

谢谢mt_dialog.

Drnick1.
离线
最后一次露面:4年7个月前
加入:2014-07-01 11:55
好,谢谢。我已经完成了这一点

好,谢谢。我已经完成了这一点(在App_set_dev_config_complete_func中设置计时器),这确实允许计时器工作。
我作为一个例子设置了1秒超时。但是,仍然存在一个问题。
启动程序后,它正确设置定时器和在正确的计时器周期之后,定时器触发器和处理程序捕获。然后,处理程序设置另一个定时器(1秒),该定时器也在正确的时间段后发射,再次设置另一个定时器1秒。这次在计时器再次触发之前几秒钟延迟了几秒钟。在此之后,我经过常规的1秒射击,所以它只是第三次。Heres的处理程序代码 - 它很简单
int app_my_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)
{
//闪存的代码LED - 为清楚起见删除
ke_timer_set(app_my_timer,task_app,100);// 100是1秒
return(ke_msg_consumed);

为什么这会做两次准确,然后在然后按预期工作之前有一个大暂停?

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨drnick1,

嗨drnick1,

我在信标参考设计中实现了相同的代码,并且在一秒钟后发生了所有定时器间隔,可以请在计时器处理程序中使用ARCH_SET_PXACT_GPIO(),并测量智能片段的时间,以确保成功的时间定时器结尾。

谢谢mt_dialog.

Drnick1.
离线
最后一次露面:4年7个月前
加入:2014-07-01 11:55
所以这个问题似乎有

所以这个问题似乎是线
app_timer_set(app_flash_poweroff_timer,task_app,app_spi_poweroff_timeout);// 5秒在app_set_dev_config_complete_func中
禁用这使得一切都按预期工作。
它被调用的原因是因为我设置了hw_config_beacon_ref,因为这似乎是我要求的最接近的东西,但这使得spi_flash默认启用。我不需要spi_flash所以我现在已经undefined它。目前似乎没关系!

主题锁定