1

我有一个带有英飞凌控制器的 ECU,其中闪现了一些 xyz 程序。现在可以在带有劳特巴赫硬件的 Trace32 调试器中实时查看程序变量的值。现在我必须在报告中手动记下所有值。我想使用 Trace32 API 访问这些值,使用 C 编程自动将这些值写入 excel 或记事本中。我尝试了他们的 API for Remote Control 和 JTAG Access 文档,但没有做太多。任何人都可以请指导吗?我什至无法配置 Trace32 软件,甚至无法向劳特巴赫发送一些命令。我的主要目的是我可以在 Trace32 GUI 中看到的值应该可以在 C 程序中使用 Trace32 API 访问。

4

1 回答 1

3

首先启用 TRACE32 的远程 API 端口。确保文件 c:\t32\config.t32 包含以下行(这两行前后必须有一个空行!):

RCL=NETASSIST
PORT=20000

要通过远程 API 读取变量myVariable的值并将其存储到日志文件中,请编写如下 C 应用程序:

#include "t32.h"
#include <stdio.h>

int main(int argc, char **argp) {
    uint32_t result;
    FILE    *fp;

    /* Connect to TRACE32 */
    T32_Config("NODE=", "localhost");
    T32_Config("PORT=", "20000");

    if ( T32_Init() != T32_OK )
        return 2;
    T32_Attach(T32_DEV_ICD);

    /* Read value of variable myVariable */
    if ( T32_Cmd("Eval Var.VALUE(myVariable)") != T32_OK ) {
        T32_Exit();
        return 3;
    }
    T32_EvalGet ( &result ); /* get data from previous Eval command */

    /* add data to logfile */
    fp = fopen ( "myLogfile.txt", "a" );
    if ( fp ) {
        fprintf( fp, "0x%08X\n", result);
        fclose( fp );
    }

    T32_Exit();
    puts("done");
    return 0;
}

还有其他方法可以通过远程 API 获取内存内容,但我认为这是最简单的方法。

现在编译此代码并将其与 hremote.c、hlinknet.c 和套接字库链接。例如使用这个makefile:

VPATH := . /cygdrive/c/t32/demo/api/src
CC    := i686-pc-mingw32-gcc.exe

myProg.exe : myProg.o hremote.o hlinknet.o
    $(CC) -o $@  $^ -lws2_32

%.o : %.c t32.h
    $(CC) -c $(addprefix -I,$(VPATH)) -D T32HOST_WIN -o $@  $<

然而,使用 PRACTICE 脚本 (*.cmm) 来完成任务可能更容易和灵活。

例如,像这样编写一个脚本 myScript.cmm:

OPEN #1 myLogfile.txt /APPEND                      // Opens file myLogfile.txt for adding data
WRITE #1 "0x"+FORMAT.HEX(8,Var.VALUE(myVariable))  // Write value of myVariable to logfile 
CLOSE #1                                           // Close logfile

使用命令在 TRACE32 GUI 的命令行中执行此脚本

DO myScript.cmm 

或者通过远程 API 执行这个脚本,例如使用 t32rem.exe:

C:\t32\bin\windows\t32rem.exe localhost port=20000 "DO myScript.cmm"
于 2015-04-14T20:17:07.737 回答