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

问题描述 投票:0回答:1

我正在为 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?我尝试过铸造但结果相同。

c microcontroller esp32 esp-idf
1个回答
0
投票

除了您的代码有语法错误外,

nap * MICRO_SEC_FACTOR
保证使用(至少)
uint64_t
算术执行,无论
ULL
是否导致 32 位或 64 位类型。然而,我不知道任何不是 64 位的真实系统。

© www.soinside.com 2019 - 2024. All rights reserved.