重置后APP_EASY_TIMER不工作

5个职位/ 0个新
最后发表
wisilica
离线
最后看到:1年1天前
加入:2015-03-17 08:16
重置后APP_EASY_TIMER不工作

嗨,对话框中,

我正在工作的ble_app_peripheral项目。我发出一个特定持续时间的app_easy_timer。在这段时间内,设备将角色从观察者切换到广播者,反之亦然,为此会发出若干个gapm_reset_命令。出现的问题是,计时器的句柄没有被调用。请给出解决方案。

提前谢谢,
Wisilica

设备:
MT_dialog
离线
最后看到:4个月22小时前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

您如何知道计时器的处理程序没有被调用?我假设您在启动特定角色期间设置计时器,然后从处理程序发出GAPM_RESET命令,然后随着新角色的开始,再次启动计时器。那么在代码的哪个位置发出计时器呢?例如,如果在.app_on_init()回调函数中设置了计时器,那么在该函数之后会发出一个GAPM_RESET,内核队列中的所有消息(包括计时器)都会被刷新,通常在GAPM_RESET之后,在该命令之前发出的所有计时器都会被刷新。因此,您必须检查是否确实设置了计时器,并且在计时器结束之前没有调用GAPM_RESET。

由于MT_dialog

wisilica
离线
最后看到:1年1天前
加入:2015-03-17 08:16
你好,

你好,

该场景是定时器1和定时器2被启动,持续时间为3秒和500ms,设备发布数据包。计时器2的回调重置间隙并切换到扫描模式。在扫描模式,计时器2创建为500ms,在回调重置间隙和切换到adv模式。因此,计时器2将在扫描和发布之间交替。在Timer1的回调中,timer2被删除,设备停止发布,进入休眠状态。
在这种情况下,Timer 2将正常工作,因为它是在角色转换后创建的,并且是在下一次角色转换完成后创建的。

从您的回复来看,如果计时器在间隙角色转换发生时被刷新,我们如何跟踪时间?是否有任何方法来确定,计时器还剩下多少时间?我们需要跟踪角色转换之间的时间。

MT_dialog
离线
最后看到:4个月22小时前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

正如我所提到的,当GAPM_RESET发生时,整个堆栈将被重置,以便您将设备配置为不同的角色,因此计时器将被刷新。根据所描述的场景(如果我弄错了请纠正我),您希望作为一个中心和外围设备(即广告和扫描)运行,并每500毫秒、总共3秒在这两个角色之间切换。我发现你的问题是计时器1在切换过程中被冲掉了,所以你的目标是在设备入睡前进行3秒的操作。因此,你有以下选择:

  • 计算切换次数,如果每个角色都持续了500ms,那么你可以计算你切换的次数,例如3秒对应6次切换,我认为这是最可靠的方法。
  • 另一件事你可以做的是读取和存储的价值基准时间计数器(lld_evt_time_get())在切换之前发生的(所以,你不该得到零开关后)并检查积累价值即将切换时,如果它超过预定义的时间你可以把你的设备睡觉。

由于MT_dialog

chris0409
离线
最后看到:3年11个月前
加入:2017-01-11 05:59
嗨,wisilica,

嗨,wisilica,
我有一个和你一样的场景,需要改变观察者和外设之间的角色。我使用一个按钮触发复位动作,并发送一个重置cmd和re-config设备的作用,但是当堆栈总是在NMI_HandlerC坠毁,所以我觉得我有毛病的过程,你能给我分享你的代码参考,我被这个问题搞混了一段时间,感谢!谢谢,我的邮件是gjhe0409@163.com