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复位等服务中,需要判断一些安全条件(例如车速,蓄电池电压),防止车辆出现不受控的情况。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【高阶数据结构】 B树 -- 详解

一、常见的搜索结构 适合做内查找: 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。如果数据量很大,比如有 100G 数据,无法一次放进内存中,那就只能放在磁盘上了。 如果…

坦克飞机大战项目详解:从包结构到测试发布

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、项目初始化与包结构构建 代码案例: 二、资源文件与配置文件管理 代码案例…

关于NLTK

一、NLTK简介 下图来自NLTK官网:https://www.nltk.org/index.html NLTK,全称为Natural Language Toolkit,是一个用于处理和分析自然语言文本的Python库。它提供了一系列丰富的工具和资源,包括词汇资源(如WordNet&am…

【接口自动化_05课_Pytest接口自动化简单封装与Logging应用】

一、关键字驱动--设计框架的常用的思路 封装的作用:在编程中,封装一个方法(函数)主要有以下几个作用:1. **代码重用**:通过封装重复使用的代码到一个方法中,你可以在多个地方调用这个方法而不是…

【进程空间】通过页表寻址的过程

文章目录 前言介绍页表、页框、页目录的概念页框页表页目录页表和页目录的分配 一级页表和二级页表一级页表寻址过程 二级页表寻址过程 一级页表和二级页表的对比 前言 我们知道每个进程都有属于自己的虚拟地址空间,且每个进程的虚拟地址都是统一的。要想通过虚拟地…

JS逆向之企名科技

文章目录 初步分析定位js编写完整代码参考文献初步分析 目标网址:企名科技 抓包分析,发现是post请求 请求代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import requestsheaders = {Connection:

【主流分布式算法总结】

文章目录 分布式常见的问题常见的分布式算法Raft算法概念Raft的实现 ZAB算法Paxos算法 分布式常见的问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):…

玄机平台应急响应—webshell查杀

1、前言 这篇文章说一下应急响应的内容,webshell查杀呢是应急响应的一部分。那么什么是应急响应呢,所谓的应急响应指的是,当网站突然出现异常情况或者漏洞时,能够马上根据实际问题进行分析,然后及时解决问题。 2、应…

内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机

目录 内网安全-隧道搭建&穿透上线内网穿透-nps-自定义-上线NPS工具介绍搭建过程 nps原理介绍MSF上线CS上线 内网渗透-Linux上线-cs上线Linux主机1.下载插件2.导入插件模块3.配置监听器4.服务端配置5.配置C2监听器并生成木马6.执行木马 内网安全-隧道搭建&穿透上线 内网…

做抖店如何避免被同行内卷?这5点建议,可以解决这个问题

我是王路飞。 都说2024年的抖店不赚钱了,商家太多了,太内卷了,一点都不好做~ 那为什么依然有很多商家在坚持做呢?为什么依然有很多新手入局呢? 无非是抖店确实能带来可观的利润回报罢了。 那如何避免被同行内卷呢&…

idea中git检出失败

之前clone好好的,今天突然就拉取不下来了。很多时候是用户凭证的信息没更新的问题。由于window对同一个地址都存储了会话。如果是新的会话,必须要更新window下的凭证。 然后根据你的仓库找到你对应的账户,更新信息即可。

【前端】从手动部署到自动部署:前端项目进化之路

从手动部署到自动部署:前端项目进化之路 在前端开发的领域内,部署是一个不可忽视的环节。随着项目复杂度的增加和线上更新频率的提升,手动部署逐渐暴露出它的弊端。本文将带你从手动部署过渡到自动部署,完成前端项目进化的重要一…

Round-Robin 调度逻辑算法

Round-Robin 调度逻辑算法 1 Intro1.1 固定优先级1.2 Round-Robin算法 之前上学还是工作,都接触过调度算法:Round-Robin和weight-Round Robin算法,但只知道它的功能和目的是什么,没有具体了解如何实现的; 现在是工作上…

移动云服务器选购指南(图文教程详解)

目录 一、前言 二、基本概念 2.1 定义 2.2 部署形式 2.3 用处 三、主流平台 四、主流产品推荐 4.1 云电脑 4.2 云主机ECS 4.3 弹性公网 IP 五、选购指南 5.1 明确场景 5.2 明确需求 5.3 明确身份 新用户 老用户 5.4 明确时间 5.5 明确教程 六、总结 一、前言…

【多态】(超级详细!)

【多态】(超级详细!) 前言一、 多态的概念二、重写1. 方法重写的规则2. 重写和重载的区别 三、多态实现的条件四、 向上转型五、动态绑定 前言 面向对象的三大特征:封装性、继承性、多态性。 extends继承或者implements实现&…

短视频商城全套源码:开启电商新纪元

随着数字媒体的快速发展,短视频平台已经成为人们获取信息、娱乐和社交的重要渠道。在这样一个大背景下,短视频商城的兴起,无疑为电商行业带来了新的机遇和挑战。本文将探讨短视频商城全套源码的重要性,以及它如何助力商家和开发者…

详解Spring MVC

目录 1.什么是Spring Web MVC MVC定义 2.学习Spring MVC 建立连接 RequestMapping 注解介绍及使用 获取单个参数 获取多个参数 获取普通对象 获取JSON对象 获取基础URL参数 获取上传文件 获取Header 获取Cookie 获取Session 总结 1.什么是Spring Web MVC 官⽅对于…

生成式AI模型大PK——GPT-4、Claude 2.1和Claude 3.0 Opus

RAG(检索增强生成)系统的新评估似乎每天都在发布,其中许多都集中在有关框架的检索阶段。然而,生成方面——模型如何合成和表达这些检索到的信息,在实践中可能具有同等甚至更大的意义。许多实际应用中的案例证明,系统不仅仅要求从上…

《征服数据结构》目录

我们知道要想学好算法,必须熟练掌握数据结构,数据结构常见的有 8 大类,分别是数组,链表,队列,栈,散列表,树,堆,图。但如果细分的话就比较多了,比如…

华为WLAN实验继续-2,多个AP如何部署

----------------------------------------如果添加新的AP,如何实现多AP的服务----------- 新增加一个AP2启动之后发现无法获得IP地址 在AP2上查看其MAC地址,并与将其加入到AC中去 打开AC,将AP2的MAC加入到AC中 sys Enter system view, re…