[牛人杂谈]

如何在单片机上使用printf函数

[复制链接]
2052|10
手机看帖
扫描二维码
随时随地手机跟帖
598330983|  楼主 | 2018-6-22 16:55 | 显示全部楼层 |阅读模式
查看例子你会发现,大部分都是用了printf打印消息。那么怎么实现的呢?
我们可以看到在工程里有个library文件夹,里面有几个文件,除了跟必须的有关,就有一个跟这个printf有关
255065b2cb957a29b4.png

这个文件就是retarget.c
重定向文件。
598330983|  楼主 | 2018-6-22 16:58 | 显示全部楼层
我们看到该文件里 343565b2cb9dbbd908.png
91905b2cba189886b.png
编译后我们逐级追踪定义

使用特权

评论回复
598330983|  楼主 | 2018-6-22 17:00 | 显示全部楼层
952985b2cba7d53515.png
不成想竟然追踪到了这里,哈哈,这就是实现发送给串口0一个字符的关键所在。

使用特权

评论回复
598330983|  楼主 | 2018-6-22 17:01 | 显示全部楼层
而具体的stdio.h里面的printf已经封装起来了,这里你看不到具体实现了。

使用特权

评论回复
springvirus| | 2018-6-22 17:06 | 显示全部楼层
只要重定向fputc,就可以了

使用特权

评论回复
598330983|  楼主 | 2018-6-22 17:17 | 显示全部楼层
springvirus 发表于 2018-6-22 17:06
只要重定向fputc,就可以了

不知道这个重定向文件是怎么规定的。如果不包含这个文件那么我是需要写哪个函数呢?
发现这个最终的在串口0发送字符的函数,是经过层层调用才使用的。那么printf是引用的哪个呢是fputc吗

使用特权

评论回复
小明的同学| | 2018-6-22 22:33 | 显示全部楼层
肯定是靠近上级的最好了,那就是fput,有的我看人家写的也可能是putchar

使用特权

评论回复
xujunyi3611| | 2018-6-24 11:54 | 显示全部楼层
半主机重定向了吗?还是用的是串口,只不过封装了一下。

使用特权

评论回复
598330983|  楼主 | 2018-6-24 20:02 | 显示全部楼层
xujunyi3611 发表于 2018-6-24 11:54
半主机重定向了吗?还是用的是串口,只不过封装了一下。

主要是不清楚stdio.h里的print是先调用的哪个实现一个字符发送的,竟然也没法定位到。

使用特权

评论回复
springvirus| | 2018-6-25 08:20 | 显示全部楼层
598330983 发表于 2018-6-22 17:17
不知道这个重定向文件是怎么规定的。如果不包含这个文件那么我是需要写哪个函数呢?
发现这个最终的在串口 ...

printf最终调用fputc,应该可以这样理解吧,你再搜搜,看看官方的解释吧

使用特权

评论回复
heimaojingzhang| | 2018-6-25 14:44 | 显示全部楼层
官方例程里边会不会有

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

227

主题

5273

帖子

22

粉丝