打印
[牛人杂谈]

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

[复制链接]
2263|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
查看例子你会发现,大部分都是用了printf打印消息。那么怎么实现的呢?
我们可以看到在工程里有个library文件夹,里面有几个文件,除了跟必须的有关,就有一个跟这个printf有关


这个文件就是retarget.c
重定向文件。
沙发
598330983|  楼主 | 2018-6-22 16:58 | 只看该作者
我们看到该文件里

编译后我们逐级追踪定义

使用特权

评论回复
板凳
598330983|  楼主 | 2018-6-22 17:00 | 只看该作者

不成想竟然追踪到了这里,哈哈,这就是实现发送给串口0一个字符的关键所在。

使用特权

评论回复
地板
598330983|  楼主 | 2018-6-22 17:01 | 只看该作者
而具体的stdio.h里面的printf已经封装起来了,这里你看不到具体实现了。

使用特权

评论回复
5
springvirus| | 2018-6-22 17:06 | 只看该作者
只要重定向fputc,就可以了

使用特权

评论回复
6
598330983|  楼主 | 2018-6-22 17:17 | 只看该作者
springvirus 发表于 2018-6-22 17:06
只要重定向fputc,就可以了

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

使用特权

评论回复
7
小明的同学| | 2018-6-22 22:33 | 只看该作者
肯定是靠近上级的最好了,那就是fput,有的我看人家写的也可能是putchar

使用特权

评论回复
8
xujunyi3611| | 2018-6-24 11:54 | 只看该作者
半主机重定向了吗?还是用的是串口,只不过封装了一下。

使用特权

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

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

使用特权

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

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

使用特权

评论回复
11
heimaojingzhang| | 2018-6-25 14:44 | 只看该作者
官方例程里边会不会有

使用特权

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

本版积分规则

249

主题

5397

帖子

22

粉丝