首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于C程序访问应用程序变量的Trace32劳特巴赫API

用于C程序访问应用程序变量的Trace32劳特巴赫API
EN

Stack Overflow用户
提问于 2015-01-21 18:56:05
回答 1查看 2.6K关注 0票数 1

我有一个带有Infineon控制器的ECU和一些在它中闪烁的xyz程序。现在,在劳特巴赫硬件的Trace32调试器中,可以实时地看到程序变量的值。现在,我必须手动记录报告中的所有值。我想使用Trace32 API访问这些值,使用C编程在excel或记事本中自动写入这些值。我尝试了他们用于远程控制和JTAG访问文档的API,但是做得不多。有人能指点一下吗?我甚至不能配置Trace32软件,甚至不能向Lauterbach发送一些命令。我的主要目的是我可以在Trace32 GUI中看到的值应该可以使用Trace32 API在C程序中访问。

EN

回答 1

Stack Overflow用户

发布于 2015-04-14 20:17:07

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

代码语言:javascript
复制
RCL=NETASSIST
PORT=20000

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

代码语言:javascript
复制
#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获取内存内容的方法,但在我看来,这是最简单的方法。

现在编译这段代码并将其链接到hemote.c、hlinknet.c net.c和套接字库。例如,使用这个makefile:

代码语言:javascript
复制
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 $@  $<

但是,使用实践脚本(*.cmm)来执行任务可能要简单得多,也要灵活得多。

例如,编写这样的脚本myScript.cmm:

代码语言:javascript
复制
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图形用户界面的命令行中使用以下命令执行此脚本

代码语言:javascript
复制
DO myScript.cmm 

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

代码语言:javascript
复制
C:\t32\bin\windows\t32rem.exe localhost port=20000 "DO myScript.cmm"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28074701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档