【发布时间】:2011-01-11 04:06:55
【问题描述】:
我在微控制器的 c 语言示例代码中看到“printf”指令,特别是在 8051 中。由于微控制器没有固定的输出显示,“printf”指令有什么用?
【问题讨论】:
-
也许只是刺激器/调试器的一些存根?没有看到库源代码就无法判断。
标签: c embedded microcontroller firmware 8051
我在微控制器的 c 语言示例代码中看到“printf”指令,特别是在 8051 中。由于微控制器没有固定的输出显示,“printf”指令有什么用?
【问题讨论】:
标签: c embedded microcontroller firmware 8051
很有可能,因此您可以通过 RS232 端口或作为在线仿真器的虚拟输出连接调试控制台。
【讨论】:
printf 被定义为输出到 stdout 而不是“输出显示”,stdout 可以是任何流设备。通常在没有显示器的系统上,它将输出到串行接口 (UART),因此可以将终端或终端仿真器(例如 HyperTerminal 或 TeraTerm)用作显示设备。
一些开发环境实现了“半托管”,其中 stdio、stdin 和 stderr,甚至在某些情况下,文件系统由开发主机通过调试器接口(JTAG、ICE、SWD 等)提供。
通常,您的编译器库会为您提供挂钩或存根,以便您可以实现替代流 I/O 设备的驱动程序,例如,您可以实现一个,以便 printf 将输出到 LCD 显示器(如果您的设备有一个)。这称为“重定向”。
【讨论】:
您可以将微控制器连接到PC的串行端口并监控您的数据
打印
使用超级终端。您也可以将其用于诊断目的
【讨论】:
某些开发工具允许您在实现 putchar 或 putch 的情况下使用 printf。在此类工具中,由于您具有向某些设备发送字符的此功能,因此 printf 将在该设备上显示消息。
您只需进行正确的设备初始化,实现 putchar、putch 等(检查您的编译器/lib 文档),瞧!您的 printf 将按照您预期的方式运行。
PS:一些编译器/库不实现所有 printf 格式说明符。再次检查您的文档。
【讨论】: