[CP_AUTOSAR]_通信服务_DCM模块(二)_通用设计元素

news2024/11/14 20:28:32

目录

  • 1、通用设计元素
    • 1.1、子模块
    • 1.2、NRC(Negative Response Code)
    • 1.3、Non-volatile 信息
    • 1.4、Types
      • 1.4.1、Atomic types overview
      • 1.4.2、Data array types overview
      • 1.4.3、Nested Data types overview
      • 1.4.4、Data types constraints
      • 1.4.5、Dcm_OpStatusType

  在前面 《[CP_AUTOSAR]_通信服务_DCM模块(一)》文中,简要介绍了CP_AUTOSAR 通讯服务(Communication Services)DCM 模块的功能概述、与其它模块之间的交互关系图以及部分的功能规范描述,本文将继续介绍 DCM 模块所包含的一些通用设计元素。

1、通用设计元素

1.1、子模块

  DCM 模块由以下3个模块组成:
  1、DSL(Diagnostic Session Layer):DSL 子模块确保诊断请求和响应的数据流,监督和保证诊断协议的时序,管理诊断状态(尤其是诊断会话和安全等级);
  2、DSD(Diagnostic Service Dispatcher):DSD 子模块处理诊断数据流,该子模块:
    2.1、接收网络上新的诊断请求,并将其提交给数据处理模块(DSP);
    2.2、发送由 DSP 子模块触发的诊断响应;
  3、DSP(Diagnostic Service Processing):DSP 子模块真正处理诊断服务请求;
  下图展示了子模块 DSP 、 DSL 和 DSD之间的交互总览关系。这些子模块及其子模块之间的交互实施并不强制,但可以提高功能规范的可读性。
在这里插入图片描述

1.2、NRC(Negative Response Code)

  规范定义了 UDS 和 OD 服务的负响应码,在 DCM 模块与其它 BSW 模块和 SWCs交互时,会使用到这些 NRCs。这些 NRCs 在 Dcm_NegativeResponseCodeType 数据中有定义。
  [SWS_Dcm_01075] 发送这些 NRCs 的顺序应该遵顼 《ISO-14229-1》文档中描述的。

1.3、Non-volatile 信息

  DCM 模块需要初始化一些非易失性的信息,AUTOSAR 不会描述如何去访问这个信息,或者在 DCM 模块在初始化之后是否可以被获得,因此访问非易失性信息由实施层面来定义,必须在集成期间确保。
  [SWS_Dcm_00870] DCM 模块应该确保 NvM 读出是否正确,读出的数据不正确,DCM 模块应启动默认对策。
  [SWS_Dcm_01048] 如果 DCM 取消 NvM 访问,应调用 NvM_CancelJobs();

1.4、Types

  [SWS_Dcm_00969] Dcm 模块应该处理非整数数据类型(例如,uint8[n]),要么像处理匹配好大小的整数数据类型一样,要么不解释其内容(如果 DcmDspDataEndianness 被配置为OPAQUE)。
  [SWS_Dcm_00970] Dcm 模块应该解释不清晰的数据为 uint8[n] ,并且应该总是将它映射到一个 n 字节大小的信号。对于不清晰的数据字节顺序,DcmDspDataEndianness 被配置为OPAQUE。
  [SWS_Dcm_00971] DCM 模块应该将字节顺序转换扩展到有签名的数据类型,字节顺序定义在文档《ISO 17356-3: Road vehicles – Open interface for embedded automotive applications – Part 3: OSEK/VDX Operating System (OS)》。

1.4.1、Atomic types overview

在这里插入图片描述

1.4.2、Data array types overview

在这里插入图片描述

1.4.3、Nested Data types overview

  用于 DIDs 和 Diagnostic Routines(诊断例程)的数据类型可以用嵌套的方式定义。DID或例程参数可以由几个元素组成,例如一个数组,其中每个数组元素都是一个结构体,该结构体由几个数据元素组成,这些数据元素由原语、数组或进一步的结构类型组成。
  1、根数据类型定义了一个嵌套的数据元素池(如 DcmDspDid 中的 DcmDspDidSignalCompositePool);
  2、根数据元素有一个锚点对象(例如,DcmDspDidSignal),这个锚点对象可以表示原始数据或数组数据,在这种情况下,没有引用池中定义的元素(比如,DcmDspDidSignalCompositeRef);
  3、如果锚点对象表示一个结构体,那么它定义了一个或多个对池元素的引用(例如,DcmDspDidSignalCompositeRef)。所引用的池元素构建了该结构体的内容;
  池元素本身可能就是嵌套定义,这允许结构体元素的任意嵌套。下图为 DcmDspDid 数据类型的嵌套定义:
在这里插入图片描述
  [SWS_Dcm_01633] 如果 DcmDspDidSignal 包含了至少一个 DcmDspDidSignalCompositeRef ,那么 DcmDspDidSignal 应该定义如下参数:
  1、DcmDspDidByteOffset;
  2、DcmDspDataByteSize;
  特别地,这意味着 DcmDspDidSignal 不应该定义任何的 DcmDspDidDataRef ,因为这将提供有关原语或数组数据类型的特定数据类型信息的详细信息。如果 DcmDspDidSignal 包含了 DcmDspDidSignalCompositeRef ,那么这个 DcmDspDidSignal 是嵌套的数据类型定义。
  [SWS_Dcm_01634] 嵌套的数据类型占据了连续数量的字节数(DcmDspDataByteSize),其从 DcmDspDidByteOffset 开始;
  [SWS_Dcm_01635] 在嵌套数据类型范围内定义的所有数据类型都应放置在 DcmDspDataByteSize 和 DcmDspDidByteOffset 定义的区域内。
  [SWS_Dcm_01636] 嵌套数据元素的 DcmDspDidByteOffset 值应该给出 DID 的绝对起始位置(而不是相对于各自的复合结构);
  [SWS_Dcm_01637] 每个 DcmDspDidSignalCompositePool 最多只能被 DcmDspDidSignalCompositeRef 引用一次。每个 DcmDspDidSignalCompositePool 元素都被明确定义为位于 DID 中的专用位置,并且只能在 DcmDspDid 的定义中出现一次;
  [SWS_Dcm_01638] DcmDspDidSignalCompositeRef 只能引用与 DcmDspDidSignalCompositeRef 元素,这些元素被定义在相同 DcmDspDid 作用域中,被定义为 DcmDspDidSignalCompositeRef 的拥有者;
  [SWS_Dcm_01639] 嵌套数据类型不单单适用于 DcmDspDid ,也适用于如下这些参数定义:
  DcmDspDid 对应于:
    — DcmDspStartRoutineIn;
    — DcmDspStartRoutineOut;
    — DcmDspStopRoutineIn;
    — DcmDspStopRoutineOut;
    — DcmDspRequestRoutineResultsIn;
    — DcmDspRequestRoutineResultsOut;
  DcmDspDidSignal 对应于:
    — DcmDspStartRoutineInSignal;
    — DcmDspStartRoutineOutSignal;
    — DcmDspStopRoutineInSignal;
    — DcmDspStopRoutineOutSignal;
    — DcmDspRequestRoutineResultsInSignal;
    — DcmDspRequestRoutineResultsOutSignal;
  DcmDspDidSignalCompositePool 对应于:
    — DcmDspStartRoutineInSignalCompositePool;
    — DcmDspStartRoutineOutSignalCompositePool;
    — DcmDspStopRoutineInSignalCompositePool;
    — DcmDspStopRoutineOutSignalCompositePool;
    — DcmDspRequestRoutineResultsInSignalCompositePool;
    — DcmDspRequestRoutineResultsOutSignalCompositePool;
  DcmDspDidSignalCompositeRef 对应于:
    — DcmDspStartRoutineInSignalCompositeSignalRef;
    — DcmDspStartRoutineOutSignalCompositeSignalRef;
    — DcmDspStopRoutineInSignalCompositeSignalRef;
    — DcmDspStopRoutineOutSignalCompositeSignalRef;
    — DcmDspRequestRoutineResultsInSignalCompositeSignalRef;
    — DcmDspRequestRoutineResultsOutSignalCompositeSignalRef;
  下图嵌套数据类型案例定义为由原语类型的 X 和 Y 来构成 A:DcmDspStartRoutineIn 的嵌套数据类型
