IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STC8A8K64D4(51系列单片机)printf打印数据异常的问题 -> 正文阅读

[嵌入式]STC8A8K64D4(51系列单片机)printf打印数据异常的问题

问题现象

本人在使用 STC8A8K64D4 的单片机做一个项目,使用 printf 函数打印一个带参数的调试信息时出现异常(已经正确重定向了 printf 函数),具体表现定义了8位的变量使用%X格式打印出的值却变成了16位,且赋值为0后任然打印出16位的随即数值;然后定义了一个16位的变量,使用 %d 格式化打印,也不能正确打印变量的值,而且打印其他异常的值,使用串口发送单字节的函数,分别发送高八位和低八位,又能正确将变量的值打印出来;且将数据格式化成字符串 使用 %s 就能正常打印数据

问题的解决

通过查阅资料,51 单片机 通过 printf 打印格式化数据的时候,不能使用 %d 之类的占位符,转而使用以下占位符:

待打印数据的大小格式化的符号备注
占位符 8位bd/bubd:有符号8位数据 bu:无符号8位数据
占位符 16位hd/huhd:有符号16位数据 hu:无符号16位数据
占位符 32位ld/luld:有符号32位数据 lu:无符号32位数据
  1. 首先需要确定 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
  1. 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个字节

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:58:47  更:2022-04-18 18:01:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:41:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码