当前位置: 首页 > article >正文

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

问题现象

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

1b151e7fac3348a0b347c0f40d1879d0.png

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

问题分析

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

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

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

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

e4d7365273f04019b378f131a0acd190.png

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

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

e32fe581c96a4d3185aef176298d7e37.png

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

57e48bca9ac24da09c9fbf22ccbf60f8.png

起始位从7变成了8。

1f822457c570474f9cae9fb1076a5464.png

解决办法

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

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

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

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

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

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

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


http://www.kler.cn/a/429035.html

相关文章:

  • Armv8/Armv9架构从入门到精通-介绍
  • hydra破解密码
  • 企业级NoSQL数据库Redis
  • CAPL数据库操作
  • Spring Web MVC综合案例
  • 4.Spring AI Prompt:与大模型进行有效沟通
  • Bellman-Ford 算法详解及应用
  • c语言学生管理系统(内置数据库版本)
  • KVM 虚拟化
  • 深度学习中的数据并行
  • Qt学习笔记第51到60讲
  • 深入探索 Compose 渲染流程:从 UI 树到 Skia 绘制的实现解析
  • 关于csgo游戏搬砖作弊与封禁
  • 沪合共融 “汽”势如虹 | 昂辉科技参加合肥上海新能源汽车产业融合对接会
  • git 拉取代码时报错 gitignore Please move or remove them before you merge.
  • 21 网络编程:Go 语言如何玩转 RESTful API 服务
  • 数据分析: 基于CSDN博客排行榜TOP100的博客创作分析和建议
  • .vscode文件中各个脚本需要修改的地方
  • uni-app登录界面样式
  • python插入mysql数据
  • 漫画之家系统:Spring Boot技术下的漫画阅读优化
  • 【C语言】fscanf 和 fprintf函数
  • 【Qt移植LVGL】QWidget手搓LVGL软件仿真模拟器(非直接运行图形库)
  • 用Python开发一个经典贪吃蛇小游戏
  • 【Stable Diffusion】ComfyUI 基础教程-环境部署和插件安装
  • MQ 队列 的 通信过程