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.
工具与软件:
您好!
在内部使用 printf()为 FreeRTOS 任务分配1024字节堆栈后、我会在构建时得到以下警告:
creating output section ".sysmem" without a SECTIONS specification
在 HALCoGen 中、我找不到可以指定它的部分(我想它不是一种功能)。 能否请我举个例子来说明如何继续、也许是针对 sys_link.cmd 文件?
另外、printf 函数是否通过 scilinREG 进行"管道化"? 我应该期待任何输出吗?
提前感谢!
您好、Varban、
.system 段表示分配的动态存储器大小。
请参阅以下主题、这里我介绍了如何更改或计算动态内存量。
——
谢谢、此致、
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 的视频教程示例:
——
谢谢、此致、
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://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:
感谢您的详尽解释!