将printf重新定位到串行端口

时间:2016-10-01 21:30:09

标签: c embedded printf stdout stm32

我想使用函数printf在串口上打印字符。我已经阅读了这两篇帖子12,但我不确定理解这句话:

1st link中说:

要启用printf功能,首先需要创建一个新的__FILE结构。然后使用FILE结构调用此结构。

为什么我必须创建__FILE结构我真的没有动摇这个句子。

2nd link中说

要完成与标准I / O库的分离,我们还必须重新定义__stdout__stdin。这些可以在__FILE结构声明下面的retarget.c文件中找到。

如果我重新定义这两个变量不是编译错误,我的意思是重新定义。

2 个答案:

答案 0 :(得分:1)

这可能是How to make printf work on STM32F103?

的重复

无论如何,我也会在上面的帖子中提出我的答案。

编写自己的printf实现是一个选项,可能是我认为最推荐的选项。从标准库实现中获取灵感并编写您自己的版本,仅满足您的要求。通常,您需要做的是,首先重新定位putc函数以通过串行接口发送char。然后使用putc自定义实现覆盖printf方法。也许,一种非常简单的方法是通过递归调用putc函数来逐字符发送字符串。

最后但并非最不重要的是,您可以找到一些轻量级的printf实现。这些轻量级实现提供的代码大小和功能集位于自定义编写的printf函数和库存标准prinf函数(也称为beast)之间。我最近尝试了这一点,并且非常满意它在ARM内核上的内存占用和所需的执行周期数量方面的性能。 http://www.sparetimelabs.com/tinyprintf/tinyprintf.php

-PS

某些时候复制了我自己的着作 - http://mycola.info/2015/02/09/lightweight-printfscanf-for-embedded-applications/

答案 1 :(得分:0)

在您的代码中添加这段代码

Longest simple path contains 4 nodes
[[0, 1, 2, 3], [0, 2, 1, 3]]

仅需编辑此行,请根据设备的串行端口驱动程序进行设置

int