在这里插入图片描述
  DcmDspStartRoutineIn 开始于位置 2 ,并且有 4 个字节。定义在结构体 A 中的元素 X 和 Y 未重叠,有一个间隙存在 X 和 Y 之间。
  由 X 和 Y 构成的结构体 A 的配置案例,如下图所示:
在这里插入图片描述

1.4.4、Data types constraints

  [SWS_Dcm_CONSTR_06002] 如果 DcmDspDataType 被设置为:UINT8_N, SINT8_N, UINT16_N,
SINT16_N, UINT32_N, SINT32_N 或者 UINT8_DYN,必须存在尺寸大小参数 DcmDspDataByteSize;
  [SWS_Dcm_CONSTR_06035] 如果 DcmDspDataByteSize 大于 2 且 DcmDspDataType 为 UINT16_N 或SINT16_N,限制 16 位数组的大小的参数 DcmDspDataByteSize 应为 2 的倍数;
  [SWS_Dcm_CONSTR_06036] 如果 DcmDspDataByteSize 大于 4 且 DcmDspDataType 为 UINT32_N 或SINT32_N,限制 32 位数组的大小的参数 DcmDspDataByteSize 应为 4 的倍数;
  [SWS_Dcm_CONSTR_06008] 只有当 DcmDspRoutineSignalType 设置为 SINT8_N、SINT16_N、SINT32_N、UINT8_N、UINT16_N、UINT32_N 或 VARIABLE_LENGTH 时,才需要使用 DcmDspRoutineParameterSize 参数;
  [SWS_Dcm_CONSTR_06011] 只有 RID (Routine ID,例程ID)中的最后一个参数可以有可变长度(DcmDspRoutineSignalType with VARIABLE_LENGTH 只对最后一个信号有效);
  [SWS_Dcm_CONSTR_06012] 如果 DcmDspPidDataType 设置为:UINT8_N, SINT8_N, UINT16_N, SINT16_N, UINT32_N 或 SINT32_N,则存在大小参数 DcmDspPidDataByteSize;
  [SWS_Dcm_CONSTR_06040] 如果 DcmDspPidDataByteSize 大于2,且 DcmDspPIDDataType 为 UINT16_N 或SINT16_N,则限制 16 位数组的大小参数 DcmDspPidDataByteSize 为 2 的倍数;
  [SWS_Dcm_CONSTR_06041] 如果 DcmDspPidDataByteSize 大于4,且 DcmDspPIDDataType 为 UINT32_N 或SINT32_N,则限制 32 位数组的大小参数 DcmDspPidDataByteSize 为 2 的倍数;
  [SWS_Dcm_CONSTR_06038] 当 DcmDspDataUsePort 等于 USE_BLOCK_ID 时,DcmDspDataType 应该为 UINT8_N;
  [SWS_Dcm_CONSTR_06026] S/R通信、NvRam访问或ECU信号访问时使用可变数据长度(当 DcmDspDataUse Port 设置为 {USE_DATA_SENDER_RECEIVER、USE_DATA_SENDER_RECEIVER_AS_SERVICE、USE_BLOCK_ID、USE_ECU_SIGNAL}时,不允许使用可变数据长度);
  [SWS_Dcm_CONSTR_06031] The DcmDspData 短名称 and DcmDspPid-Data 短名称应该不一样;

