AUTOSAR —— DCM模块简介

概述

AUTOSAR的DCM模块是诊断通讯模块,只要遵循的协议就是ISO 14229-1,包括UDS会话层和应用层,对底层通讯协议没有要求,可以是CAN、Lin或以太网(DoIP)等。

DCM模块里面主要有三个子模块:DSL、DSD和DSP:

DSL-Diagnostic Session Layer

诊断会话层主要有以下三个作用:

  • 处理诊断请求和响应数据流。
  • 管理诊断状态(会话状态和安全状态)。
  • 管理时间参数。

DSD-Diagnostic Service Dispatcher

诊断服务调度程序是 DSL 和 DSP 之间的桥梁,处理 DSL 的诊断请求数据,经过处理后调用 DSP 中的处理程序;将 DSP 处理完成后发送的响应数据传递给 DSL。

DSP-Diagnostic Service Processor

诊断服务处理程序,包含每个诊断服务具体的处理函数。如0x10服务、0x11服务的具体实现函数都是在这个模块里。

三个模块之间的交互关系如下图所示:

在这里插入图片描述
DSL层负责接收和发送诊断报文,并将诊断数据或发送结果传递给DSD层,同时还会维护诊断会话、安全等级等诊断状态;DSD层接收到DSL发送的诊断请求后,会进行初步判断和处理,分配给每个诊断服务,然后调用DSP中的诊断服务处理函数进行诊断处理;DSP中的诊断处理函数在执行过程中可能会控制诊断会话或安全访问状态,所以又会通过接口函数来控制DSL层的状态。

### 关于AUTOSAR中的SchM模块 #### 功能与作用 在 AUTOSAR 架构下,操作系统 (OS) 和运行时环境 (RTE) 之间存在多个基础软件(BSW) 模块。为了协调这些 BSW 模块之间的交互并管理其调度行为,引入了 SchM(Scheduler Management)模块[^1]。 该模块负责为各 BSW 模块调用周期性的任务处理函数,在特定的关键时刻通知相应的 BSW 模块何时启动以及完成它们的任务。这有助于确保不同模块间的同步性和有序性,从而提高整个系统的稳定性和效率。自 V4.0 版本起,这一功能已经被集成到了 RTE 当中。 此外,通过合理配置 SchM 的参数设置,可以实现对不同模块间通信的有效控制。例如,在 Dcm 和 BswM 这两个模块之间的通讯场景里,BswM 被视为接收方(Rcv),此时可以通过适当调整 SchM 配置来优化两者的数据交换过程[^2]。 #### 使用方法 要利用好 SchM 模块的功能,开发者通常需要遵循以下几个方面: - **定义调度计划**:确定哪些 BSW 模块将在什么时候被执行,并将其编入到整体的应用程序时间表之中。 - **配置接口参数**:针对每一个参与调度的 BSW 模块设定必要的输入/输出端口及其属性,以便能够正确地传递数据给下一个环节。 - **编写回调函数**:对于某些特殊事件的发生,比如某个任务即将开始或结束的时候,应该提前准备好对应的响应逻辑——即所谓的“回调”。 下面是一个简单的 Python 函数模拟如何创建一个基于上述原则的工作流框架: ```python def schm_scheduler(modules, schedule_plan): """ A simplified simulation of the SchM scheduler function. :param modules: List containing all participating BSW module instances. :type modules: list :param schedule_plan: Dictionary mapping time slots to lists of active modules during those periods. :type schedule_plan: dict """ current_time_slot = get_current_time() if current_time_slot in schedule_plan: active_modules = schedule_plan[current_time_slot] for mod_name in active_modules: try: module_instance = next((mod for mod in modules if isinstance(mod, eval(mod_name)))) # Call pre-operation callback before executing main task call_pre_operation_callback(module_instance) execute_module_task(module_instance) # Call post-operation callback after finishing main task call_post_operation_callback(module_instance) except StopIteration as e: print(f"Module {mod_name} not found.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孟的孟不是很老的孟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值