AUTOSAR CP 中 BswM 模块功能与使用介绍(2/2)

三、 AUTOSAR BswM 模块详解及 ARXML 示例

BswM 模块的主要功能

BswM(Basic Software Mode Manager)模块在 AUTOSAR 架构中扮演着模式管理的核心角色。它负责管理车辆的各种模式(如启动、运行、停车等),并根据不同的模式来控制其他 BSW 模块的行为。

主要功能包括:

  • 模式定义: 定义车辆的各种模式及其属性。
  • 模式切换条件: 定义触发模式切换的条件。
  • 模式控制动作: 定义在模式切换时需要执行的动作。
  • 模式仲裁: 当多个模式切换请求同时发生时,BswM 负责仲裁,决定最终的模式。

ARXML 示例

下面通过一个简化的 ARXML 示例来说明 BswM 的配置。

假设场景: 一辆汽车有启动、运行和停车三种模式。当启动按钮按下且发动机未启动时,车辆进入启动模式;当发动机故障时,车辆进入停车模式。

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4.0.3.xsd">
  <BSWModuleConfigurationDescriptor>
    <SHORT-NAME>BswM</SHORT-NAME>
    <BswMConfiguration>
      <ModeDescriptor>
        <SHORT-NAME>START</SHORT-NAME>
      </ModeDescriptor>
      <ModeDescriptor>
        <SHORT-NAME>RUN</SHORT-NAME>
      </ModeDescriptor>
      <ModeDescriptor>
        <SHORT-NAME>STOP</SHORT-NAME>
      </ModeDescriptor>

      <ModeRequestPort>
        <SHORT-NAME>StartRequest</SHORT-NAME>
        <AR-PACKAGE-REF DEST="Package:/DataType/Boolean" />
      </ModeRequestPort>
      <ModeRequestPort>
        <SHORT-NAME>EngineFault</SHORT-NAME>
        <AR-PACKAGE-REF DEST="Package:/DataType/Boolean" />
      </ModeRequestPort>

      <ModeTransitionRule>
        <SHORT-NAME>StartRule</SHORT-NAME>
        <ACTIVATION>
          <READ-WRITE>
            <SHORT-NAME>StartRequest</SHORT-NAME>
            <OPERAND>TRUE</OPERAND>
          </READ-WRITE>
        </ACTIVATION>
        <DESTINATION-MODE-REF DEST="ModeDescriptor:START" />
      </ModeTransitionRule>
      <ModeTransitionRule>
        <SHORT-NAME>StopRule</SHORT-NAME>
        <ACTIVATION>
          <READ-WRITE>
            <SHORT-NAME>EngineFault</SHORT-NAME>
            <OPERAND>TRUE</OPERAND>
          </READ-WRITE>
        </ACTIVATION>
        <DESTINATION-MODE-REF DEST="ModeDescriptor:STOP" />
      </ModeTransitionRule>

      </BswMConfiguration>
  </BSWModuleConfigurationDescriptor>
  </AUTOSAR>

示例说明

  • 模式定义: 定义了三种模式:启动、运行和停止。
  • 端口定义: 定义了两个输入端口:StartRequest(启动请求)和 EngineFault(发动机故障)。
  • 规则定义: 定义了两个模式切换规则:
    • 当 StartRequest 为真且当前模式不是 START 时,切换到 START 模式。
    • 当 EngineFault 为真时,切换到 STOP 模式。
  • 仲裁: 在这个简化示例中,没有多个模式同时请求的情况,因此没有定义仲裁规则。在实际应用中,当多个模式同时请求时,BswM 需要根据优先级或其他条件进行仲裁。

关键概念

  • 模式: 车辆的不同状态。
  • 端口: BswM 与其他模块交互的接口,用于接收模式切换请求和发送模式切换通知。
  • 规则: 定义模式切换的条件。
  • 仲裁: 当多个模式同时请求时,决定最终模式的机制。

四、基于 ARXML 生成 BswM 模块 C 代码示例

理解 ARXML 和代码生成

在 AUTOSAR 系统中,ARXML 文件是配置工具生成的 XML 格式文件,它描述了整个系统的配置信息,包括 BswM 模块的配置。AUTOSAR 代码生成工具会根据 ARXML 文件,自动生成 C 语言源代码,实现 BswM 模块的功能。

