我正在编写一个ESP32,它通过MQTT接收数据来设置其深度睡眠时间。问题是有时ESP32不会在请求的时间内睡眠。对于小于1小时的时间来说,它是可以的,但当请求〉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?我已经尝试过强制转换,但结果相同。
1条答案
按热度按时间nwsw7zdq1#
除了你的代码有语法错误之外,
nap * MICRO_SEC_FACTOR
保证使用(至少)uint64_t
算法来执行。limits.h
中的ULLONG_MAX
要求一个ULL
后缀常量能够容纳至少2^64 - 1的值。