Autosar Dcm配置-特定NRC实现方式-基于ETAS软件

文章目录

    • 前言
    • 工具配置
    • 代码编写
    • 总结

前言

项目开发过程中,诊断服务一般客户需求或系统需求都会有特定NRC(一般为NRC22-条件不满足),也就会有特定的条件,需要手动加代码实现。本文介绍ETAS工具中配置的接口及简单实现。

工具配置

对于每一个服务,及每个服务中的子服务,都可以配置对应的user函数。以10服务为例:

在Dcm-DcmConfigSet-DcmDsd-DcmDsdServiceTables中配置SessionControlClass中的选项DcmRbDsdSidTabUserModeRuleFnc,此处配置的为自定义函数名
如果不配置,默认使用DcmAppl_UserServiceModeRuleService函数。也可以在该函数中进行自定义逻辑的判断。
此处示例配置如下:
image
对于子服务来说:
image
如果不配置,默认生成的函数为DcmAppl_UserSubServiceModeRuleService

配置完后,生成BSW代码

代码编写

查看生成的代码,10服务的检查自定义函数,如下所示
image
1002服务的检查自定义函数,如下所示:

image
对应的函数接口:


extern Std_ReturnType Dcm_SessionControlClass_Check(Dcm_NegativeResponseCodeType * Nrc_u8, uint8 Sid_u8);
extern Std_ReturnType DcmAppl_UserServiceModeRuleService(Dcm_NegativeResponseCodeType * Nrc_u8, uint8 Sid_u8);
extern Std_ReturnType Dcm_Programming_SessionControl_Check(Dcm_NegativeResponseCodeType * Nrc_u8, uint8 Sid_u8, uint8 Subfunc_u8);
extern Std_ReturnType DcmAppl_UserSubServiceModeRuleService(Dcm_NegativeResponseCodeType * Nrc_u8, uint8 Sid_u8,uint8 Subfunc_u8);

由上述接口可以很清楚的看到,对于Service的检查,只有Service的ID作为输入,Nrc_u8是我们要输出的。而对于包含子服务的检查,则会传递Service的ID及子服务ID。

此处我们自定义的两个函数需要自己实现:

10服务的示例如下:

Std_ReturnType Dcm_SessionControlClass_Check(Dcm_NegativeResponseCodeType * Nrc_u8, uint8 Sid_u8)
{Std_ReturnType retVal_u8 = E_OK;*Nrc_u8= 0x00;if(....) /* 此处增加自定义逻辑实现 */{*Nrc_u8 = 0x22;}return (retVal_u8);
}

此处无需判断Sid_u8,因为配置的是10服务的回调函数,肯定是10服务触发的。

1002服务的示例如下:

Std_ReturnType Dcm_Programming_SessionControl_Check(Dcm_NegativeResponseCodeType * Nrc_u8, uint8 Sid_u8,uint8 Subfunc_u8)
{Std_ReturnType retVal_u8 = E_OK;*Nrc_u8= 0x00;return (retVal_u8);
}

此处无需判断Sid_u8及Subfunc_u8,因为配置的是1002服务的回调函数,肯定是1002服务触发的。

细心的同学可能发现了,如果不配置自定义函数,其实也会进默认的check函数,该函数也是由用户实现的。所以其实不管对于什么服务或子服务,都可以在默认的函数中进行判断,没必须要再单独生成一个函数了。示例如下:

Std_ReturnType DcmAppl_UserSubServiceModeRuleService(Dcm_NegativeResponseCodeType * Nrc_u8, uint8 Sid_u8,uint8 Subfunc_u8)
{Std_ReturnType retVal_u8 = E_OK;*Nrc_u8= 0x00;if(((Sid_u8 == 0x10u && Subfunc_u8 == 0x02u) || (Sid_u8 == 0x11u && Subfunc_u8 == 0x01u) )   ){if(....) /* 此处增加自定义逻辑实现 */{*Nrc_u8 = 0x22;}}return (retVal_u8);
}

总结

一般在1002跳转boot,1101复位等服务中,需要判断一些安全条件(例如车速,蓄电池电压),防止车辆出现不受控的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/17835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中JSON数据的解析

在Java中,可以使用第三方库或者内置类库来实现对象与JSON数据的相互转换。 使用第三方库(例如Jackson)实现对象转JSON: // 导入Jackson库 import com.fasterxml.jackson.databind.ObjectMapper;// 定义一个对象 class Person {p…

特朗普竞选带火PoliFi,以Bitget为例

以特朗普系列Meme币为代表的政治金融(PoliFi)概念币市场正在掀起热潮,前美国总统特朗普(Donald Trump)在本月稍早公开力挺加密货币,接着又在周二宣布接受比特币、以太币、SOL、USDC、DOGE…等政治献金,让相关通证高涨。 据CoinGecko数据&…

HTML5 拖拽API应用

HTML5拖拽API应用 目录 设置可拖动元素监听拖拽事件设置目标区域使用 dataTransfer 对象传递数据自定义拖动图像HTML5 拖拽 API 允许开发者创建交互性强的 web 应用,让用户能够直接在浏览器中拖动元素,并将其放置到其他位置或目标元素上。 设置可拖动元素 要使一个 HTML 元…

