- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
📘前言
-
🍅 车载测试必不可少的是刷写,行业内有很多格式的刷写文件,
S19
,HEX
,BIN
,还有一些主机厂自定义的比如Volvo
/Geea
的VBF
,Chery
的CBF
等 -
🍅 本章节先了解
BIN
文件
目录
- 📘前言
- 📙 BIN文件的格式简介
- 📙CAPL解析BIN文件源码
- 🌎总结
📙 BIN文件的格式简介
-
是以bin为后缀的文件,是一种二进制文件。不同于 HEX,S19文件, BIN文件用文本软件打开就是乱码的。如下
-
用Hex-view软件可以打开。
📙CAPL解析BIN文件源码
- BIN文件解析比HEX和S19文件解析简单的多,打开文件后,用 fileGetBinaryBlock 以二进制方式一下子就把所有数据都读出来了。
- 这里为了和HEX,S19解析统一,我们用了统一的变量来保存数据,这样我们的代码就是具有兼容性的。
/*@!Encoding:936*/
variables
{
dword fileHandle;
const dword text_module = 0;
const dword binary_module = 1;
enum File_Type { file_header, file_data,file_tail };
struct FlsData_Segment
{
byte seg_index;
dword start_address;
dword data_size;
dword data_offset;
} F_SegmentInfor[10];//暂时定数组为10
long SegCounter; //记录文件被分成多少个段
long AllDataBytes; // 文件所有的数据字节数
byte FlsData_BufferArr[0x1FFFFFF]; //文件中的所有字节被解析后放在该数组
}
on key 'a'
{
Flash_Parse_BIN("E:\\ApplicationData.bin");
}
long Flash_Parse_BIN(char f_path[])
{
long fileHandle;
dword i;
fileHandle = OpenFileRead(f_path,binary_module);
if (fileHandle == 0 )
{
write("Failed to open File %s !",f_path);
return 0 ;
}
write("File:%s Opened",f_path);
SegCounter = 1;
F_SegmentInfor[0].start_address = 0;
F_SegmentInfor[0].data_offset = 0;
F_SegmentInfor[0].data_size = fileGetBinaryBlock (FlsData_BufferArr,elcount(FlsData_BufferArr),fileHandle);
for(i = 0; i < SegCounter; i++)
{
write(" 起始地址:0x%X, 结束地址:0x%X, 数据长度:%6X字节\r\n", F_SegmentInfor[i].start_address, F_SegmentInfor[i].start_address + F_SegmentInfor[i].data_size - 1, F_SegmentInfor[i].data_size);
}
fileClose(fileHandle);
return 1 ;
}
- CAPL脚本跑出来的结果和HexView对比,结果一致,说明我们解析没问题
🌎总结
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。