gpt4 book ai didi

c - 将 C 代码中的调试文本打印到 Lauterbach TRACE32

转载 作者:行者123 更新时间:2023-12-02 02:52:59 29 4
gpt4 key购买 nike

是否可以将调试文本从 C 代码(在嵌入式系统上运行)打印到 Lauterbach TRACE32(通过 Lauterbach 硬件连接)?以前我们用UART(串口)输出,现在不行了。

最佳答案

可以将文本从目标应用程序打印到 TRACE32。一些供应商将您搜索的机制称为JTAG 终端半主机 (ARM) 或HoSTLink (Synopsys)。

这是在 TRACE32 中使用 TERM 命令组处理的。

通常的做法是:

  • 将 t32term.c、t32term_memory.c 和 t32term.h 添加到您的项目中。您可以在 /demo/etc/terminal/t32term 的 TRACE32 安装中找到这些文件。

  • 使用定义的宏 T32_TERM_BLOCKED=1、T32_TERM_METHOD_MEMORY=1 和 T32_TERM_MEMORY_BLOCKED_SIZE=256 编译 t32term.c 和 t32term_memory.c。例如:

     TERMOPT:=-DT32_TERM_BLOCKED=1 -DT32_TERM_METHOD_MEMORY=1 -DT32_TERM_MEMORY_BLOCKED_SIZE=256
    gcc $(TERMOPT) -c -o t32term.o t32term.c
    gcc $(TERMOPT) -c -o t32term_memory.o t32term_memory.c

    当然,除了“gcc”之外,您还必须在此处使用针对您的目标的交叉编译器以及所有 CPU 特定选项。

  • 在您的应用程序中使用函数 T32_Term_Puts(const char *str) 将文本缓冲区发送到 TRACE32

  • 要使用 printf() 之类的东西,请围绕 T32_Term_Puts()vsprintf() 编写一个包装函数。某些编译器的 C 库已经提供了一些 printf(),它最终会调用一些弱声明的 puts() 函数,您可以用 T32_Term_Puts() 覆盖它。

  • 在链接期间确保缓冲区 T32_Term_Memory_Tar2HostBufferT32_Term_Memory_Host2TarBuffer 被放入未缓存的内存中。

  • 在 TRACE32 中使用以下命令:

     SYStem.MemAccess Enable   // Enable memory access to running CPU
    TERM.METHOD BufferE E:T32_Term_Memory_Tar2HostBuffer E:T32_Term_Memory_Host2TarBuffer
    TERM.GATE

TERM.GATE 窗口接收您使用 T32_Term_Puts() 发送的数据。 您必须保持打开状态。

TERM.METHOD 指定 TRACE32 如何从目标应用程序接收打印数据的方式。 BufferE 方法很常见,适用于所有支持在 CPU 运行时通过调试器读取内存的 CPU。如果无法使用 BufferE,您可能还需要使用其他方法。

对于 BufferE 方法,您必须允许调试器在 CPU 运行时访问目标内存。这是通过命令 SYStem.MemAccess Enable 完成的。根据您正在调试的 CPU 系列和 TRACE32 的版本,您必须使用关键字 CPUDAPNEXUS 而不是 启用

该机制不仅允许您向 TRACE32 发送文本。它还允许您从运行 TRACE32 的 PC 打开文件、将数据写入文件、获取系统时间或启动应用程序。

如果您的目标芯片包含 ITM 或 STM 硬件跟踪模块,并且您拥有 Lauterbach 的跟踪硬件(如 CombiProbe 或 PowerTrace),您还可以使用该机制将文本从您的目标应用程序发送到 TRACE32。

关于c - 将 C 代码中的调试文本打印到 Lauterbach TRACE32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61635744/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com