【发布时间】:2016-10-31 15:45:25
【问题描述】:
我有带有各种调试消息的现有代码。我们的嵌入式系统没有终端的外部连接。我想修改 printf 使其输出到内存位置,而不是映射到 FIFO 的 STDOUT。我想我需要找到写我自己的outbyte/outnum。只是似乎找不到我可以抓取东西的 GNU 代码。
我在 Xilinx FPGA 中运行 microblaze 处理器。所有打印语句都用于调试。我们正在运行 GNU 工具(Xilinx SDK)。为了开发,能够在设计中粘贴一个 UART,并将 UART 连接到几个测试点。
当我们准备好部署时,我将不再有这种可见性。我们确实有一个 USB-to-Serial 连接,但它看起来像一个 fifo,而不是嵌入式系统的串行端口。我们有一个通过此链接发送消息的协议。我正在考虑向我们的协议添加调试消息。我想将我的打印语句重定向到一个缓冲区,然后处理这个缓冲区。
我试图通过重写 outbyte 代码来获取现有的 printf (xil_printf) 并创建我自己的 cc_printf,但只是无法深入研究代码以了解如何操作。 (坦率地说,我是 VHDL/硬件专家)。
总体代码大小为数万行 C 代码。我的部分可能是 3-4 千行代码。基本操作是系统的软件/硬件更新通过 USB 端口进入并移动到 FLASH 存储器。我的代码解析来自 USB 到串行链路的传入数据包。基本上有一个位告诉我在接收缓冲区中有一个准备好的数据包。我处理数据包并写入闪存。作为协议的一部分,有 ACK/NACKs/Aborts。我目前使用 printf 将状态打印到我的实验台版本的系统。
如上所述,我想将这些打印输出嵌入到我们的协议中。我没有与 printf 结婚,并且会使用其他一些打印功能。我想打印出消息和数据。如果其他东西会是一个更好的起点,我可以接受。对我来说,最大的问题似乎是获取打印的输出并将其指向何处。
【问题讨论】:
-
fprintf?dprintf? -
在嵌入式系统上使用 stdio.h 没有多大意义。您最好使用一些通用的 UART 打印程序。您的 MCU 可能附带应用说明,说明如何快速组装 UART 驱动程序。
-
什么类型和大小的代码(数千行源代码行)?什么嵌入式系统目标?你如何编译它?用什么编译器?请编辑您的问题以改进和激励它!
-
即使在编辑之后,我们仍然不知道代码大小和用途。