嗨,对话框中,
我正在工作的ble_app_peripheral项目。我发出一个特定持续时间的app_easy_timer。在这段时间内,设备将角色从观察者切换到广播者,反之亦然,为此会发出若干个gapm_reset_命令。出现的问题是,计时器的句柄没有被调用。请给出解决方案。
提前谢谢,Wisilica
嗨wisilica,
您如何知道计时器的处理程序没有被调用?我假设您在启动特定角色期间设置计时器,然后从处理程序发出GAPM_RESET命令,然后随着新角色的开始,再次启动计时器。那么在代码的哪个位置发出计时器呢?例如,如果在.app_on_init()回调函数中设置了计时器,那么在该函数之后会发出一个GAPM_RESET,内核队列中的所有消息(包括计时器)都会被刷新,通常在GAPM_RESET之后,在该命令之前发出的所有计时器都会被刷新。因此,您必须检查是否确实设置了计时器,并且在计时器结束之前没有调用GAPM_RESET。
由于MT_dialog
你好,
该场景是定时器1和定时器2被启动,持续时间为3秒和500ms,设备发布数据包。计时器2的回调重置间隙并切换到扫描模式。在扫描模式,计时器2创建为500ms,在回调重置间隙和切换到adv模式。因此,计时器2将在扫描和发布之间交替。在Timer1的回调中,timer2被删除,设备停止发布,进入休眠状态。在这种情况下,Timer 2将正常工作,因为它是在角色转换后创建的,并且是在下一次角色转换完成后创建的。
从您的回复来看,如果计时器在间隙角色转换发生时被刷新,我们如何跟踪时间?是否有任何方法来确定,计时器还剩下多少时间?我们需要跟踪角色转换之间的时间。
正如我所提到的,当GAPM_RESET发生时,整个堆栈将被重置,以便您将设备配置为不同的角色,因此计时器将被刷新。根据所描述的场景(如果我弄错了请纠正我),您希望作为一个中心和外围设备(即广告和扫描)运行,并每500毫秒、总共3秒在这两个角色之间切换。我发现你的问题是计时器1在切换过程中被冲掉了,所以你的目标是在设备入睡前进行3秒的操作。因此,你有以下选择:
嗨,wisilica,我有一个和你一样的场景,需要改变观察者和外设之间的角色。我使用一个按钮触发复位动作,并发送一个重置cmd和re-config设备的作用,但是当堆栈总是在NMI_HandlerC坠毁,所以我觉得我有毛病的过程,你能给我分享你的代码参考,我被这个问题搞混了一段时间,感谢!谢谢,我的邮件是gjhe0409@163.com
嗨wisilica,
您如何知道计时器的处理程序没有被调用?我假设您在启动特定角色期间设置计时器,然后从处理程序发出GAPM_RESET命令,然后随着新角色的开始,再次启动计时器。那么在代码的哪个位置发出计时器呢?例如,如果在.app_on_init()回调函数中设置了计时器,那么在该函数之后会发出一个GAPM_RESET,内核队列中的所有消息(包括计时器)都会被刷新,通常在GAPM_RESET之后,在该命令之前发出的所有计时器都会被刷新。因此,您必须检查是否确实设置了计时器,并且在计时器结束之前没有调用GAPM_RESET。
由于MT_dialog
你好,
该场景是定时器1和定时器2被启动,持续时间为3秒和500ms,设备发布数据包。计时器2的回调重置间隙并切换到扫描模式。在扫描模式,计时器2创建为500ms,在回调重置间隙和切换到adv模式。因此,计时器2将在扫描和发布之间交替。在Timer1的回调中,timer2被删除,设备停止发布,进入休眠状态。
在这种情况下,Timer 2将正常工作,因为它是在角色转换后创建的,并且是在下一次角色转换完成后创建的。
从您的回复来看,如果计时器在间隙角色转换发生时被刷新,我们如何跟踪时间?是否有任何方法来确定,计时器还剩下多少时间?我们需要跟踪角色转换之间的时间。
嗨wisilica,
正如我所提到的,当GAPM_RESET发生时,整个堆栈将被重置,以便您将设备配置为不同的角色,因此计时器将被刷新。根据所描述的场景(如果我弄错了请纠正我),您希望作为一个中心和外围设备(即广告和扫描)运行,并每500毫秒、总共3秒在这两个角色之间切换。我发现你的问题是计时器1在切换过程中被冲掉了,所以你的目标是在设备入睡前进行3秒的操作。因此,你有以下选择:
由于MT_dialog
嗨,wisilica,
我有一个和你一样的场景,需要改变观察者和外设之间的角色。我使用一个按钮触发复位动作,并发送一个重置cmd和re-config设备的作用,但是当堆栈总是在NMI_HandlerC坠毁,所以我觉得我有毛病的过程,你能给我分享你的代码参考,我被这个问题搞混了一段时间,感谢!谢谢,我的邮件是gjhe0409@163.com