user_app_system_powered的处理停止广告

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
anism
离线
最后一次露面:9个月2周前
加入:2018-04-13 19:24
user_app_system_powered的处理停止广告

我测试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秒。
删除延迟修复了问题,设备正常发布。

任何想法如何发生这种情况?

谢谢

设备:
PM_DIALOG.
离线
最后一次露面:9小时22分钟前
职员
加入:2018-02-08 11:03
嗨anism,

嗨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.

anism
离线
最后一次露面:9个月2周前
加入:2018-04-13 19:24
你好,

你好,
基于用户手册UM-B-006中的信息,我的理解是必须在User_App_System_Powered()中完成异步事件处理,以避免在ISR中花费很长时间。
1-所以我可以在user_app_system_powered()中花多少时间?

让我解释我的用例,我的设备睡眠直到按下了一个按钮,然后唤醒了一些处理约2秒然后每500ms发布一次10秒然后返回睡眠。
2-在这种情况下,2秒处理的最佳位置是什么?

我拥有的另一个用例是设备连接到手机,它可以处理10ms的处理向手机发送数据包并重复该过程。
3-在这种情况下,我应该在哪里进行处理?

谢谢

PM_DIALOG.
离线
最后一次露面:9小时22分钟前
职员
加入:2018-02-08 11:03
嗨anism,

嗨anism,

您可以添加到user_app_system_powered()中添加的标准延迟,但您不应该长时间留在那里。您必须确保user_app_system_powered()的延迟将让调度程序在队列中运行所有事件。为了实现您必须在可以附加到App_on_system_powered回调的较小过程中将过程划分,并且只要有更多的过程,只要执行更多程序即可。因此,该设备将通过块执行整个程序件,而不会延迟调度其他事件的调度程序。您应该在两个应用程序中这样做。雷竞技安卓下载

谢谢,PM_DIALOG.

anism
离线
最后一次露面:9个月2周前
加入:2018-04-13 19:24
嗨pm_dialog,

嗨pm_dialog,
我试过1毫秒,我有同样的问题。鉴于500ms的adv间隔,我希望足够合理。
因此,有一些关于时机要求是非常有帮助的指导。
您是否有任何类似于我的用例的示例代码?

在这种情况下,从按钮开始唤醒处理然后启动广告,当设备唤醒时,我可以在中断时花费尽可能多的时间,而当设备唤醒时,而不是您的应用笔记UMB-006正在解释。

PM_DIALOG.
离线
最后一次露面:9小时22分钟前
职员
加入:2018-02-08 11:03
嗨anism,

嗨anism,

是的,1ms是一个合理的时间延迟,在我的身边测试了它的ble_app_sleepmode项目,默认的广告间隔并从ADC实现附加延迟功能固定到1ms,我可以正确地看到设备广告,所以可能会延迟是延迟的事实上,您无法看到设备广告的原因?自无法在此功能中具有固定的时间,因为无法确定可能发生的金额或者可能发生的任何事件,因此无法进行。关于一个例子,DSP参考设计使用该回调来检查环形缓冲区,因此也许这将为您提供一个想法。关于从按钮开始唤醒,运行代码然后启动广告,我们没有类似的示例或引用设计,但如果您想这样做,您可以保留处理(只要您想要的代码运行,就可以了没有BLE中断),所有你要做的就是禁用睡眠以保持设备唤醒或始终返回Keep_Power后,一旦加工结束向堆栈发送广告命令以启动广告事件。

谢谢,PM_DIALOG.