我有一个项目,我需要在其中创建一个perl脚本来将.hex文件解析为一个完整的CAN帧的.can文件以供发送。一旦解析了文件,它将由基于C#的GUI读取,该GUI将这些行转换为要发送的正确CAN消息。
我需要为.can包含的方面列表如下:
为TX命令添加延迟
添加解析器将忽略的注释
添加解析器将忽略的文件头注释 文件创建时,哪个文件,解析器版本等等
添加CRC(在文件本身上)
添加应用程序CRC(写入某个闪存位置)
这是我正在解析的.hex文件的一个示例:
:020000040000FA
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
在这个列表中我只缺少4号和5号。我一直在阅读什么是CRC以及如何使用它,所以我对这个主题有一些了解,但我不知道实现点关于如何处理这个问题,我将不胜感激。下面是我使用的.can文件示例:
//File used: app1FULL.hex
//Parser version: 0.2 alpha
//Date: Thu Oct 13 16:47:55 2016
TX:10:1537:8:45:EF:0B:F0:FF:FF:FF:FF //load flash
TX:10:1538:8:FA:CF:11:F0:FB:CF:12:F0 //load flash
TX:10:1539:8:E9:CF:13:F0:EA:CF:14:F0 //load flash
TX:10:1540:8:E1:CF:15:F0:E2:CF:16:F0 //load flash
TX:10:1541:8:D9:CF:17:F0:DA:CF:18:F0 //load flash
TX:10:1542:8:F3:CF:19:F0:F4:CF:1A:F0 //load flash
TX:10:1543:8:F6:CF:1B:F0:F7:CF:1C:F0 //load flash
TX:10:1544:8:F8:CF:1D:F0:F5:CF:1E:F0 //load flash
TX:10:1536:5:B:0:16:0:40:00:00:00:00:64 //flash write
RX:1000:1535:3:B:0:16:64 //expect response
PRINT:Boot has failed:Boot received all messages successfully
谢谢你们!