如何确保无符号整数之间的乘法将在C中产生uint64

cyvaqqii  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在编写一个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?我已经尝试过强制转换,但结果相同。

nwsw7zdq

nwsw7zdq1#

除了你的代码有语法错误之外,nap * MICRO_SEC_FACTOR保证使用(至少)uint64_t算法来执行。limits.h中的ULLONG_MAX要求一个ULL后缀常量能够容纳至少2^64 - 1的值。

相关问题