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

在这里插入图片描述

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

BswM 模块的主要功能

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

主要功能包括:

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

ARXML 示例

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

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

<?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 代码示例

#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 模块的代码生成过程。

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

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

相关文章

网络搜索引擎Shodan(1)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;shodan(1)_哔哩哔哩_bilibili 本文主要讲解网络搜索引擎Shodan的一些用法&#xff08;host和search这两个命令&#xff09;。 Shodan 是一个网络…

智创 AI 新视界 -- 探秘 AIGC 中的生成对抗网络(GAN)应用

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)

文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…

docker 单节点arm架构服务器安装zookeeper、kafka并测试通信

kafka、zookeeper常用镜像介绍 kafka和zookeeper常见的镜像有以下三个&#xff1a;wurstmeister/zookeeper、kafka、confluentinc/cp-zookeeper、cp-kafka 和 bitnami/zookeeper、kafka。 wurstmeister/xxx: 由wurstmeister团队维护&#xff0c;提供的镜像适用于开发和测试环…

Termius工具在MAC的使用出现的问题:

Termius工具在MAC的使用出现的问题&#xff1a; 在使用SFTP时&#xff0c;出现不了本地的文件的位置 解决方案&#xff1a; 在Apple store下载的使用不了LOCAL SFTP&#xff0c; 需要在网页上进行下载才可以&#xff1a; 官网下载地址&#xff1a;https://termius.com/down…

CentOS 修改服务器登录密码的完整指南

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

缓存池(对象池)使用

框架介绍 对象池的实现是为了优化内存管理和提升性能&#xff0c;尤其是在创建和销毁大量对象时&#xff0c;通过复用已经创建的对象来减少垃圾回收的负担。 实现概述 开放公共方法 记忆已更新 这个对象池的实现是为了优化内存管理和提升性能&#xff0c;尤其是在创建和销…

中国在世界上知名度最高的人物颜廷利:圣人学府-效贤馆互爱天下

中国在世界上知名度最高的人物颜廷利先生在创立效贤馆时&#xff0c;秉持着以下几方面的理念和愿景&#xff1a; 1.传承国学精髓&#xff1a;全世界知名度最高的人颜廷利先生深感国学作为中国传统文化的瑰宝&#xff0c;蕴含着丰富的智慧和哲理。因此&#xff0c;他希望通过效贤…

LINUX1.2

1.一切都是一个文件 &#xff08;硬盘&#xff09; 2.系统小型 轻量型&#xff0c;300个包 3.避免令人困惑的用户界面 ------------------> 就是没有复杂的图形界面 4.不在乎后缀名&#xff0c;有没有都无所谓&#xff0c;不是通过后缀名来定义文件的类型&#xff08;win…

NSSCTF刷题篇web部分

源码泄露 [FSCTF 2023]寻找蛛丝马迹 这个源码泄露&#xff0c;可以记录一下&#xff0c;涉及的知识点比较多 打开环境 查看源码&#xff0c; 第一段flag 乱码&#xff0c;恢复一下 乱码恢复网站&#xff1a;乱码恢复 (mytju.com) 剩下的就只说方法 http://node4.anna.nss…

Python爬虫教程:从入门到精通

Python爬虫教程&#xff1a;从入门到精通 前言 在信息爆炸的时代&#xff0c;数据是最宝贵的资源之一。Python作为一种简洁而强大的编程语言&#xff0c;因其丰富的库和框架&#xff0c;成为了数据爬取的首选工具。本文将带您深入了解Python爬虫的基本概念、实用技巧以及应用…

Linux中安装配置SQLite3,并实现C语言与SQLite3的交互。

前言 SQLite 是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。本次实验介绍在Linux上实现C语言和SQLite3的交互&#xff0c;利用C语言编写相关语句&#xff0c;连接数据库、操作数…

Cout输出应用举例

Cout输出应用 在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <sstream> #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和res…

Flutter TextField和Button组件开发登录页面案例

In this section, we’ll go through building a basic login screen using the Button and TextField widgets. We’ll follow a step-bystep approach, allowing you to code along and understand each part of the process. Let’s get started! 在本节中&#xff0c;我们…

基于SSM+小程序的垃圾分类管理系统(垃圾2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的垃圾分类管理系统实现了管理员及用户。 1、管理员功能结构图&#xff0c;管理员功能有个人中心&#xff0c;管理员管理&#xff0c;基础数据管理、论坛管理、垃圾信息管理…

【web安全】缓慢的HTTP拒绝服务攻击详解

文章目录 前言一、攻击原理二、攻击类型三、攻击特点四、HTTP慢速攻击实战工具简介使用参数介绍五、修复建议前言 缓慢的HTTP拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,直到服务器带宽被打满,造成…

【数据结构】概念篇

专栏说明&#xff1a;本专栏用于数据结构复习&#xff0c;文章中出现的代码由C语言实现&#xff0c;在专栏中会涉及到部分OJ题目&#xff0c;如对你学习有所帮助&#xff0c;可以点赞鼓励一下博主喔&#x1f493; 博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;数…

python实战(一)——iris鸢尾花数据集分类

一、任务背景 本文是python实战系列专栏的第一篇文章&#xff0c;我们将从分类开始由浅入深逐步学习如何使用python完成常规的机器学习/深度学习任务。iris数据集是经典的机器学习入门数据集&#xff0c;许多分类任务教程都会以这个数据集作为示例&#xff0c;它的数据量是150条…

用STM32硬件思维学JAVA--23种设计模式

系列文章目录 1.【软考之软件设计师】PPT课件 2.【软考之软件设计师】学习笔记 3.【软考之软件设计师】上午题—信管网(每天更新) 4.【软考之软件设计师】上午题—希赛网(每天更新) 5.【软件设计师真题】下午题第一大题—数据流图设计 6.【软件设计师真题】下午题第二大题…