鸿蒙开发接口图形图像:【@ohos.display (屏幕属性)】

屏幕属性 屏幕属性提供管理显示设备的一些基础能力,包括获取默认显示设备的信息,获取所有显示设备的信息以及监听显示设备的插拔行为。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-shizhen-skin/harmony-os/blob/master/…

【C++】继承(二)深入理解继承:派生类默认成员函数与友元、静态成员的奥秘

目录 派生类的默认成员函数①派生类的构造函数②派生类的拷贝构造函数③派生类的赋值构造④派生类的析构函数 继承与友元继承与静态成员 前言 我们在上一章讲解了: 继承三部曲,本篇基于上次的基础继续深入了解继承的相关知识,欢迎大家和我一起学习继承 派…

Julia编程09:异常处理

try-catch try 可能出错的程序 catch 异常类型变量名 异常处理程序 finally 无论如何最后都要执行的程序 end x [2, -2, "a"] for xi in x try y sqrt(xi) println("√", xi, " ", y) catch e if isa(e, DomainError) println("√…

探索Python中的随机数生成与统计分析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、随机数的魅力与实用性 1. 随机数生成基础 2. 批量生成随机数 二、随机数的高级应用&a…

java Stream流常用操作

文章目录 1. 简介1.1 Stream流的概念1.2 为什么需要使用Stream流 2. Stream流的创建2.1 从集合创建Stream2.2 从数组创建Stream2.3 使用Stream.of方法创建Stream2.4 使用IntStream, LongStream, DoubleStream创建Stream 3. Stream流的常用操作3.1 filter操作3.2 map操作3.3 fla…

设计模式六大原则之迪米特法则

文章目录 概念个人理解案例 小结 概念 迪米特法则指的是一个类/模块对其他的类/模块有越少的了解越好。 简单来说迪米特发展想要表达的思想就是:不应该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接…

windows中每日定时执行python脚本,解决问题

由于需要一个每天定时执行的任务,所以需要定时启动,网上看了很多方法,感觉不能在python脚本种写个while true 定时执行,占资源不说还不可靠。 最后考虑通过系统工具定时启动,发现linux中有crontab,windows…

前端 CSS 经典:水波进度样式

前言&#xff1a;简单实现水波进度样式&#xff0c;简单好看。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" cont…

git:Unable to negotiate问题解决

场景说明&#xff1a; 安装了Gitblit(自架的代码仓库服务)发现部分电脑无法推代码&#xff0c;报错误如下&#xff1a; Unable to negotiate with **** port 22: no matching host key type found. Their offer: ssh-rsa 并排队了账户权限问题。 解决方案&#xff1a; 1.打开问…

计算机原理 知识回顾

第一部分&#xff1a;计算机基础概念 计算机的定义 计算机的演化历程计算机的分类&#xff08;超级计算机、桌面计算机、便携式计算机等&#xff09; 计算机的基本组成 输入设备、输出设备中央处理单元&#xff08;CPU&#xff09;、存储器、主板 计算机的工作原理 数据输…

5.28 学习总结

一.CSS学习(一) 一、CSS简介 1、什么是CSS CSS&#xff1a;Cascading Style Sheet 层叠样式表是一组样式设置的规则&#xff0c;用于控制页面的外观样式 2、为什么使用CSS 实现内容与样式的分离&#xff0c;便于团队开发样式复用&#xff0c;便于网站的后期维护页面的精确…

uniapp sqlite数据库插件

uniapp 原生sqlite本地数据库管理 Ba-Sqlite_sqlite_三杯五岳-华为云开发者联盟

iptables练习题

目录 练习题1. 显示当前的iptables规则2. 允许所有来自192.168.1.0/24的TCP流量到本机的22端口&#xff08;SSH&#xff09;3. 禁止所有来自10.0.0.0/8的ICMP流量4. 允许所有出站流量5. 拒绝所有来自外部的HTTP流量&#xff08;80端口&#xff0c;tcp协议&#xff09;6. 删除IN…

数据恢复与取证软件: WinHex 与 X-Ways Forensics 不同许可证功能区别

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设备及…

期货学习笔记-斐波那契学习1

斐波那契数列介绍 斐波那契数列是1、1、2、3、5、8、13、21、34、55、89…据说这是数学家莱昂纳多 斐波那契研究兔子繁殖时发现的一个神奇数列&#xff0c;似乎大自然在按照这个数列进行演化&#xff0c;一个斐波那契数字是由该数列相邻的前两个数字相加得到的 在斐波那契交易…

oracle 核心进程

DBWn&#xff08;Database Writer&#xff09;&#xff1a;负责将数据库缓冲区中的数据写回磁盘&#xff0c;以保证数据的持久性。 LGWR&#xff08;Log Writer&#xff09;&#xff1a;负责将日志缓冲区中的日志写入到磁盘上的在线重做日志文件&#xff0c;用于数据库的恢复和…

基于STM32实现智能交通灯控制系统

目录 引言环境准备智能交通灯控制系统基础代码示例&#xff1a;实现智能交通灯控制系统 GPIO控制交通灯定时器配置与使用红外传感器检测车辆用户界面与显示应用场景&#xff1a;城市交通管理与自动化控制问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌…