研发日记,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工程,可以到笔者的主页查找和下载。

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 22:30:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 22:30:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 22:30:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 22:30:04       18 阅读

热门阅读

  1. Git的常用命令

    2024-01-26 22:30:04       36 阅读
  2. JVM实战(33)——内存溢出之内存使用率过高

    2024-01-26 22:30:04       39 阅读
  3. 三、详解Redis分布式锁&Redisson分布式锁

    2024-01-26 22:30:04       33 阅读
  4. 本人原创写的用PHPps支付宝支付凭证截图的源码

    2024-01-26 22:30:04       29 阅读
  5. apt-mark详解

    2024-01-26 22:30:04       30 阅读