定期唤醒无法设置为超过〜10分钟

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
v
离线
最后一次露面:1年5个月前
加入:2016-10-20 06:53
定期唤醒无法设置为超过〜10分钟

我试图将周期唤醒设置为高达23小时,因为这篇文章解释说最大值约为23.3小时https://support.dialog-semicondiondiondum/cfgmaxsleepdurationExternalwake ...。什么是最大的最大值,我如何计算它?

但是,当我将CFG_MAX_SLEEP_DOURINGS_EXTERNAL_WAKEUP_MS设置为(1000 * 60 * 60 * 23)将唤醒时间设置为23小时时,它开始每4分钟醒来。我尝试将其设置为(1000 * 60 * 10),它每10分钟醒来每10分钟。较低的值也按预期工作。当我将它设置为(1000 * 60 * 30)时,它开始每8分钟醒来。

我在这篇文章中读到了https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...和这里https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-da ...MS_TO_SLOTS_CONVERT功能中存在一个错误。我试过建议的修复,转换为“长长”,但它仍然不起作用。也许在某处有一些其他整数溢出错误?

设备:
mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 11:34
嗨愿,

嗨愿,

寄存器是625US基础的27位计数器。

尝试直接设置寄存器,而不使用cfg_max_sleep_duration_external_wakeup_ms定义,但是使用max_sleep_duration_external_wakeup定义中的实际值定义,但使用略小于寄存器的实际全价值的值,因为SDK也将加起来。

此外,您也可以使用ARCH_BLE_EXT_WAKEUP_ON(),并不更改该值,以便设备保持在睡眠模式下而不定期唤醒。

谢谢mt_dialog.

v
离线
最后一次露面:1年5个月前
加入:2016-10-20 06:53
感谢你能这么快回复

感谢你能这么快回复。

DA14580中的64位变量是未定义的吗?因为如果他们是,它将解释这种行为。可以传递给MS_TO_SLOTS_CONVERT的最大值是(2 ^ 32-1)/ 1000〜= 4294967 ms〜= 1.193h。在检查之前,我可能会犯错误。

如果设置max_sleep_duration_external_wakeup直接设置的最大值将是2 ^ 27-1插槽= 134217727插槽= 83886079ms〜= 23.3016887 h。

我想保留唤醒定时器,但每天大约一次足够,为了在没有需要按钮推动的情况下进行Suota或配置。

v
离线
最后一次露面:1年5个月前
加入:2016-10-20 06:53
显然我太快了

显然我对接受答案太快了,问题仍然是将max_sleep_duration_external_wakeup的值设置为132480000(23h)...

我用几个不同的设置测试了,它们都给出了各种不正确的唤醒时间
23h - > 4分钟
12 h-> 20min
6h-> 700秒
1H-> 1000
30米 - > 500s
- 有些工作
20米 - > 20米
15米 - > 15米
10米 - > 10米

mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 11:34
嗨愿,

嗨愿,

是的,显然存在一个问题在计算低功耗时钟和设备在睡眠中的时间,期间计算中存在溢出(如果应用大值,则SDK没有必要更大的值),请尝试以下代码,以便设备能够计算更长的睡眠时间:

在RWIP_SLOT_2_LPCYCLES()函数中替换LPCYCLES的分配来自:LPCYCLES =(SLOT_CNT << 11)/ 100;到LPCYCLES =((UINT64_T)SLOT_CNT << 11)/ 100;

这让您可以享用最多23个小时。

谢谢mt_dialog.