我试着把定期醒来的时间设置为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',但它仍然不起作用。也许在某个地方有其他整数溢出错误?
设备:
嗨,考察
寄存器是以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.193 h。我可能在检查30m值是否可能时犯了错误。
如果直接设置MAX_SLEEP_DURATION_EXTERNAL_WAKEUP,则最大值为2^27-1 slots= 134217727 slots= 83886079ms ~= 23.3016887 h。
我想保持叫醒计时器,但大约一天一次就足够了,为了做SUOTA或BLE配置,而不需要按按钮。
显然,我接受答案的速度太快了,在将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
嗨,考察
是的,显然有一个问题在低功率的计算时钟和设备将在多少时间睡觉,有一个时期计算溢出(如果你应用大值,SDK没有预见到如此大规模的值),请尝试以下代码为了让设备可以计算出更长的睡眠时间:
在rwip_slot_2_lpcycles()函数中替换lpcycles的赋值:到lpcycles = ((uint64_t)slot_cnt << 11)/100;
这应该能让你睡23个小时。
由于MT_dialog