【小猫爪】AUTOSAR学习笔记15-BswM模块

  • 前言
  • 1 BswM模块简介
  • 2 BswM功能简介
    • 2.1 模式仲裁
    • 2.2 模式控制
  • END

前言

  上一节介绍了一个非常夸张的EcuM模块,其中多次提到了BswM模块,这两个模块通常狼狈为奸,共同策划且并操作了整个ECU的状态切换。细细研究EcuM模块后就会发现它是比较别动的,都是当一些条件满足或者事件发生时,EcuM才会控制系统进行状态切换,它更像是一个大兵,只会吭哧吭哧干活,而这一节的BswM模块则是真正的指挥。

1 BswM模块简介

  BswM 模块位于 AUTOSAR 基础软件架构中的服务层,实现对 BSW层和 SW-C的模式管理。BswM的处理流程如下图所示:

#mermaid-svg-RMCbOnZF7WyDWcoL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-RMCbOnZF7WyDWcoL .error-icon{fill:#552222;}#mermaid-svg-RMCbOnZF7WyDWcoL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RMCbOnZF7WyDWcoL .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-RMCbOnZF7WyDWcoL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RMCbOnZF7WyDWcoL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RMCbOnZF7WyDWcoL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RMCbOnZF7WyDWcoL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RMCbOnZF7WyDWcoL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RMCbOnZF7WyDWcoL .marker.cross{stroke:#333333;}#mermaid-svg-RMCbOnZF7WyDWcoL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RMCbOnZF7WyDWcoL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RMCbOnZF7WyDWcoL .cluster-label text{fill:#333;}#mermaid-svg-RMCbOnZF7WyDWcoL .cluster-label span{color:#333;}#mermaid-svg-RMCbOnZF7WyDWcoL .label text,#mermaid-svg-RMCbOnZF7WyDWcoL span{fill:#333;color:#333;}#mermaid-svg-RMCbOnZF7WyDWcoL .node rect,#mermaid-svg-RMCbOnZF7WyDWcoL .node circle,#mermaid-svg-RMCbOnZF7WyDWcoL .node ellipse,#mermaid-svg-RMCbOnZF7WyDWcoL .node polygon,#mermaid-svg-RMCbOnZF7WyDWcoL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RMCbOnZF7WyDWcoL .node .label{text-align:center;}#mermaid-svg-RMCbOnZF7WyDWcoL .node.clickable{cursor:pointer;}#mermaid-svg-RMCbOnZF7WyDWcoL .arrowheadPath{fill:#333333;}#mermaid-svg-RMCbOnZF7WyDWcoL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RMCbOnZF7WyDWcoL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RMCbOnZF7WyDWcoL .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-RMCbOnZF7WyDWcoL .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-RMCbOnZF7WyDWcoL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RMCbOnZF7WyDWcoL .cluster text{fill:#333;}#mermaid-svg-RMCbOnZF7WyDWcoL .cluster span{color:#333;}#mermaid-svg-RMCbOnZF7WyDWcoL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RMCbOnZF7WyDWcoL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Request
Indication
触发
Action List
SWC
Module
模式仲裁
Module
模式控制
Module

  BswM 模块主要提供两项功能:模式仲裁与模式控制。模式仲裁是把各个 BSW 模块和 SW-C 模块的模式请求和模式指示收集起来,按一定的模式规则进行计算,得到仲裁结果。模式控制是指根据仲裁结果,调用不同的动作列表,在动作列表中调用各个模块的函数或接口。模式仲裁的规则和模式控制的动作列表都是用户可配置的,因此 BswM 的功能极大程度上依赖用户配置。

2 BswM功能简介

  在上面提到BswM主要就是干两个事情,一个是模式仲裁,一个则是模式控制。

