当前位置:网站首页>STC8A8K64D4(51系列单片机)printf打印数据异常的问题
STC8A8K64D4(51系列单片机)printf打印数据异常的问题
2022-04-21 11:19:00 【荻夜】
问题现象
本人在使用 STC8A8K64D4 的单片机做一个项目,使用 printf 函数打印一个带参数的调试信息时出现异常(已经正确重定向了 printf 函数),具体表现定义了8位的变量使用%X格式打印出的值却变成了16位,且赋值为0后任然打印出16位的随即数值;然后定义了一个16位的变量,使用 %d 格式化打印,也不能正确打印变量的值,而且打印其他异常的值,使用串口发送单字节的函数,分别发送高八位和低八位,又能正确将变量的值打印出来;且将数据格式化成字符串 使用 %s 就能正常打印数据
问题的解决
通过查阅资料,51 单片机 通过 printf 打印格式化数据的时候,不能使用 %d 之类的占位符,转而使用以下占位符:
| 待打印数据的大小 | 格式化的符号 | 备注 |
|---|---|---|
| 占位符 8位 | bd/bu | bd:有符号8位数据 bu:无符号8位数据 |
| 占位符 16位 | hd/hu | hd:有符号16位数据 hu:无符号16位数据 |
| 占位符 32位 | ld/lu | ld:有符号32位数据 lu:无符号32位数据 |
- 首先需要确定 printf 已经正确重定向到指定的串口上
/********************* Printf 重定向函数 ************************/
#if(PRINTF_SEL == 1)
char putchar(char c)
{
TX1_write2buff(c);
return c;
}
#elif(PRINTF_SEL == 2)
char putchar(char c)
{
TX2_write2buff(c);
return c;
}
#elif(PRINTF_SEL == 3)
char putchar(char c)
{
TX3_write2buff(c);
return c;
}
#elif(PRINTF_SEL == 4)
char putchar(char c)
{
TX4_write2buff(c);
return c;
}
#endif
- 51 单片机使用 printf 时,格式化数据是,使用上述表格中的格式化符号,具体测试如下:
/* 将函数放到 mian 函数里执行一遍 查看打印的值 */
void test51printf(void)
{
unsigned char a = 128;
char b = -15 ;
unsigned short c = 256;
short d = -25;
unsigned int e = 65535;
int f = -32765;
printf("a=%bu b=%bd c=%hu d=%hd e=%hu f=%hd \r\n",a,b,c,d,e,f);
printf("\r\n size(a)=%bu,size(c)=%bu,size(e)=%bu \r\n" ,sizeof(a),sizeof(c),sizeof(e));
}
打印的结果如下:
a=128 b=-15 c=256 d=-25 e=65535 f=-32765
size(a)=1,size(c)=2,size(e)=2
数据能够正常打印,问题解决!
PS:51单片机中 int = short int = 2个字节
版权声明
本文为[荻夜]所创,转载请带上原文链接,感谢
https://blog.csdn.net/u012121390/article/details/124183533
边栏推荐
猜你喜欢
![[interview ordinary people vs Expert Series] understanding of B tree and B + tree](/img/17/a81da0a2e6b0c7cb218879f1a79861.jpg)
[interview ordinary people vs Expert Series] understanding of B tree and B + tree

产品分享:Qt+OSG教育学科工具之地理三维星球

Teach you to easily solve CSRF Cross Site Request Forgery Attack

Xftp文件名称显示乱码解决方法

阅读材料:信息技术年谱

连接服务器报错No supported authentication methods available

常见工具 nc Wireshark反弹shell

【生活中的逻辑谬误】对人不对事和两难陷阱

MySQL修改最大连接数限制

10000 yuan gift pool play "Lighthouse" prize essay attack
随机推荐
塔米狗知识|股权转让合法程序有哪些?
Spark快速入门系列(5) | Spark环境搭建—standalone(2) 配置历史日志服务器
Matlab --- multi picture display of coordinate axis
Matlab --- select provinces and cities for application
现在有没有可以真正称得上是元宇宙的应用?
package.json
MATLAB GUI---学科选择(动画演示)
Teach you to easily solve CSRF Cross Site Request Forgery Attack
Pgpool II 4.3 Chinese Manual - introductory tutorial
北京师范大学第十六届程序设计竞赛决赛-重现赛&补题
程序员如何确保软件没 Bug?
10000 yuan gift pool play "Lighthouse" prize essay attack
P4 Tutorials---- source routing
MQ相关流程及各项内容
中天钢铁18个产品捧“金杯”
pgpool-II 4.3 中文手册 - 入门教程
后缀数组专项训练
UNIX philosophy and high concurrency
从B站和小红书看,如何做好社区产品?
AC自动机模版代码解析