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

研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结


前言

        见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》

        见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》

        见《研发日记,Matlab/Simulink避坑指南(三)——向上取整Bug》

        见《研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug》

背景介绍

        在一个嵌入式软件项目中,需要按照如下通信协议接收一帧CAN消息。思路是直接用Simulink Library中的CAN Unpack模块进行解包,示例如下:

问题描述

        按照上述示例,预想应该没有什么问题,但是实际运行起来,两个指令都接收不到。

分析排查

        既然指令接收不到,我就往前推一步检查报文是否接收到了。在程序中添加一个调试信号,示例如下:

        运行上述程序,看到有报文时,Counter Limited的值在增加,说明前面的CAN Receive模块没有问题。

        进一步检查CAN Unpack模块中的每一个参数,发现唯一不一致的地方是Length Bytes(DLC),示例如下:

解决方案

        把CAN Unpack模块中的Length Bytes(DLC)改成8,再次运行程序,可以正常接收该报文中的两个指令了。示例如下:

        异常问题不再出现,Bug修复完工。

总结

        CAN Unpack模块中的Length Bytes(DLC)参数,不只是一个解析参数,同时也是是一个判定条件参数,用改模块接收报文时,除了ID要一致外,DLC也必须一致。


        版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!

        上述例程使用的Demo工程,可以到笔者的主页查找和下载。

http://www.lryc.cn/news/288287.html

相关文章:

  • 机器人3D视觉引导半导体塑封上下料
  • (十二)Head first design patterns代理模式(c++)
  • C++从零开始的打怪升级之路(day21)
  • 《设计模式的艺术》笔记 - 观察者模式
  • Java如何对OSS存储引擎的Bucket进行创建【OSS学习】
  • ModuleNotFoundError: No module named ‘half_json‘
  • 深入探究 Android 内存泄漏检测原理及 LeakCanary 源码分析
  • Linux CentOS使用Docker搭建laravel项目环境(实践案例详细说明)
  • 第六课:Prompt
  • 网络安全(初版,以后会不断更新)
  • 开始学习Vue2(脚手架,组件化开发)
  • 平替heygen的开源音频克隆工具—OpenVoice
  • 【自动化测试】读写64位操作系统的注册表
  • php二次开发股票系统代码:腾讯股票数据接口地址、批量获取股票信息、转换为腾讯接口指定的股票格式
  • uniapp 在static/index.html中添加全局样式
  • acrobat调整pdf的页码和实际页码保持一致
  • ctfshow-命令执行
  • 【Python基础015】集合的用法
  • 解密神经网络:深入探究传播机制与学习过程
  • linux usb设备网络共享 usb/ip
  • 如何通过系统命令排查账号安全?
  • ​《WebKit 技术内幕》学习之九(3): JavaScript引擎
  • IS-IS:05 ISIS开销值和协议优先级
  • 群辉NAS的远程访问
  • 构建未来学堂:在线教育系统开发技术实践
  • EMQX 单机及集群搭建
  • SpringMVC-对静态资源的访问
  • 形参和实参
  • [git] windows系统安装git教程和配置
  • php的性能要比node.js高很多吗?