这是个啥
SNOOPerToCSV 是用于将劳特巴赫 TRACE32-SNOOPer 录制的数据转换为CSV表格的工具,你可以很方便地通过本工具快速将SNOOPer录制的变量数据导出为CSV表格,并便捷地调整数据输出格式、时间轴等;
配合示波器和MatLab,可以很方便的实现对轴波形分析,方便运行时数据采集:

如何使用
它是一个非GUI程序,所以你需要使用终端来调用它,使用如下指令即可进行基础的数据转换:
SNOOPerToCSV.exe <file1> <file2> ...
只需要提供要处理的文件,本工具即可按照默认的时间轴及类型配置依次处理文件,默认的时间轴从0.00s开始,而配置的默认输出格式为无符号整型,如果你希望修改输出的格式和时间轴,可以通过添加如下参数实现:
1. -f <identification> <type> 指定特定标识的数据条目输出为特定类型
2. -t <time(s)> 指定时间轴起始
例如我想将 AAA.txt 文件以 -1.2s 为时间轴起始,并将名称中含有 Voltage 的条目以单浮点类型输出,可以使用以下指令:
SNOOPerToCSV.exe AAA.txt -t -1.2 -f Voltage float
<identification> 标识变量的方式,除了上述的子串名识别外,还可以使用ID进行匹配,这个ID会在你进行生成时输出到终端,例如上面的图片终端中有16个ID(劳特巴赫至多支持16个变量采样),此外也可以使用识别串同时指定多个变量,例如将名称中含有 Voltage 的条目和ID为11的条目输出为单浮点类型,你可以使用如下指令:
SNOOPerToCSV.exe AAA.txt -t -1.2 -f Voltage,11 float
即所谓识别串就是将子串名或ID以逗号(英文逗号)分隔的连续字符串作为 <identification> 输入;
要注意的是 Voltage,15, 这个识别串是非法的,末尾的逗号需要去掉;
在有多个文件输入时,ID匹配仅识别第一个文件中的条目,随后程序会记住这个ID对应的条目名称,在下个文件时识别记忆的条目名而非再次以ID进行识别,避免了劳特巴赫输出顺序导致的批量文件处理过程中数据格式错误;
当ID与子串名同时指定了一个条目时,子串名的优先级要高于ID;
支持的输出类型
默认支持的输出类型如下:
// Main.cpp:74
// 非法的类型输入
if (!(!strcmp(argv[count + 2], "uint") ||
!strcmp(argv[count + 2], "ubyte") ||
!strcmp(argv[count + 2], "uint8_t") ||
!strcmp(argv[count + 2], "uint16_t") ||
!strcmp(argv[count + 2], "uint32_t") ||
!strcmp(argv[count + 2], "uint64_t") ||
!strcmp(argv[count + 2], "int") ||
!strcmp(argv[count + 2], "sbyte") ||
!strcmp(argv[count + 2], "int8_t") ||
!strcmp(argv[count + 2], "int16_t") ||
!strcmp(argv[count + 2], "int32_t") ||
!strcmp(argv[count + 2], "int64_t") ||
!strcmp(argv[count + 2], "float") ||
!strcmp(argv[count + 2], "double")))
{
printf("Warning: invalid format type \"%s\",skip.\n", argv[count + 2]);
count += 2;
continue;
}
...
如上,默认支持的输出类型为stdint.h定义的标准类型和部分常用类型,如果你想添加自己的类型支持,需要修改这个非法类型过滤,并在Main:418后对新增的类型添加格式化输出:
// Main:418
// int8_t sbyte
if (!strcmp(target_value_node->value_type_str, "sbyte") ||
!strcmp(target_value_node->value_type_str, "int8_t"))
{
int8_t *value = (int8_t *)&(target_value_node->raw_value);
fprintf(output_file, ",%d", *value);
}
...
关于构建
本仓库所使用的构建平台及环境为如下:
OS:Windows11 Professional 24H2 (26100.4652)
Tool Chain:mingw-w64\i686-14.2.0-release-win32-dwarf-ucrt-rt_v12-rev2
构建关系由 Makefile 组织,使用 C17、C++17 标准,但由于并未使用高级特性,构建标准可自行调整;
完善构建环境后,在工作目录下使用 make、mingw32-make 即可进行构建;
本工具仅使用标准库,完全具备跨平台支持,但在其他平台、环境下需要对 Makefile 进行少量修改;
主要目录及说明
Git-Storage 本仓库目录
├─.vscode 用于vscode的配置文件
│ ├─c_cpp_properties.json VsCode感知引擎配置(需要C/C++插件)
│ ├─launch.json VsCode调试运行配置(需要C/C++插件)
│ └─tasks.json VsCode预构建脚本
├─Inc 头文件
│ └─(...)
├─Src 源文件
│ └─(...)
├─Img 本仓库的图片资源文件
│ └─(...)
├─Test 测试用文件
│ └─Lauterbach-SNOOPer.txt 测试用文件,SNOOPer输出
├─.gitignore 仓库忽略文件
└─Makefile 编译构建所用的Makefile