[经验分享] 51单片机如何使用printf打印unsigned long的那些事

[复制链接]
94|44
mikewalpole 发表于 2026-7-8 17:07 | 显示全部楼层
重映射到串口,并注意 long 是 32 位还是 16 位。
wengh2016 发表于 2026-7-12 20:36 | 显示全部楼层
在Keil C51环境中,int 默认为16位,long为32位。为了正确打印32位的 unsigned long,必须使用特定的格式修饰符。
dspmana 发表于 2026-7-13 15:33 | 显示全部楼层
51 单片机用 printf 打印 unsigned long,核心就是 Keil C
mickit 发表于 2026-7-13 20:49 | 显示全部楼层
printf 是一个极其耗费RAM的函数。
ingramward 发表于 2026-7-13 21:44 | 显示全部楼层
C51编译器中的 printf 默认依赖 putchar 函数进行字符输出。
elsaflower 发表于 2026-7-14 08:13 | 显示全部楼层
自定义putchar函数有什么注意点?
sheflynn 发表于 2026-7-15 13:31 | 显示全部楼层
直接用标准 stdio 的 printf
benjaminka 发表于 2026-7-15 14:28 | 显示全部楼层
Keil C51的 printf 函数默认是不可重入的。
updownq 发表于 2026-7-15 17:47 | 显示全部楼层
51单片机需自定义putchar函数,将字符通过串口发送。
tifmill 发表于 2026-7-15 20:04 | 显示全部楼层
在8位机上处理32位数**算非常吃力
houjiakai 发表于 2026-7-15 21:07 | 显示全部楼层
警惕8位机在RAM和代码体积上的严苛限制。
pentruman 发表于 2026-7-16 10:06 | 显示全部楼层
编译器默认将整数常量视为 int (16位)‌,如果在运算中没有显式指定类型,中间结果会发生溢出截断,即使最终赋值给 unsigned long 也无济于事。
biechedan 发表于 2026-7-16 10:50 | 显示全部楼层
建议放弃 printf              
louliana 发表于 2026-7-16 11:26 | 显示全部楼层
C51标准库的 printf 本身不知道数据该发往哪里,它底层依赖一个名为 putchar(char c) 的函数。
janewood 发表于 2026-7-16 12:55 | 显示全部楼层
51单片机的内部RAM极小,默认栈指针往往很低。如果调用层次较深或在中断附近调用,极易发生栈溢出,导致程序跑飞或全局变量被意外篡改。
eefas 发表于 2026-7-16 13:43 | 显示全部楼层
Keil需要链接浮点运算库。              
macpherson 发表于 2026-7-16 14:57 | 显示全部楼层
51单片机没有操作系统,printf 本身不知道如何发送数据。必须通过重写底层字符输出函数,将数据发送到UART串口。
lzmm 发表于 2026-7-16 17:37 | 显示全部楼层
51 编译器自带库默认不支持长整型格式化
uytyu 发表于 2026-7-17 14:13 | 显示全部楼层
%d 或 %u              
wangdezhi 发表于 2026-7-18 17:13 | 显示全部楼层
%lu格式符具体怎么用?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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