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.

[参考译文] TMS570LS1224:Hercules TMS570 - printf ()

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1393917/tms570ls1224-hercules-tms570---printf-in-2024

器件型号:TMS570LS1224
主题中讨论的其他器件:HALCOGENTM4C129ENCPDT

工具与软件:

您好!

在内部使用 printf()为 FreeRTOS 任务分配1024字节堆栈后、我会在构建时得到以下警告:

creating output section ".sysmem" without a SECTIONS specification

在 HALCoGen 中、我找不到可以指定它的部分(我想它不是一种功能)。  能否请我举个例子来说明如何继续、也许是针对 sys_link.cmd 文件?

另外、printf 函数是否通过 scilinREG 进行"管道化"? 我应该期待任何输出吗?

提前感谢!

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

    您好、Varban、

    .system 段表示分配的动态存储器大小。

    请参阅以下主题、这里我介绍了如何更改或计算动态内存量。

    (+) BQ79616EVM-021:rti_timeout allway = 0 - Code Composer Studio 论坛- Code Composer Studio ︎- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    谢谢  Jagadish!  我只是让 printf()在 FreeRTOS 中工作。  

    现在、最后一个问题...

    printf()是如何转发到 CCS 控制台的? 它是独立的虚拟 COM 端口吗? 是否有将其重定向到 SCI 的配置设置?

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

    您好、Varban、

    printf ()是如何转发到 CCS 控制台的? 它是独立的虚拟 COM 端口吗? 是否有将其重定向到 SCI 的配置设置?

    根据我的理解、它不是单独的虚拟 COM 端口。 printf 只基于 JTAG 调试器通信、因此我们不能将其重定向到 SCI。

    我不知道您使用的是定制电路板还是特定于 TI 电路板?

    如果您正在使用 TI 特定的任何电路板、则那里会有板载调试器、因此通过使用该板载调试器、他们提供了配置单个 USB 同时用作 JTAG 和 COM 端口。

    因此、使用同一个 USB 连接器、我们可以刷写和调试控制器、还可以并行与控制器进行串行通信。 但如果您使用定制电路板、并且如果您仅为 JTAG 提供配置、则无法实现。在这里、我们只能通过 JTAG 进行刷写或调试。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的  Jagadish:

    我正在使用 Hercules Launchpad XL2套件。 设备管理器的输出如下:

    CCS 控制台是否通过其中一个虚拟 COM 发送?

    或者它是不是只与 JTAG 有关?

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

    您好、Varban、

    是的、您可以使用 COM5 (用户 UART)将数据从控制器发送到 PC。

    但在这里、您不能使用 pritnf 向 UART 端口发送数据、而是应该使用 SCI 例程。

    例如、浏览 HALCoGen 中的"帮助主题"部分

    在这里、您可以找到一个名为 SCI/UART 的示例:

    按照本示例中给出的步骤、在支持的情况下将数据发送到 COM5。

    配置完成后、您可以在最后找到示例代码:

    您可以在此处看到、客户正在发送数据字符串、如"Hercules"、"Microcontrollers"和"Texas Instruments"等。

    如果您在串行通信工具中设置上述 UART 配置、那么所有这些字符串将被传输到 COM5。 因此、类似地、无论您要传递给 printf 语句的字符串都可以传递到 sciDisplayText 函数。

    如果需要、您还可以参考以下常见问题解答中 SCI 的视频教程示例:

    (+)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    再次感谢 Jagadish!

    但是、我知道如何在 SCI 上"实现"我版本的 printf。

    在上面的文章中、我很好奇 CCS 到底是如何使用 JTAG 端口来发送字符串消息的。

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

    您好、Varban、

    实际上、是不是 CCS 通过 JTAG 向 COM 端口发送消息、实际上这些消息是从控制器传输的。

    以下是 Launchpad 中的基本连接:

    LaunchPad 上会有一个 称为 TM4C129ENCPDT 的控制器、该控制器将用作 XDS110调试探针。 该 IC JTAG 和 UART 将连接到控制器 JTAG 和 SCI。 该 XDS110控制器的另一端将通过 USB 连接到 PC。

    在这里、TM4C129ENCPDT  可以执行两个独立的功能、

    1. USB 连接 JTAG

    USB 转 UART (SCI)

    所以、每当您打开 CCS 并调试工程时、都将通过 USB 转换为 JTAG。 同样、如果是 SCI 驱动程序 API、并且尝试从控制器向 PC 上的串行 COM 发送或接收数据、则 USB 转 UART 将会发生这种情况。

    根据我的理解、printf 的工作原理如下所示、printf 数据将通过控制器的 JTAG 发送到 XDS110、并从 XDS110发送到 USB、以及从 USB 发送到 CCS。 我认为这个路径不会在控制器中使用 SCI。 因此、很难直接在 COM 端口上查看这些数据、因此更好、更简单的方法是使用我的上述方法。

    ——
    谢谢、此致、
    Jagadish。

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

    Jagadish、

    看起来它实际上是使用 JTAG 来将 printf ()的"输出"传输到 CCS 控制台的。 请参阅以下内容:

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/485440/printf-statement-using-jtag-terminal-for-tms570ls3137-and-28335-processors

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_tips_for_using_printf.html

     

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

    您好、Varban、

    好像它实际上使用 JTAG 来将 printf ()的"输出"传输到 CCS 控制台。 请参阅以下内容:

    是的、这是正确的、我也试图解释相同的内容:

    printf 数据将通过控制器的 JTAG 发送至 XDS110、从 XDS110发送至 USB、并从 USB 发送至 CCS。

    请参阅、末尾 JTAG 位于控制器和 CCS 之间、因此 printf 数据只通过 JTAG 从控制器传输到 CCS 控制台。

    在我的测试中、我还发现了以下内容:

    您可以看到、printf 数据最初存储在控制器的闪存中

    接下来、数据将从该闪存移动到 RAM 中的动态存储器:

    然后、从该动态存储器中、数据将 作为 JTAG 命令复制到控制器 RAM 中的_CIOBUF_中、如下所示:

    生成 JTAG 命令并将此命令发送到 CCS 后、CCS 将解码数据并在控制台窗口中打印数据:

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的  Jagadish:

    感谢您的详尽解释!