[STM32L0] sprintf 格式化一个 uint64_t 变量,结果有问题

[复制链接]
549|11
地瓜patch 发表于 2025-9-27 16:34 | 显示全部楼层 |阅读模式
%llu 打印为 "lu"(只有字符,没有数字)是否需要调用特殊库?比如像浮点数那样?




if (constx8 == 0) // calculate constants one time.
        {
                uint64_t num = (((uint64_t)(((uint32_t)(R21 + R22))) * VREFINT_CAL_VREF) * (*VREFINT_CAL_ADDR)) << 8;
                uint32_t denom = (uint32_t)4095 * R22;
                constx8 = (uint32_t)(num / denom);  // 8 times actual value.
                if (isDebug(DEBUG_encoder_voltage_calc))
                {
                        char buf[150];
                        sprintf(buf,"Const calc: num: %llu, denom: %lu, constx8: %lu\r\n", num, denom, constx8);
                        print_debug_str(buf);
                }
        }



打印结果为"Const calc: num: lu, denom: 2454134784, constx8: 2646"

甜心puppy 发表于 2025-10-29 13:50 | 显示全部楼层
格式说明符%llu在当前的编译器/库环境中不被支持,需要使用PRIu64宏。
classroom 发表于 2025-10-29 14:51 | 显示全部楼层
标准库链接问题,可能需要特定的编译选项或链接库。
cr315 发表于 2025-10-29 15:51 | 显示全部楼层
可能是变量类型不匹配或输出函数的问题。
duo点 发表于 2025-10-29 15:52 | 显示全部楼层
检查编译选项是否启用了对大整数的支持。
elephant00 发表于 2025-10-29 13:52 | 显示全部楼层
可能链接了不正确的标准库。
flycamelaaa 发表于 2025-10-29 18:53 | 显示全部楼层
用<inttypes.h>的跨平台宏
jcky001 发表于 2025-10-29 19:54 | 显示全部楼层
检查num的计算是否可能超过uint64_t范围
onlycook 发表于 2025-10-29 20:55 | 显示全部楼层
用PRIu64宏和启用C99标准
powerantone 发表于 2025-10-29 21:56 | 显示全部楼层
升级ARM GCC至最新
probedog 发表于 2025-10-29 22:56 | 显示全部楼层
硬件寄存器访问是否正确
stormwind123 发表于 2025-10-29 21:57 | 显示全部楼层
是否存在其他代码干扰如中断修改全局变量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

2057

主题

15590

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部