【发布时间】:2013-01-23 09:30:03
【问题描述】:
我在 retarget.c 中实现了 fputc 和 fgetc,以便在 Cortex-M3 上通过 UART0 成功使用 printf。
但是,我想要第二个 uart 通道来获取更多调试信息。如何使用 printf 像 UART0 一样完美地集成它?
例如,使用 fprintf 到自定义目标并检查 fputc 要将字符发送到哪个目标..
例如。正常输出fprintf(UART0,"..");和调试输出fprintf(UART1,"..");
但是我看不到是否为 stdout 调用了 fopen,所以我正在努力了解如何手动实现它。 (如果我只是打电话给fprintf(RANDOM_VALUE,..),我不知道这会如何。
我想一旦我将它指向不同的“文件”,那么只需检查 fputc 中指向的内容,但这是我正在努力解决的 FILE 指针的初始设置。
也许可以通过某种方式来区分 stdout 和 stderr,尽管从两个单独的通道获取输入时我仍然遇到同样的问题。
fprintf 也在 microlib 中吗?如果没有,有没有更好的方法来实现这一点?
谢谢!
【问题讨论】:
-
您使用的是哪个 libc 库?这将取决于您自己的流处理是否容易实现。
-
我怎样才能找到这个?如果有帮助,我正在使用 Keil uVision。我看不到库类型的任何选项。
-
如果你想实现一个自定义的特殊情况流,你可以将它的数字硬编码为你的程序可以使用的常量,或者你可以让你的 fopen() 识别一个特殊的字符串,例如"/dev/UART1" 这将使任何最终阅读您的代码的有经验的开发人员都非常清楚该功能。
-
我认为使用 fopen 和 fclose 会很不方便,因为我希望它可以像标准输出一样可访问,并分布在代码中。仅选择一个随机 FILE* 值并在 fputc 中使用 switch 语句来检查该值是否有任何危险(如果匹配,则打印到 UART1;如果不匹配,则打印到 UART0)?还有其他东西使用这个指针吗?我担心的是,如果指针匹配内存映射中的任何其他内容,使用 fprintf 会干扰它吗?
-
我想我可以声明一个变量并使用该指针来确保它没有指向任何有害的地方?
标签: c embedded serial-port printf