gpt4 book ai didi

c++ - 是否有格式处理器可以编写我自己的类似 printf 的函数并保留 %d 样式参数,而不使用 sprintf?

转载 作者:行者123 更新时间:2023-12-04 07:51:34 25 4
gpt4 key购买 nike

我正在为 MCU 编写一个串行接口(interface),我想知道如何创建类似 printf 的函数来写入串行 UART。我可以写入 UART,但为了节省内存和堆栈空间,并避免临时字符串缓冲区,我宁愿直接写入而不是对字符串执行 sprintf() 然后写入字符串通过串行。没有内核,也没有文件处理,所以像 fprintf() 那样的 FILE* 写法将不起作用(但 sprintf() 可以).

有没有什么东西可以处理每个字符的格式化字符串,这样我就可以在解析格式字符串时逐个字符地打印出来,并应用相关参数?

我们正在使用 newlib作为 efm32-base project 的一部分.

更新

我想指出,最终我们实现了 _write() 函数,因为这就是所有 newlib 需要点亮 printf 的地方。

最佳答案

标准 C printf 函数系列没有“打印到字符回调”类型的功能。大多数嵌入式平台也不支持 fprintf

首先尝试为您的平台挖掘 C 运行时,它可能有一个内置的解决方案。例如,ESP-IDF 有 ets_install_putc1(),它本质上是为 printf 安装一个回调(虽然它的 ets_printf 已经打印到 UART0)。

否则,还有专门为嵌入式应用程序设计的替代 printf 实现,您可以根据自己的需要进行调整。

例如mpaland/printf有一个将字符打印机回调作为第一个参数的函数:

int fctprintf(void (*out)(char character, void* arg), void* arg, const char* format, ...);

另请参阅此相关问题:Minimal implementation of sprintf or printf .

关于c++ - 是否有格式处理器可以编写我自己的类似 printf 的函数并保留 %d 样式参数,而不使用 sprintf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66945754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com