我测试BLE_APP_SLEEP模式应用程序,我添加了一个回调app_on_system_powered.
回复仅延迟10ms以模拟处理并返回Goto_Sleep。
ARCH_MAIN_LOOP_CALLBACK_RET_T USER_APP_SYSTEM_POWERED(void)
{
delay_us(10000);
返回GOTO_SLEEP;
}
当我按下设备唤醒的按钮发送一个广告数据包并停止。
它被设置为以500ms的间隔发布10秒。
移除延迟修复了这个问题,设备可以正常发布。
任何想法如何发生这种情况?
谢谢
设备:
嗨anism,
使用app_on_system_power后,您不应该长时间留在那里。您已添加到User_App_System_Power后()回调函数的10ms延迟太长。如果您的程序需要时间才能完成,可以将其分成较小的过程并返回Keep_Power后,以便再次强制调度_While_ble_on()重新运行。通过这种方式,调度程序将运行将发生的任何其他BLE事件,然后SDK将运行.app_on_system_powered。所以,你应该返回keep_powered,直到你的程序完成,然后你应该返回goto_sleep。
谢谢,PM_Dialog
你好,
基于用户手册UM-B-006中的信息,我的理解是必须在User_App_System_Powered()中完成异步事件处理,以避免在ISR中花费很长时间。
1-所以我可以在user_app_system_powered()中花多少时间?
让我解释我的用例,我的设备睡眠直到按下了一个按钮,然后唤醒了一些处理约2秒然后每500ms发布一次10秒然后返回睡眠。
2-在这种情况下,2秒处理的最佳位置是什么?
我的另一个用例是设备连接到手机,它进行10毫秒的处理发送一个包到手机,并重复这个过程。
3-在这种情况下,我应该在哪里进行处理?
谢谢
嗨anism,
您可以添加到user_app_system_powered()中添加的标准延迟,但您不应该长时间留在那里。您必须确保user_app_system_powered()的延迟将让调度程序在队列中运行所有事件。为了实现您必须在可以附加到App_on_system_powered回调的较小过程中将过程划分,并且只要有更多的过程,只要执行更多程序即可。因此,该设备将通过块执行整个程序件,而不会延迟调度其他事件的调度程序。您应该在两个应用程序中这样做。雷竞技安卓下载
谢谢,PM_Dialog
嗨pm_dialog,
我试过1毫秒,我有同样的问题。鉴于500ms的adv间隔,我希望足够合理。
因此,有一些关于时机要求是非常有帮助的指导。
您是否有任何类似于我的用例的示例代码?
在这种情况下,从按钮开始唤醒处理然后启动广告,当设备唤醒时,我可以在中断时花费尽可能多的时间,而当设备唤醒时,而不是您的应用笔记UMB-006正在解释。
嗨anism,
是的,1ms是一个合理的时间延迟,在我的身边测试了它的ble_app_sleepmode项目,默认的广告间隔并从ADC实现附加延迟功能固定到1ms,我可以正确地看到设备广告,所以可能会延迟是延迟的事实上,您无法看到设备广告的原因?自无法在此功能中具有固定的时间,因为无法确定可能发生的金额或者可能发生的任何事件,因此无法进行。关于一个例子,DSP参考设计使用该回调来检查环形缓冲区,因此也许这将为您提供一个想法。关于从按钮开始唤醒,运行代码然后启动广告,我们没有类似的示例或引用设计,但如果您想这样做,您可以保留处理(只要您想要的代码运行,就可以了没有BLE中断),所有你要做的就是禁用睡眠以保持设备唤醒或始终返回Keep_Power后,一旦加工结束向堆栈发送广告命令以启动广告事件。
谢谢,PM_Dialog