定时唤醒时间不能超过10分钟

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个职位/ 0个新职位
最后发表
这次访问
离线
最后看到:1年5个月前
加入:2016-10-20 06:53
定时唤醒时间不能超过10分钟

我试着把定期醒来的时间设置为23小时,因为这篇文章解释说,最大唤醒时间大约是23.3小时https://support.dialog-semiconductor.com/cfgmaxsleepdurationexternalwake..。.确切的最大值是什么,我如何计算它?

然而,当我通过将CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS设置为(1000*60*60*23)将唤醒时间设置为23小时时,它开始每4分钟醒来一次。我试着将它设置为(1000*60*10),它每10分钟醒来一次。较低的值也按照预期工作。当我将它设置为(1000*60*30)时,它开始每8分钟醒来一次。

我在这篇文章里读到的https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。这里https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-da..。在MS_TO_SLOTS_CONVERT函数中有一个错误。我尝试了建议的修复与转换为'long long',但它仍然不起作用。也许在某个地方有其他整数溢出错误?

设备:
MT_dialog
离线
最后看到:4个月3个星期前
工作人员
加入:2015-06-08 34
嗨,考察

嗨,考察

寄存器是以625us为基数的27位计数器。

试图设置直接注册,不使用CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS定义但MAX_SLEEP_DURATION_EXTERNAL_WAKEUP定义实际价值的定义,但是使用一个值略低于实际的注册的全部价值,因为SDK将还加起来,价值。

你也可以使用arch_ble_ext_wakeup_on(),不要更改该值,以便设备保持睡眠模式而不定期醒来。

由于MT_dialog

这次访问
离线
最后看到:1年5个月前
加入:2016-10-20 06:53
谢谢您的快速回复

谢谢您的快速回复。

DA14580中64位变量是未定义的吗?因为如果是的话,就可以解释这种行为了。可以传递给MS_TO_SLOTS_CONVERT的最大值是(2^32-1)/1000 ~= 4294967 ms ~= 1.193 h。我可能在检查30m值是否可能时犯了错误。

如果直接设置MAX_SLEEP_DURATION_EXTERNAL_WAKEUP,则最大值为2^27-1 slots= 134217727 slots= 83886079ms ~= 23.3016887 h。

我想保持叫醒计时器,但大约一天一次就足够了,为了做SUOTA或BLE配置,而不需要按按钮。

这次访问
离线
最后看到:1年5个月前
加入:2016-10-20 06:53
显然是我太快了

显然,我接受答案的速度太快了,在将MAX_SLEEP_DURATION_EXTERNAL_WAKEUP的值设置为132480000(23小时)后,问题仍然存在……

我测试了一些不同的设置,它们都给出了不同的错误的唤醒时间
23h -> 4分钟
12 h - > 20分钟
6 h - > 700年代
1 h - > 1000年代
500年代30 m - >
——有些确实有效
20 m - > 20 m
15 m - > 15米
10 m - > 10 m

MT_dialog
离线
最后看到:4个月3个星期前
工作人员
加入:2015-06-08 34
嗨,考察

嗨,考察

是的,显然有一个问题在低功率的计算时钟和设备将在多少时间睡觉,有一个时期计算溢出(如果你应用大值,SDK没有预见到如此大规模的值),请尝试以下代码为了让设备可以计算出更长的睡眠时间:

在rwip_slot_2_lpcycles()函数中替换lpcycles的赋值:到lpcycles = ((uint64_t)slot_cnt << 11)/100;

这应该能让你睡23个小时。

由于MT_dialog