串口传输通过串口显示和printf显示的区别

先看图,摆现象

在这里插入图片描述
这段程序的显示,那绝对没有疑问
在这里插入图片描述
但是用printf函数显示
在这里插入图片描述
多了一个0,这好像是字符串是以\0结尾吧,那我明白了。
在这里插入图片描述
但是,问题不在这多了个0,问题在于

为什么printf能在串口调试助手上显示出来

老铁,我不懂哎,不懂那就对了。
我们知道Printf是打印函数,但是为什么能让串口调试助手打印出来,我搜索发现啥也没找到,
突然发现这么一串代码在这里插入图片描述

高人指点告诉我重定项C库函数printf到串口,然后就可以使用printf函数在串口打印了。原来这么一回事呀,我看看这个定向函数也是这么一回事,那我记住了“重定项C库函数printf到串口,然后就可以使用printf函数在串口打印**”对记住了,但是这个函数在哪运行呢,FILE *f 接收值在哪呢,抓马。。。
不行必须得找出来,现在就已经触及到知识盲区了,得给大脑补补水…

线索1

标准库函数的默认输出设备是显示器, 要实现在串口或 LCD 输出,必须*重定义标准库函数里调用的与输出设备相关的函数,这里获取了一个线索,标准库函数的输出设备是显示器,意思是我们重定向的意义就是让串口打印和串口相关联?

线索2

继续看大佬的这篇文章,不好意思大佬我就是学着玩悟了。
printf() 之类的函数使用了半主机模式,半主机是用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘(那这意思就是说在编译器启用半主机模式后将运行编译器的电脑当作了输入输出接口,从而调用电脑的输入输出设备来实现输入输出操作)。利用半主机模式我们在调用C库输入输出调用的就是电脑的输入输出接口。但是串口打印又是另外一种输入输出方式,要想调用输入输出函数,必须把输入输出函数那套搬过来,不用电脑接口打印了,用串口,这个时候重定向派上作用,将输入输出的字符发送到串口的寄存器上,实现串口打印。好自己给自己解释 通了,现在阶段我自己给自己说服了。

但是为啥单纯串口显示和利用重定向的串口显示有差异?

也就是说不用重定向的串口打印识别不到\0,但是重定向的识别到了。当我猛回头我明白了,不用重定向的串口打印不就是do while嘛
在这里插入图片描述
识别到\0就停止了,猪头好痛。
而重定向是通过C库将字符串一整个给串口寄存器当然包含字符串的结束位了,猪头又不痛了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值