【发布时间】:2019-07-27 14:00:27
【问题描述】:
我正在努力使用 GCC 将 newlib 中的 printf 正确实施到我的 esp32 中。
我浏览了 newlib 文档,它为我提供了有关如何调用 printf 的一般信息,但没有向我解释后端实现。
根据我目前的研究,我确定 printf 将格式化的字符串输出到 STDOUT。在 PC 上这对我来说更容易理解,因为有一个控制台窗口可以显示 printf 的格式化输出,但是在嵌入式系统上,我知道你必须告诉库将 printf 的格式化输出重定向到哪里,这就是我在想办法。
再次,根据我的研究,我了解到需要一些函数来完成此操作,特别是函数 _write。
我发现如何弥合 printf 和使用 _write 函数之间的差距非常困难。我希望这里有人可以帮助我了解如何正确实现 printf。
如果我错过了一些清楚解释这一点的文档,请重定向我。我尝试阅读 newlib 文档以及 GCC 相关文档,但没有真正提及如何使用 printf,但是有很多关于如何调用 printf 和格式化字符串的文档,但这部分很容易。我需要知道如何从 MCU 的 STDOUT 中获取格式化字符串。
谢谢大家!
【问题讨论】:
-
您可以在 Web 上找到
printf()的实现及其或多或少复杂性的亲戚。如果你找到int printf(const char * restrict fmt, ...) { va_list args; va_start(args, fmt); int rc = vfprintf(stdout, fmt, args); va_end(args); return rc; },那么你有一个中继功能,你需要找到vfprintf()的实现。但这也是可用的…… -
@JonathanLeffler :除非使用 Newlib,否则已经有一个
printf()实现。我认为的问题应该是关于如何retarget Newlib 以便itsprintf()工作,而不是如何实施printf
标签: c gcc embedded printf newlib