2.1 模式仲裁

  1. ModeRequestPort
      每个 BSW 模块或 SW-C 都可以通过 API 或服务向 BswM 报告或者申请状态,这里提到的接口或服务称为端口(Port),而状态则被称为模式(Mode)。申请状态则被称为模式请求(Mode Request),报告状态则被称为模式指示(Mode Indication)。模式请求通常来源于SW-C,也有可能来源于BSW模块,比如Dcm模块;模式指示则总是由BSW模块发出,比如<bus>Sm模块,EcuM模块等。每个端口需要配置一个默认模式,如果未配置则视为未定义。端口和模式两者拼合起来那就是ModeRequestPort。

  2. ModeCondition
      模式条件(ModeCondition)是模式仲裁时候的最小判断单元,如果模式条件关联了一个ModeRequestPort,则该条件会验证请求的模式或者指示的模式是否EQUAL或者NOT_EQUAL于某个模式,然后每一个ModeCondition判断完成后会返回TRUE或者FALSE。

  3. Logical Expressions
      使用AND、OR、XOR、NOT和NAND这些逻辑符将ModeCondition组合起来就是一则逻辑表达式,即Logical Expressions。

  4. Rules
      Rules就是当一则Logical Expressions计算结果为真后,BswM模块应该要采取什么样的措施,将措施和Logical Expressions对应起来,这就叫一条Rule。当模式发生变化时(这种叫做BSWM_IMMEDIATE)或者在BswM主函数运行时(这种叫做BSWM_DEFERRED)就会对Rules进行评估,评估Rules的这个过程即叫做模式仲裁,模式仲裁满足条件之后,则开始进行模式控制。下图就是一条简单Rule的的仲裁:

2.2 模式控制

  1. Action和Action List
      在前面模式仲裁的Rules中,提到了当一条Rule评估满足条件后BswM模块会执行相应的措施,这里的措施在模式控制中称为Action List。Action List是一组有序的Action,BswM 按顺序依次执行动作列表中的每个元素。元素有三种类型:1. 一个特定的动作(函数),BswM 会简单地执行该动作;2. 指向其他Action List的链接,BswM 将从被指向的Action List起始处依次执行到最后一条元素,这意味着Action List可以级联;3. 指向一条Rule的链接,BswM 对该Rule进行运算,根据结果执行其对应的Action List。

      如果Action List的某一条Action执行失败,则根据其属性 BswMAbortOnFail 决定是否继续执行。若配置为真,则中止整个Action List的执行;若配置为假,则继续依次执行后续的Action项。如果Action List配置了 BswMReportFailToDem,则 BswM 会在动作执行失败时向 Dem 模块报告事件,该事件需要在 BswM 模块中预先配置。
      基于Rule评估,动作列表有两种方式被执行:1. BSWM_CONDITION:条件执行,即每次评估规则时被执行。2. BSWM_TRIGGER:触发执行,即每次评估结果发生变化时才执行。
      如果为触发执行配置了一个True的动作列表,则BswM仅在相应规则的评估从False变为True时才会执行此动作列表。如果为触发执行配置了一个False的动作列表,则BswM仅在相应规则的评估从True变为False时才会执行此动作列表。如果为条件执行配置了一个True的动作列表,则BswM应在每次将相应规则评估为True时执行此动作列表。如果为条件执行配置了False的动作列表,则BswM应在每次将相应规则评估为False时执行此动作列表。

  2. SwitchPort和RteModeRequestPort
      RteModeRequestPort请求端口是请求更改应用程序模式,而SwitchPort是在BswM执行模式更改时用来接收通知。

END

