我试图将周期唤醒设置为高达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功能中存在一个错误。我试过建议的修复,转换为“长长”,但它仍然不起作用。也许在某处有一些其他整数溢出错误?
设备:
嗨愿,
寄存器是625US基础的27位计数器。
尝试直接设置寄存器,而不使用cfg_max_sleep_duration_external_wakeup_ms定义,但是使用max_sleep_duration_external_wakeup定义中的实际值定义,但使用略小于寄存器的实际全价值的值,因为SDK也将加起来。
此外,您也可以使用ARCH_BLE_EXT_WAKEUP_ON(),并不更改该值,以便设备保持在睡眠模式下而不定期唤醒。
谢谢mt_dialog.
感谢你能这么快回复。
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或配置。
显然我对接受答案太快了,问题仍然是将max_sleep_duration_external_wakeup的值设置为132480000(23h)...
我用几个不同的设置测试了,它们都给出了各种不正确的唤醒时间
23h - > 4分钟
12 h-> 20min
6h-> 700秒
1H-> 1000
30米 - > 500s
- 有些工作
20米 - > 20米
15米 - > 15米
10米 - > 10米
嗨愿,
是的,显然存在一个问题在计算低功耗时钟和设备在睡眠中的时间,期间计算中存在溢出(如果应用大值,则SDK没有必要更大的值),请尝试以下代码,以便设备能够计算更长的睡眠时间:
在RWIP_SLOT_2_LPCYCLES()函数中替换LPCYCLES的分配来自:LPCYCLES =(SLOT_CNT << 11)/ 100;到LPCYCLES =((UINT64_T)SLOT_CNT << 11)/ 100;
这让您可以享用最多23个小时。
谢谢mt_dialog.