分析给定的 ARXML

根据提供的 ARXML,我们可以提取出以下关键信息:

  • 模式: START,RUN,STOP
  • 输入端口: StartRequest,EngineFault
  • 规则:
    • 当 StartRequest 为真且当前模式不是 START 时,切换到 START 模式。
    • 当 EngineFault 为真时,切换到 STOP 模式。

生成的 C 代码示例

c 复制代码
#include "BswM.h"

/* 定义模式枚举,与 ARXML 中定义的模式对应 */
typedef enum {
    START,
    RUN,
    STOP
} VehicleModeType;

/* 定义模式状态变量 */
static VehicleModeType currentMode = STOP;

/* 定义输入端口变量,对应 ARXML 中定义的端口 */
static boolean StartRequest = FALSE;
static boolean EngineFault = FALSE;

/* BswM 主函数 */
void BswM_MainFunction(void) {
    /* 读取输入端口值 */
    // ... (从底层驱动读取 StartRequest 和 EngineFault 的值)

    /* 根据规则进行模式切换 */
    if (StartRequest && currentMode != START) {
        currentMode = START;
        // 调用其他模块的接口,如启动发动机、锁门等
        StartEngine();
        LockDoors();
    } else if (EngineFault && currentMode == RUN) {
        currentMode = STOP;
        // 调用其他模块的接口,如停止发动机、解锁门等
        StopEngine();
        UnlockDoors();
    }

    /* ... 其他规则 ... */
}

代码解释

  1. 模式枚举和状态变量: 与 ARXML 中定义的模式对应。
  2. 输入端口变量: 对应 ARXML 中定义的输入端口,用于接收外部输入。
  3. BswM 主函数:
    • 读取输入端口值: 从底层驱动读取 StartRequest 和 EngineFault 的值。
    • 模式切换: 根据 ARXML 中定义的规则,判断是否需要切换模式,并调用相应的函数。

代码生成工具可能生成的额外代码

  • 模式管理数据结构: 用于存储模式信息、转换规则等。
  • 状态机实现: 使用状态机来管理模式的切换,保证状态的一致性。
  • 错误处理: 处理各种错误情况,如配置错误、输入错误等。
  • 异步处理: 处理异步事件,如中断。
  • 接口函数: 提供给其他模块调用的接口,例如获取当前模式、设置模式等。

注意:

  • 代码生成工具的差异: 不同代码生成工具生成的代码结构和风格可能有所不同。
  • 配置的影响: ARXML 中的配置会直接影响生成的代码。
  • 其他 BSW 模块的交互: BswM 需要与其他 BSW 模块(如 EcuM、ComM)进行交互。
  • 功能安全: BswM 的实现需要考虑功能安全的要求,确保系统的可靠性。

希望这个示例能帮助您更好地理解 AUTOSAR BswM 模块的代码生成过程。

相关推荐
AUTOSAR组织8 天前
AUTOSAR CP NvM 模块解析
汽车·autosar·软件架构·软件·标准
赞哥哥s11 天前
2025年终总结简版
autosar
汽车软件工程师00113 天前
ChatGpt指导嵌入式软件开发能力——2、TriCore深度专项训练
人工智能·chatgpt·autosar
汽车软件工程师00116 天前
ChatGpt指导嵌入式软件开发能力
人工智能·chatgpt·autosar
汽车软件工程师00117 天前
vector autosar,CAN 总线上能看到报文RTE 收不到信号COM 层 IPDU Callout 不触发
autosar
汽车软件工程师00117 天前
vector autosar配置一个CAN接收报文,RTE层发现并未接收到信号,怎样查这个问题
开发语言·autosar
Dotrust东信创智21 天前
汽车安全通信的行业标准密码-E2E
e2e·autosar·preevision
yuanmenghao21 天前
Linux 性能实战 | 第 8 篇 上下文切换、内核线程与调度延迟
linux·服务器·性能优化·autosar
linweidong23 天前
AUTOSAR Adaptive中应用容器Crash如何恢复?
嵌入式·autosar
Electron-er1 个月前
汽车ECU重编程中的Bootloader设计原理:如何实现安全回滚?
autosar·uds·汽车电子·bootloader·功能安全·ecu刷写