我正在为 ESP32 编写代码,该 ESP32 通过 MQTT 接收数据以设置其深度睡眠时间。问题是有时 ESP32 不会在请求的时间内休眠。对于较小的时间来说很好< 1hr, but when asking for > 4 小时它通常会睡 5 秒。
我怀疑 ULL 乘法没有产生正确的结果。
当前,设备接收到一个字符串,其中包含深度睡眠的秒数。我使用
strtoull
将字符串转换为 ULL。我是这样设置深度睡眠时间的:
#define MICRO_SEC_FACTOR (1000000ULL)
uint64_t nap;
nap = strtoull(args[1], NULL, 10);
esp_sleep_enable_timer_wakeup((nap * MICRO_SEC_FACTOR);
有没有办法确保乘法会产生函数期望的 uint64_t?我尝试过铸造但结果相同。
除了您的代码有语法错误外,
nap * MICRO_SEC_FACTOR
保证使用(至少)uint64_t
算术执行,无论 ULL
是否导致 32 位或 64 位类型。然而,我不知道任何不是 64 位的真实系统。