用于微控制器的sprintf和printf有什么区别

Vis*_*ish 2 c embedded microcontroller rtos

我知道printf和sprintf之间的基本功能差异.但是,我想知道它们之间的一些时间/延迟相关的差异.显然,我想在一个自定义构建的RTOS的任务中使用它.你怎么看 ?我想知道它将如何影响系统的性能.(如果有的话).通常,我不使用打印功能,因为大量的延迟,但我必须在这里强制使用它.

仅供参考,使用RS232在终端窗口上显示输出.

谢谢.

mar*_*rko 6

这里的主要问题是printf()写入stdout可以(并且几乎肯定会)阻止调用线程.在嵌入式系统上stdout,作为一个非常慢的RS232端口并不罕见.

因此,您永远不会在实时线程中执行此操作,因为它会非常快速地变为非实时.

写入缓冲区sprintf()相当便宜(提供缓冲区已经分配).它当然不会阻止.

您可能会发现您的RTOS提供了一种异步日志记录机制,可以从实时线程调用,而不会有阻塞的风险.这只是一个环形缓冲区,您可以在其中编写终端输出,并使用较低优先级的线程将其打印到终端.