1.4.5、Dcm_OpStatusType

  对于使用 Dcm_OpStatusType 的操作,Dcm 模块工作如下:
  [SWS_Dcm_00527] 在第一次使用 Dcm_OpStatusType 调用操作时,Dcm 模块调用操作并将 OpStatus = DCM_INITIAL ;
  [SWS_Dcm_00528] 如果使用 Dcm_OpStatusType 操作的返回值为 DCM_E_FORCE_RCRRP,则 Dcm 模块将调用 RCR-RP 的发送请求(NRC 0x78传输),并且在 RCR-RP 发送完成之前,Dcm 模块不会实现进一步的操作调用。
  [SWS_Dcm_00529] 在 [SWS_Dcm_00528] 上下文中,完成 RCR-RP 的发送确认,DCM 模块回调操作,应该将 OpStatus 设置为 DCM_FORCE_RCRRP_OK ;
  [SWS_Dcm_00530] 如果使用了 Dcm_OpStatusType 的操作返回值为 DCM_E_PENDING,DCM 模块在每个轮询函数 Dcm_MainFunction 中调用 OpStatus = DCM_PENDING 的操作。

   更多内容可参考 CP_AUTOSAR_总目录,点击跳转

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

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

相关文章

第一周、、

7-1 入度与出度 分数 10 全屏浏览 切换布局 作者 黄龙军 单位 绍兴文理学院 求有向图G中各顶点的入度与出度。建议分别采用邻接矩阵和邻接表这两种不同的存储结构完成。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组…

2024年,这4款思维导图在线工具帮你高效作图

思维导图是一种强大的思维工具,它能够帮助我们更好地处理信息、解决问题。很多人都不知道要怎么制作,我整理的这4款工具是目前很受欢迎的思维导图工具,使用起来也很简单。 1、福昕导图软件 传送门:pdf365.cn/naotu 这是一款制作…

kubernetes 集群组件介绍

kubernetes 集群组件介绍 Kubernetes 架构 在Kubernetes(k8s)集群中,主节点(Master Node)和工作节点(Worker Node)都运行特定的软件组件,它们共同管理和运行容器化的应用程序。以下…

SD卡参数错误:深度解析与数之寻软件恢复实战

一、SD卡参数错误:数据与设备的隐形杀手 在数字化时代,SD卡作为便携存储设备,广泛应用于相机、手机、无人机及各类电子设备中,承载着人们珍贵的照片、视频、文档等重要数据。然而,SD卡在使用过程中,有时会…

天津有哪些SOLIDWORKS代理商?

随着数字化转型的步伐加快,越来越多的企业开始寻求高效的三维设计解决方案来提高生产力和创新力。在天津,亿达四方作为SOLIDWORKS官方授权的代理商,正成为众多企业的首选合作伙伴。本文将详细介绍亿达四方提供的服务和优势,帮助您…

CTFHUB-web-RCE-过滤运算符

开启题目 查看源码发现管道符被过滤,使用分号;拼接注入,发现了 flag 的可疑文件 127.0.0.1;ls 使用 cat 查看 flag 文件,右键查看页面源代码发现了 flag 127.0.0.1;cat flag_229701159030749.php

IP地址申请SSL证书,实现https访问

一般情况下,SSL证书都是通过域名来申请的,但是很多单位没有域名或者不方便提供域名,只能提供IP地址,那么如果想实现IP地址的https访问,就得申请IP地址专用SSL证书,市面上专供IP地址使用的SSL证书服务商比较…

数字孪生平台:构建智慧未来,重塑空间智能生态的钥匙

数字孪生平台这一创新概念的勃然兴起,不仅是技术的飞跃,更是对空间信息处理与决策智慧化、生态构建的一次世代跃迁跃进。本文旨在深度剖析数字孪生平台的内核、运作机制、应用前景及其对智慧生态的深远影响。 数字孪生平台:定义与构想 数字…