【小猫爪】AUTOSAR学习笔记15-BswM模块相关推荐

  1. 【小猫爪】AUTOSAR学习笔记06-Communication Stack之ComM模块

    [小猫爪]AUTOSAR学习笔记06-Communication Stack之ComM模块 前言 1 ComM简介 2 ComM功能介绍 2.1 PNC 状态管理 2.2 Channel状态管理 2. ...

  2. 【小猫爪】AUTOSAR学习笔记14-EcuM模块

    [小猫爪]AUTOSAR学习笔记14-EcuM模块 前言 1 EcuM模块简介 2 EcuM功能简介 2.1 EcuM的状态机 2.2 RUN和POST_RUN 2.3 Startup阶段 1. St ...

  3. 【小猫爪】AUTOSAR学习笔记16-Memory Stack之Nvm模块

    [小猫爪]AUTOSAR学习笔记16-Memory Stack之Nvm模块 前言 1 Memory Stack结构 2 NvM模块 2.1 Block 2.2 数据结构 2.3 Redundant B ...

  4. 【小猫爪】AUTOSAR学习笔记03-Communication Stack之CanIf模块

    [小猫爪]AUTOSAR学习笔记03-Communication Stack之CanIf模块 前言 1 CanIf简介 2 功能介绍 2.1 发送缓冲区 2.2 CAN Controller 模式控制 ...

  5. 【小猫爪】AUTOSAR学习笔记12-功能安全之E2E模块

    [小猫爪]AUTOSAR学习笔记12-功能安全之E2E模块 前言 1 E2E模块简介 2 E2E功能简介 2.1 五种保护机制 2.2 E2E的状态机 2.3 E2E Protection Wrapp ...

  6. 【小猫爪】AUTOSAR学习笔记10-Communication Stack之CanTsyn模块

    [小猫爪]AUTOSAR学习笔记10-Communication Stack之CanTsyn模块 前言 1 时间同步的引入 2 时间同步的角色 3 时间同步过程 3.1 四种报文 3.2 时间同步过程 ...

  7. 【小猫爪】AUTOSAR学习笔记00-目录

    [小猫爪]AUTOSAR学习笔记00-目录   因为一个偶然的机会让我接触到了AUTOSAR,所以就花一点小小的时间来记录一下学习它的坎坷大道.这其中复制粘贴了很多,也包括了我的一些个人的小小见解和废 ...

  8. 【小猫爪】AUTOSAR学习笔记02-Communication Stack简介

    [小猫爪]AUTOSAR学习笔记02-Communication Stack简介 前言 1 简介 2 CAN消息的传播路径 2.1 Com服务 2.2 Dcm服务 2.3 SM服务和NM服务 3 补充 ...

  9. 【小猫爪】AUTOSAR学习笔记01-AUTOSAR架构简介

    [小猫爪]AUTOSAR学习笔记01-AUTOSAR架构简介 前言 1 背景介绍 2 基本概念 3 方法论 4 分层软件架构 4.1 Application Layer(APP) 4.2 Basic ...

最新文章

  1. jsp页面怎么调用的servlet
  2. android 等待圈_Android ProgressDialog 转圈圈-阿里云开发者社区
  3. 剑指offer 求1+2+3+...+n
  4. java多线程 -- 同步鎖
  5. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
  6. 【Codeforces - 977D】Divide by three, multiply by two(思维构造)
  7. Django路由(url)
  8. 非法操作 login.php,阅文游戏中心 h5游戏接入wiki
  9. Express 结合 multer 上传图片
  10. 6月14日Linux设备驱动开发免费讲座PPT
  11. linux下安装vmware tools的方法
  12. 0028-如何在CDH未启用认证的情况下安装及使用Sentry
  13. C++ 多线程系统编程精要
  14. 【IT职业】IT人的职业规划
  15. 阿里云cdn设置不缓存
  16. brconfig bridge0 add emac0 add vp0 up
  17. 帝国塔防2 empire defence 2的攻略
  18. SATA硬盘性能测试软件,趣味测试:实测SATA线对硬盘性能的影响
  19. 如何防止恶意扫码点餐
  20. IDEA使用教程一:下载安装IDEA以及idea的常用设置

热门文章

  1. 用C语言实现整形数据的数位分离和逆序输出
  2. 梦幻西游手游服务器维护公告,《梦幻西游》手游2019年2月27日维护公告:梦幻狂欢月来临_ 《梦幻西游》手游官网-人人都玩,无处不在...
  3. macbook pyenv 安装 python3.6.8 报错
  4. 说说中科院研究生的毕业出路问题
  5. 那通过什么方式可以锻炼右脑?
  6. MySQL库迁移到达梦的过程中,出现列长度超出定义的问题导致中断
  7. phpbb风格模板_phpBB3风格(Style)定制
  8. vtiger 5.1 中SO中 issue date数据源
  9. 干货,5种跨境平台卖家站外引流方式
  10. 视频教程-自然语言处理实战——情感分析-NLP