API-интерфейсы Trace32 Lauterbach для доступа к программе на языке C

У меня есть ECU с контроллером Infineon и в нем мигает какая-то программа xyz. Теперь значения переменных программы можно увидеть в режиме реального времени в отладчике Trace32 с аппаратным обеспечением Lauterbach. Теперь я должен записать все значения вручную в отчете. Я хочу получить доступ к этим значениям с помощью API-интерфейсов Trace32, используя программирование на C, чтобы автоматически записывать эти значения в Excel или блокнот. Я попробовал их API для удаленного управления и доступа к документу JTAG, но ничего не смог сделать. Может кто-нибудь, пожалуйста, руководство? Я даже не мог настроить программное обеспечение Trace32 и даже не послать какую-то команду Лаутербаху. Моя основная цель - чтобы значения, которые я вижу в графическом интерфейсе Trace32, были доступны в программе на языке C с использованием API-интерфейсов Trace32.

1 ответ

Сначала включите удаленный порт API TRACE32. Убедитесь, что файл c:\t32\config.t32 содержит следующие строки (до и после двух строк должна быть пустая строка!):

RCL=NETASSIST
PORT=20000

Чтобы прочитать значение переменной myVariable через удаленный API и сохранить его в файле журнала, напишите приложение на 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 с помощью команды

DO myScript.cmm 

Или выполните этот скрипт через удаленный API, например, с помощью t32rem.exe:

C:\t32\bin\windows\t32rem.exe localhost port=20000 "DO myScript.cmm"
Другие вопросы по тегам