【Python基础】Python六种标准数据类型中哪些是可变数据,哪些是不可变数据

文章目录 1.基本介绍可变数据类型不可变数据类型2.可变和不可变到底指的是什么?可变(Mutable)不可变(Immutable)总结1.基本介绍 Python 中的六种标准数据类型分为可变数据类型和不可变数据类型。以下是这些数据类型的分类: 可变数据类型 列表(List) 列表是一种有序集…

分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测

分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测 目录 分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测&a…

【Python】一文向您详细介绍 *(星号)和 **(双星号)

🚀【Python】一文向您详细介绍 *(星号)和 **(双星号) 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇…

什么是网格策略?高抛低吸神奇—网格交易

网格交易主要是根据行情的波动,自动进行短线的高抛低吸操作,从而达到止损 止盈或者降低持仓成本的目的。 网格策略,是一种利用‘交易档位’模式对标的进行机械式买入卖出操作的量化 策略,是一个适用于震荡行情的经典策略。 适合做…

防火墙标签解决轮询错误

接上文(LVS实验——部署DR模式集群),以http和https为例,当在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样就出现了一个轮询错乱的问题 当第一次访问80被轮询到RS2后下次访问443仍然可能会被轮询…

一键翻译 | 分享一个更高级、更AI的翻译插件

最近AutoGPT不是更新了嘛 我也打算搭建一个来玩玩。 不过呢,官方文档都是英文,阅读起来还是比较费劲的 之前用的翻译插件实在难用,即卡而且翻译不准 在网上找了一个新的AI翻译插件,发现贼好用,速度上很快&#xff…

鹏鼎控股:最新面试求职SHL逻辑测评笔试题库讲解及真题分享

鹏鼎控股(深圳)股份有限公司,成立于1999年4月29日,是一家专业从事印制电路板(PCB)设计、研发、制造与销售的企业。公司产品广泛应用于通讯、消费电子、汽车、服务器等多个领域,服务全球市场。鹏…

猫咪除浮毛攻略,口碑好的宠物空气净化器推荐

养猫咪的幸福与苦恼是同时存在的,一边喜爱它柔软的毛发,一边担心它乱飞的浮毛。无论是客厅、卧室还是书房,只要有猫咪活动的地方,都可能有毛发、皮屑等痕迹。铲屎官平日的清理主要是对家具、地板表面,去除可见的宠物毛…

Prometheus安装,带资源

文章目录 1.简述2.安装node_expoter3.安装redis_expoter(非必需)4.SpringBoot(非必需)5.安装prometheus6.查看prometheus的Targets7.安装grafana 资源下载-资源下载-资源下载 提取码: i97g 1.简述 样例会安装以下组件&#xff0…

C++之智能指针深入学习:从入门到精通!

简介 本文详细介绍了 C 中的 RAII 与智能指针等技术的基本概念与常用技巧。 资源管理技术:RAII 下面是对 RAII 的一个简单的介绍: 简而言之就是:RAII(Resource Acquisition Is Initialization)是一种由 C 之父 Bjar…

C#:为什么在多线程环境中操作委托是线程安全的? c的函数指针=>C#委托进化过程详解

文章目录 函数指针>委托使用委托组合委托为什么在多线程环境中操作委托是线程安全的调用带有返回值的委托调用带引用的委托 总结 函数指针>委托 typedef int (*Cal)(int, int); //定义函数指针 int Sum(int a, int b) {return a b; } int main() {int a 9, b 2, c …

【网络】网络的发展历程及其相关概念

1.什么是网络 计算机网络是指将一群具有独立功能的计算机通过通信设备以及传输媒体被互联起来的,在通信软件的支持下,实现计算机间资源共享、信息交换或协同工作的系统。计算机网络是计算机技术与通信技术紧密结合的产物,两者的迅速发展渗透形…