This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C123GH6PZ:使用 UARTPrintf 函数

Guru**** 1828310 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/736830/ccs-tm4c123gh6pz-using-the-uartprintf-function

器件型号:TM4C123GH6PZ

工具/软件:Code Composer Studio

您好!

我想在代码中使用"UARTprintf"函数、而不是"UARTputchar"

为此目的-我包括以下内容:

#include "driverlib/uart.h"
#include "utils/uartstdio.h"

我编译了代码、并得到以下错误:

说明资源路径位置类型
未解析的符号 UARTprintf、首先在./main.obj PID C/C++问题中引用

我错过了什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Shai、

    这些应该是您需要添加的唯一内容。 您能否尝试在清洁后清洁您的项目并重建?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我右键点击工作区中的项目名称、然后点击"Clean Project"
    然后、我重建了项目。

    问题仍然存在。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shai、

    好的、我们对示例进行了一些介绍、您需要做的缺失步骤是将 uartstdio.c 文件链接到您的 CCS 项目。

    这可以通过转到 TivaWare utils 文件夹并将 uartstdio.c 拖放到您的 CCS 项目中来实现。 它将询问您是要复制还是链接文件。 选择 Link (链接)。 我还建议您将其相对于 SW_ROOT 进行链接。

    如果您已正确完成此操作、在"Linked Resources"选项卡中"Resource -> Linked Resources"下的 CCS Project Properties 中、您将看到以下内容:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这确实解决了问题。

    但我完全没有得到它。

    但为什么需要这样做呢?

    在 main.c 中、我使用了:

    #include "utils/uartstdio.h"

    utils/uartstdio.c 是 TivaWare 的一部分。

    如您在所附的快照中所见、TivaWare 被添加到搜索路径中。

    我缺少什么??

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Shai、

    TivaWare 的 include 位于此处、是的、但 CCS 工程在链接函数之前未看到其所在的确切.c 文件。 我在这个周末查看您的帖子时、就像您一样、直到我今天上班并给予更多的思考。 这是我进入比较项目差异并确认链接不同的时候。 因此、"包含"和"链接"之间存在很大差异。

    您将看到、对于包含来自 driverlib 之外文件夹的多个文件的工程、每个文件都有相应的链接。

    我想 include 会告诉编译器在何处查找确定调用哪些函数的标头、 但实际添加.c 文件需要链接、以便可以在工程中编译该文件、而无需链接。h 文件会看到该文件、但无法使 CCS 编译该.c 文件、从而导致错误。

    如果您确实想知道、应该在 CCS 专家的论坛上向他们提问、我可能缺少一两个关键细节... 我只知道工具足够危险。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我明白您的观点-但在这种情况下:
    为什么问题只发生在 UARTprint 上、而不是我从 TivaWare 中使用的所有其他函数上?

    我将按照建议进行操作并在 CCS 论坛上发帖。
    非常感谢 Ralph!
    你很危险...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shai、

    TivaWare 的其他函数来自 Driverlib、后者作为包含 driverlib.lib 的包含在内的完整库、这意味着只需使用头文件的正确包含语句即可访问所有 API。 因此、无需将单个.c 文件添加到工程中、因为它们已在.lib 中编译。