首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印格式缓冲区在哪里?

打印格式缓冲区在哪里?
EN

Stack Overflow用户
提问于 2014-10-03 15:53:45
回答 2查看 623关注 0票数 4

我在一个受限的嵌入式系统上工作。

目前,我们将snprintf用于缓冲区,然后使用另一条语句将缓冲区打印到串行端口:

代码语言:javascript
复制
  char temp_buffer[256];
  int bytes_written = snprintf(temp_buffer, sizeof(temp_buffer),
                      "Solar system has %d planets\n",
                      10);
  if (bytes_written > 0)
  {
    Serial_Port_Output(temp_buffer, bytes_written);
  }

我想切换到printf,直接写到串口。根据我们编译器的文档,我截获了用于输出数据以使用串口的函数调用。(接口使用块写入:地址和字符数)。

printf函数可以使用字符缓冲区进行格式化,例如整数或浮点到文本。

问题:

  1. printf用于格式化的缓冲区在哪里?(在我做出改变之前,其他有疑问的人想知道。)
  2. 这是依赖于编译器(平台)的问题吗?

平台: Arm7tdmi处理器,片上系统,IAR编译器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-03 21:26:31

它是库而不是编译器依赖的,您应该查阅库的文档,并可能参考源代码。这个(也许是过时的) IAR C图书馆文献说:

由于一个完整的格式化程序需要很大的空间,所以有几个不同的格式化程序可供选择。有关更多信息,请参见IAR编译器参考指南。

当前IAR编译器引用讨论格式化程序选择,尽管在大多数情况下,链接器可以自动选择最合适的格式化程序。这些文档甚至还讨论了如果重新构建库(您可能需要一个源许可证),还可以进一步优化。

有些实现(特别是IAR)使用重要的堆栈空间。如果您想要完全控制,可以考虑使用开源实现(如微型印刷机 )。它不是一个完整的ISO实现,但适用于许多嵌入式应用程序。

票数 1
EN

Stack Overflow用户

发布于 2014-10-03 16:03:03

这是完全特定于实现的。printf没有义务使用任何缓冲区。当然,它拥有与FILE相关联的stdio缓冲区(在printf的情况下是stdout),但是如果程序关闭了setbuf/setvbuf的缓冲,这可能是零长度。printf也有可能有一个内部缓冲区;对于适当的C实现,这需要自动存储(“在堆栈上”),但是没有线程的低质量嵌入式存储可能使用静态缓冲区。在任何情况下,printf都被指定为工作方式,就像通过对fputc的重复调用一样,而且它当然可以在没有任何缓冲区的情况下以这种方式实现。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26182415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档