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

LIN总线CAPL函数——校验和段(Checksum)测试(linGetChecksum)

  • 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
  • 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
  • 🍅 玩转CANoe,博客目录大全,点击跳转👉

请添加图片描述

目录

    • 校验和段(Checksum Feild)
    • linGetChecksum函数
    • 验证LIN报文校验和正确

校验和段(Checksum Feild)

在这里插入图片描述

  • 校验和段是一个字节,对帧中所传输的内容进行校验

在这里插入图片描述

  • 校验和分为标准型校验和(Classic Checksum)及增强型校验和(Enhanced Checksum),如表3.2 所示。
  • 校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于256 时就减去255),并将所得最
    终的和逐位取反,以该结果作为要发送的校验和。

在这里插入图片描述

linGetChecksum函数

在这里插入图片描述

测试示例代码如下:

on linFrame *
{write("this.id = 0x%x , linGetChecksum = 0x%x",this.id,linGetChecksum(this));
}
  • 测试结果

在这里插入图片描述

在这里插入图片描述

验证LIN报文校验和正确

  • 如下面代码,Calculate_Checksum函数计算校验和,然后和CAPL内置函数linGetChecksum读取的校验和比较
on linFrame *
{byte cal_CheckSum,j;byte get_CheckSum;byte data[8];for(j=0;j<this.dlc;j++){data[j]  =this.byte(j);}cal_CheckSum = Calculate_Checksum(this.id,data,this.dlc);get_CheckSum = linGetChecksum(this);if(cal_CheckSum != get_CheckSum){write("error : id = 0x% ,计算的校验和 = 0x%x , 读取的校验和 = 0x%x",this.id,cal_CheckSum,get_CheckSum);}//write("id = 0x%x ,计算的校验和 = 0x%x , 读取的校验和 = 0x%x",this.id,cal_CheckSum,get_CheckSum);
}byte Calculate_Checksum(byte id,byte data[],byte len)
{word sum;byte  i;sum = 0;// 通信报文是增强型校验和,包含数据段和PID段//诊断报文是标准型校验和 ,只包含数据段if (id!=0x3C && id!=0x3D)                                                          {sum=linGetProtectedID(id);}for(i = 0; i < len; i++){sum +=data[i];if(sum&0xff00){sum&=0x00ff;sum+=1;}  } sum=~sum; return (byte)sum;
}

测试结果:

Program / Model	id = 0x11 ,计算的校验和 = 0xee , 读取的校验和 = 0xee
Program / Model	id = 0x12 ,计算的校验和 = 0x6d , 读取的校验和 = 0x6d
Program / Model	id = 0x20 ,计算的校验和 = 0x2e , 读取的校验和 = 0x2e
Program / Model	id = 0x21 ,计算的校验和 = 0xec , 读取的校验和 = 0xec
Program / Model	id = 0x24 ,计算的校验和 = 0xe9 , 读取的校验和 = 0xe9
Program / Model	id = 0x25 ,计算的校验和 = 0x29 , 读取的校验和 = 0x29
Program / Model	id = 0x22 ,计算的校验和 = 0xef , 读取的校验和 = 0xef
Program / Model	id = 0x23 ,计算的校验和 = 0x92 , 读取的校验和 = 0x92
Program / Model	id = 0x30 ,计算的校验和 = 0xf , 读取的校验和 = 0xf
Program / Model	id = 0x10 ,计算的校验和 = 0x1b , 读取的校验和 = 0x1b
Program / Model	id = 0x11 ,计算的校验和 = 0xee , 读取的校验和 = 0xee
Program / Model	id = 0x12 ,计算的校验和 = 0x6d , 读取的校验和 = 0x6d
Program / Model	id = 0x20 ,计算的校验和 = 0x2e , 读取的校验和 = 0x2e
Program / Model	id = 0x21 ,计算的校验和 = 0xec , 读取的校验和 = 0xec
Program / Model	id = 0x24 ,计算的校验和 = 0xe9 , 读取的校验和 = 0xe9
Program / Model	id = 0x25 ,计算的校验和 = 0x29 , 读取的校验和 = 0x29
Program / Model	id = 0x22 ,计算的校验和 = 0xef , 读取的校验和 = 0xef
Program / Model	id = 0x23 ,计算的校验和 = 0x92 , 读取的校验和 = 0x92
Program / Model	id = 0x30 ,计算的校验和 = 0xf , 读取的校验和 = 0xf
Program / Model	id = 0x10 ,计算的校验和 = 0x1b , 读取的校验和 = 0x1b

在这里插入图片描述

23

7

  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    18

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QT事件用法详解
  • 【网络安全 | 代码审计】JFinal之DenyAccessJsp绕过
  • GBase8c主备版500升级步骤
  • 基于R语言的统计分析基础:使用键盘输入数据
  • 重新认识一下JNIEnv
  • RFID技术实现消防物资消防车无感化智能管理设计方案
  • ECMAScript与JavaScript的区别
  • 【leetcode】树形结构习题
  • 张雪峰分享:未来不容错过的5个证书考试
  • 直播开播极速流,如何有效接入?
  • git常用命令(patch补丁和解决冲突)
  • 什么时候分表,什么时候分库?
  • C++:opencv获取矩阵中的最大最小值--cv::minMaxLoc
  • MySQL——数据库的高级操作(二)用户管理(3)删除普通用户
  • 面试—多线程
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 2019.2.20 c++ 知识梳理
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Git同步原始仓库到Fork仓库中
  • js数组之filter
  • QQ浏览器x5内核的兼容性问题
  • rc-form之最单纯情况
  • React-Native - 收藏集 - 掘金
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 简单易用的leetcode开发测试工具(npm)
  • 如何设计一个比特币钱包服务
  • 入门级的git使用指北
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • puppet连载22:define用法
  • 正则表达式-基础知识Review
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • (003)SlickEdit Unity的补全
  • (19)夹钳(用于送货)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二十六)Java 数据结构
  • (附源码)计算机毕业设计ssm电影分享网站
  • (六)软件测试分工
  • (转)负载均衡,回话保持,cookie
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net 4.0发布后不能正常显示图片问题
  • .NET CLR Hosting 简介
  • .NET Framework .NET Core与 .NET 的区别
  • .Net 中Partitioner static与dynamic的性能对比
  • ;号自动换行
  • @Autowired @Resource @Qualifier的区别
  • @GetMapping和@RequestMapping的区别
  • @RequestBody的使用
  • @RequestMapping 的作用是什么?
  • @Transactional类内部访问失效原因详解
  • [1204 寻找子串位置] 解题报告
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作