APP_EASY_TIMER在RESET后不工作

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

嗨,对话框中,

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

提前谢谢,
Wisilica

设备:
MT_dialog
离线
最后看到:5个月2个星期前
工作人员
加入: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的回调中,定时器2被删除,设备停止发布并进入休眠状态。
在这种情况下,定时器2将正常工作,因为它是在角色切换后创建的,并且在下一次角色切换完成后创建。

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

MT_dialog
离线
最后看到:5个月2个星期前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

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

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

由于MT_dialog

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

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