Vector软件CANdb++的信号起始位Bug

问题现象

前几天导入DBC文件发现不对劲,怎么生成代码的起始地址都怪怪的,检查下工程里面的配置,还真的是这样,一路查到输入文件------DBC文件,发现是DBC文件就有错误:一些CAN报文之后8字节长度,也就是64位,有些信号起始位都跑到70+甚至100+去了,能正常就怪了。

于是找来提供DBC文件的同事确认原因,同事重新在通讯工具当中下载下来,发现并没有这个问题,我也重新下载一份,也没有这个问题。这就让我很疑惑了,我并没有修改过DBC文件,只是使用软件CANdb++打开查看过,这不应该会导致如此大的差异。

问题分析

我用重新下载"没有信号起始位问题的DBC文件"和之前下载"有信号起始位问题的DBC文件"进行记事本格式对比,居然没有一丁点差异!

原来我没有对"有信号起始位问题的DBC文件"进行保存,点击保存之后就有差异了,差异也跟CANdb++显示的一致------这么说是我打开之后不小心改到的了?

我又重新下载一份DBC文件进行试验,详细回忆着自己在这期间对DBC文件干了什么,看看我做了什么样的操作会导致不小心修改掉。

发现在进入信号定义之后,跳转Signal选项卡时偶尔会弹出这个对话框,意思就是有信号在报文里面的位置重叠了。我打开报文layout查看,发现还真是这么回事。用记事本格式打开,发现CANdb++的layout的显示跟记事本格式打开居然不一致!

在尝试几次之后我确定,就是在"进入信号定义之后,跳转Signal选项卡"这个操作,会导致信号在报文的起始位被CANdb++修改掉------这是个Bug!!

譬如我这个信号原来在layout里面是这样出现的。

做过"进入信号定义之后,跳转Signal选项卡"这个操作之后,回去layout里面变成了这样。

起始位从7变成了8。

解决办法

我逐渐摸出问题出现的规律,它的出现要同时符合3个条件:

1、数据分布要跨字节,这意味着它不一定需要大于8字节,只需要跨字节就能满足。

2、信号需要为Motorola字节序。

3、使用CANdb++软件打开之后,刚好做过"进入信号定义之后,跳转其他选项卡"操作,不一定要跳转Signal选项卡。

针对问题的出现方式,制定出2种对策:

1、设计时规避跨字节信号或者Motorola字节序,这种会限制设计的发挥,不太推荐。

2、使用CANdb++软件打开DBC文件之后,无论做过任何操作,都不要保存,保证输入文件维持在输入时的状态。

相关推荐
福大大架构师每日一题11 小时前
RAGFlow v0.27.1 发布:新增 Azure DevOps、You.com 搜索,修复海量 Bug,性能大幅提升!
bug·azure·devops
树码小子11 小时前
测试(6) - bug篇(上)
软件测试·bug
周杰伦的稻香1 天前
[bug]npx @deepseek-ai/dsh plugin ...无限吃内存卡死
bug
T01156182 天前
全栈项目实战手记|艺培场馆课时预约小程序底层安全、交互、分包全量迭代复盘
安全·小程序·bug·前端实战·全栈项目实战手记·小程序实战
霍格沃兹测试学院-小舟畅学3 天前
DeepSeek Harness vs Claude Code:谁更会修Bug、跑测试?
bug
咖啡星人k3 天前
2026 AI 自动化测试:让 AI 帮你写用例、跑测试、修 Bug(MonkeyCode 云端实战)
人工智能·功能测试·单元测试·测试用例·bug·集成测试
Shadow(⊙o⊙)5 天前
Bug调试1.0
bug
T01156186 天前
艺培场馆课时预约小程序用户端 & 后台联动踩坑上篇(预约、课时、缓存、消息、学员端自身问题)
java·缓存·小程序·bug·全栈项目实战手记·艺培课时系统‘’
zone_z6 天前
07 · 等待事件与 OWI 方法:从 OSW 到 BUG 的完整破案实录
linux·数据库·oracle·ffmpeg·bug·troubleshooting
黑猫学长呀7 天前
【驱动开发常见问题】编译出现rm: cannot remove `asm/arch‘: Is a directory
驱动开发·单片机·嵌入式硬件·bug·编译报错·kernrl