我想使用函数printf
来打印串口上的字符。我读过这两篇文章1和 2 ,但我不确定是否理解manip:
在 1st link据说:
要启用 printf 功能,首先需要创建一个新的 __FILE
结构。然后使用 FILE 结构调用该结构。
为什么我必须创建__FILE
结构我并没有真正理解这句话。
在 2nd link据说
为了完成与标准 I/O 库的分离,我们还必须重新定义 __stdout
和 __stdin
。这些可以在 __FILE
结构声明下方的 retarget.c 文件中找到。
如果我重新定义这两个变量,那不是编译错误,我的意思是重新定义。
最佳答案
这可能是 How to make printf work on STM32F103? 的重复
无论如何,我也将在上面的帖子中发布的答案放在这里。
编写自己的 printf
实现是一种选择,而且对我来说可能是最推荐的选择。从标准库实现中获取一些灵感并编写您自己的版本,以满足您的要求。一般来说,您需要做的是,首先重新定位 putc
函数以通过串行接口(interface)发送 char 。然后使用 putc
自定义实现重写 printf
方法。也许,一种非常简单的方法是通过递归调用 putc 函数按字符发送字符串。
最后但并非最不重要的一点是,您可以找到一些轻量级 printf
实现。这些轻量级实现提供的代码大小和功能集介于自定义编写的 printf 函数和标准的 prinf 函数(又名“野兽”)之间。我最近尝试过这一点,并对它在 ARM 内核上的内存占用和所需执行周期数方面的性能感到非常满意。 http://www.sparetimelabs.com/tinyprintf/tinyprintf.php
-PS
从我自己的著作中复制 - http://mycola.info/2015/02/09/lightweight-printfscanf-for-embedded-applications/
关于c - 将 printf 重定向到串行端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811637/