我是靠谱客的博主 动人眼睛,最近开发中收集的这篇文章主要介绍AUTOSAR BSW MD文件解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们都知道,在AUTOSAR整个工作流程中,有一个东西非常重要,它贯穿整个流程,那就是arxml文件。根据AUTOSAR架构,不同软件层的职责是是不一样的,所以相应的arxml文件内容也是不一样的。本文将介绍BSW层1的描述文件:Xxx_Bswmd.arxml(Xxx代表模块缩写)。

Bswmd是Basic Software Module Description的缩写。

  1. 本文重点讲解MCAL层,严格来说BSW层包含内容比较多,比如ECU抽象层也属于BSW,但是这些层的描述文件和本文描述的内容可能不一样。比如COM,DEM等与通信/诊断相关的模块,他们的描述文件内容是不一样的。但是MCAL层的各个模块(包括CDD)内容大体上相同。

因为模块描述文件(BSW MD)本质还是一个xml文件,所以文件开始几行会先描述一些基本信息,比如:xml的版本,编码格式,使用的主题(schema)等。

主题部分通常除了引用w3.org的xml主题外,很重要的一部分就是引用AUTOSAR的主题文件,毕竟arxml的主要目标是描述AUTOSAR的软件的,AUTOSAR官网已经提供了很多主题文件,直接从官网引用即可。如下图所示:

<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00046.xsd">

接下来就是定义本模块里面的包(Package),一个模块里面可以有多个包,且通常情况下都会有多个包,每个包负责描述的内容是不一样的。

包里面的内容通常包括以下内容:

  • 模块描述器
    • 模块名字
    • 模块ID:标准模块都有自己的ID号(<255)。如果是复杂驱动(CDD),可以设置为255,或者2048~4095。多个CDD模块,可以都设置为相同值:255,但是如果你每个模块都有DET/DEM消息,为了区分开模块,可以考虑在2048~4095范围里分配。
    • 模块暴露给其他模块使用的函数的引用。通常情况下在模块主h文件里面定义。需要注意的是还包括中断函数(中断函数一般不在主h文件里面定义),其他函数(比如内部函数)不在本描述文件里面描述。
    • 内部行为
      • 原子保护区域(Exclusive Area)
      • 模块暴露给其他模块使用的函数:是否有原子保护区域,连续两次调用该函数的时间间隔限制。
  • 模块入口:描述模块暴露给其他模块使用的函数。
    • 函数名
    • 函数ID(所有中断函数的ID为0,其余功能函数ID需唯一)
    • 是否可重入
    • 同步函数还是异步函数
    • 调用类型(共五种):regular,callback,interrupt,scheduled,callout。
    • 执行上下文环境(共五种):task,interruptCat1,interruptCat2,hook,unspecified。
    • 软件实现策略(共四种):standard,inline,macro,inlineConditional。
  • 模块实现
    • 资源文件:主要描述模块里面包含哪些xdm,源代码文件(主要是h/c文件,汇编文件不需要描述),以及文档,都需包含路径信息。需要注意的是,这里强调所有文件,比如你的工程里面包含示例工程,虽然示例工程严格来说不是模块必备的,但是如果你包含在模块文件夹里面,那么这些示例工程里面包含的xdm,h,c,文件以及文档也需要描述。用于生成代码的那些模板文件(伪代码c/h文件)在后面单独描述。
    • 所支持的编译器
      • 编译参数
      • 编译器提供商
      • 详细版本信息
    • 代码生成文件
    • 所支持的链接器
      • 链接参数
      • 链接器提供商
      • 详细版本信息
    • 编程语言
    • 内存区段
      • 区段属性
    • 内部软件版本
    • AUTOSAR版本
    • 供应商编号

需要注意的是bswmd文件不受配置参数影响,一个模块开发完成发布后,生成的bswmd文件和发布文件是一样的,不会受不同配置参数影响其内容,因为以上列这些内容都是固定的,与具体某个参数配置没关系。但是一般情况下工具链会限制,如果配置有错,则不会生成bswmd文件。

下面是一个简化的模板文件:

<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00046.xsd">

  <AR-PACKAGES>
    <AR-PACKAGE>
      <SHORT-NAME>AUTOSAR_I2c</SHORT-NAME>
      <AR-PACKAGES>
        <AR-PACKAGE>
          <SHORT-NAME>BswModuleDescriptions</SHORT-NAME>
          <ELEMENTS>
            <BSW-MODULE-DESCRIPTION>
              <SHORT-NAME>I2c</SHORT-NAME>
              <MODULE-ID>255</MODULE-ID>
              <PROVIDED-ENTRYS>
                <BSW-MODULE-ENTRY-REF-CONDITIONAL>
                  <BSW-MODULE-ENTRY-REF DEST="BSW-MODULE-ENTRY">/AUTOSAR_I2c/BswModuleEntrys/I2c_AsyncTransmit</BSW-MODULE-ENTRY-REF>
                </BSW-MODULE-ENTRY-REF-CONDITIONAL>
                <BSW-MODULE-ENTRY-REF-CONDITIONAL>
                  <BSW-MODULE-ENTRY-REF DEST="BSW-MODULE-ENTRY">/AUTOSAR_I2c/BswModuleEntrys/I2c_DeInit</BSW-MODULE-ENTRY-REF>
                </BSW-MODULE-ENTRY-REF-CONDITIONAL>
                <BSW-MODULE-ENTRY-REF-CONDITIONAL>
                  <BSW-MODULE-ENTRY-REF DEST="BSW-MODULE-ENTRY">/AUTOSAR_I2c/BswModuleEntrys/LPI2C0_Master_IRQHandler</BSW-MODULE-ENTRY-REF>
                </BSW-MODULE-ENTRY-REF-CONDITIONAL>
              </PROVIDED-ENTRYS>

              <INTERNAL-BEHAVIORS>
                <BSW-INTERNAL-BEHAVIOR>
                  <SHORT-NAME>InternalBehavior_0</SHORT-NAME>
                  <EXCLUSIVE-AREAS>
                    <EXCLUSIVE-AREA>
                      <SHORT-NAME>I2C_EXCLUSIVE_AREA_00</SHORT-NAME>
                    </EXCLUSIVE-AREA>
                  </EXCLUSIVE-AREAS>
                  <ENTITYS>
                    <BSW-CALLED-ENTITY>
                      <SHORT-NAME>I2c_AsyncTransmit</SHORT-NAME>
                      <CAN-ENTER-EXCLUSIVE-AREA-REFS>
                        <CAN-ENTER-EXCLUSIVE-AREA-REF DEST="EXCLUSIVE-AREA">/AUTOSAR_I2c/BswModuleDescriptions/I2c/InternalBehavior_0/I2C_EXCLUSIVE_AREA_00</CAN-ENTER-EXCLUSIVE-AREA-REF>
                      </CAN-ENTER-EXCLUSIVE-AREA-REFS>
                      <MINIMUM-START-INTERVAL>0.0</MINIMUM-START-INTERVAL>
                      <IMPLEMENTED-ENTRY-REF DEST="BSW-MODULE-ENTRY"
                        >/AUTOSAR_I2c/BswModuleEntrys/I2c_AsyncTransmit</IMPLEMENTED-ENTRY-REF>
                    </BSW-CALLED-ENTITY>
                    <BSW-CALLED-ENTITY>
                      <SHORT-NAME>I2c_DeInit</SHORT-NAME>
                      <MINIMUM-START-INTERVAL>0.0</MINIMUM-START-INTERVAL>
                      <IMPLEMENTED-ENTRY-REF DEST="BSW-MODULE-ENTRY"
                        >/AUTOSAR_I2c/BswModuleEntrys/I2c_DeInit</IMPLEMENTED-ENTRY-REF>
                    </BSW-CALLED-ENTITY>
                    <BSW-INTERRUPT-ENTITY>
                      <SHORT-NAME>LPI2C0_Master_IRQHandler</SHORT-NAME>
                      <MINIMUM-START-INTERVAL>0.0</MINIMUM-START-INTERVAL>
                      <IMPLEMENTED-ENTRY-REF DEST="BSW-MODULE-ENTRY"
                        >/AUTOSAR_I2c/BswModuleEntrys/LPI2C0_Master_IRQHandler</IMPLEMENTED-ENTRY-REF>
                      <INTERRUPT-CATEGORY>CAT-2</INTERRUPT-CATEGORY>
                      <INTERRUPT-SOURCE>Hardware</INTERRUPT-SOURCE>
                    </BSW-INTERRUPT-ENTITY>
                  </ENTITYS>

                  <EVENTS>
                  </EVENTS>

                </BSW-INTERNAL-BEHAVIOR>
              </INTERNAL-BEHAVIORS>
            </BSW-MODULE-DESCRIPTION>
          </ELEMENTS>
        </AR-PACKAGE>

        <AR-PACKAGE>
          <SHORT-NAME>BswModuleEntrys</SHORT-NAME>
          <ELEMENTS>
            <BSW-MODULE-ENTRY>
              <SHORT-NAME>I2c_AsyncTransmit</SHORT-NAME>
              <SERVICE-ID>0x03</SERVICE-ID>
              <IS-REENTRANT>true</IS-REENTRANT>
              <IS-SYNCHRONOUS>true</IS-SYNCHRONOUS>
              <CALL-TYPE>REGULAR</CALL-TYPE>
              <EXECUTION-CONTEXT>UNSPECIFIED</EXECUTION-CONTEXT>
              <SW-SERVICE-IMPL-POLICY>STANDARD</SW-SERVICE-IMPL-POLICY>
            </BSW-MODULE-ENTRY>
            <BSW-MODULE-ENTRY>
              <SHORT-NAME>I2c_DeInit</SHORT-NAME>
              <SERVICE-ID>0x01</SERVICE-ID>
              <IS-REENTRANT>false</IS-REENTRANT>
              <IS-SYNCHRONOUS>true</IS-SYNCHRONOUS>
              <CALL-TYPE>REGULAR</CALL-TYPE>
              <EXECUTION-CONTEXT>UNSPECIFIED</EXECUTION-CONTEXT>
              <SW-SERVICE-IMPL-POLICY>STANDARD</SW-SERVICE-IMPL-POLICY>
            </BSW-MODULE-ENTRY>
            <BSW-MODULE-ENTRY>
              <SHORT-NAME>LPI2C0_Master_IRQHandler</SHORT-NAME>
              <SERVICE-ID>0</SERVICE-ID>
              <IS-REENTRANT>false</IS-REENTRANT>
              <IS-SYNCHRONOUS>true</IS-SYNCHRONOUS>
              <CALL-TYPE>INTERRUPT</CALL-TYPE>
              <EXECUTION-CONTEXT>INTERRUPT-CAT-2</EXECUTION-CONTEXT>
              <SW-SERVICE-IMPL-POLICY>STANDARD</SW-SERVICE-IMPL-POLICY>
            </BSW-MODULE-ENTRY>
          </ELEMENTS>
        </AR-PACKAGE>
      </AR-PACKAGES>
    </AR-PACKAGE>
    <AR-PACKAGE>
      <SHORT-NAME>I2c_TS_T40D34M20I0R0</SHORT-NAME>
      <AR-PACKAGES>
        <AR-PACKAGE>
        <SHORT-NAME>Implementations</SHORT-NAME>
          <ELEMENTS>
            <BSW-IMPLEMENTATION>
              <SHORT-NAME>BswImplementation_0</SHORT-NAME>

              <CODE-DESCRIPTORS>
                <CODE>
                <SHORT-NAME>Files</SHORT-NAME>
                <ARTIFACT-DESCRIPTORS>
                  <AUTOSAR-ENGINEERING-OBJECT>
                    <SHORT-LABEL>config::I2c.xdm</SHORT-LABEL>
                    <CATEGORY>SWCFG</CATEGORY>
                  </AUTOSAR-ENGINEERING-OBJECT>
                  <AUTOSAR-ENGINEERING-OBJECT>
                    <SHORT-LABEL>doc::RTD_I2C_IM.pdf</SHORT-LABEL>
                    <CATEGORY>SWDOC</CATEGORY>
                  </AUTOSAR-ENGINEERING-OBJECT>
                  <AUTOSAR-ENGINEERING-OBJECT>
                    <SHORT-LABEL>examples::EBT::I2c_HLD_FLEXIO_Transfer_S32K312::generate::epc::Base.xdm</SHORT-LABEL>
                    <CATEGORY>SWCFG</CATEGORY>
                  </AUTOSAR-ENGINEERING-OBJECT>
                  <AUTOSAR-ENGINEERING-OBJECT>
                    <SHORT-LABEL>include::CDD_I2c.h</SHORT-LABEL>
                    <CATEGORY>SWHDR</CATEGORY>
                  </AUTOSAR-ENGINEERING-OBJECT>
                  <AUTOSAR-ENGINEERING-OBJECT>
                    <SHORT-LABEL>src::CDD_I2c.c</SHORT-LABEL>
                    <CATEGORY>SWSRC</CATEGORY>
                  </AUTOSAR-ENGINEERING-OBJECT>
                  <AUTOSAR-ENGINEERING-OBJECT>
                    <SHORT-LABEL>src::Lpi2c_Ip_Irq.c</SHORT-LABEL>
                    <CATEGORY>SWSRC</CATEGORY>
                  </AUTOSAR-ENGINEERING-OBJECT>
                </ARTIFACT-DESCRIPTORS>
                </CODE>
              </CODE-DESCRIPTORS>

              <COMPILERS>
                <COMPILER>
                  <SHORT-NAME>GCC_Compiler</SHORT-NAME>
                  <NAME>GCC Compiler</NAME>
                  <OPTIONS>-mcpu=cortex-m7 -mthumb -mlittle-endian -mfpu=fpv5-sp-d16 -mfloat-abi=hard -std=c99 -Os -ggdb3 -Wall -Wextra -pedantic -Wstrict-prototypes -Wundef -Wunused -Werror=implicit-function-declaration -Wsign-compare -Wdouble-promotion -fno-short-enums -funsigned-char -funsigned-bitfields -fomit-frame-pointer -fno-common -fstack-usage -fdump-ipa-all -c -DS32K3XX -DS32K344 -DGCC -DUSE_SW_VECTOR_MODE -DD_CACHE_ENABLE -DI_CACHE_ENABLE -DENABLE_FPU -DMCAL_ENABLE_USER_MODE_SUPPORT</OPTIONS>
                  <VENDOR>GCC Systems</VENDOR>
                  <VERSION>NXP GCC 10.2.0 20200723 (Build 1728 Revision g5963bc8)</VERSION>
                </COMPILER>
              </COMPILERS>
              <GENERATED-ARTIFACTS>
                <DEPENDENCY-ON-ARTIFACT>
                  <SHORT-NAME>CDD_I2c_PBcfg_h</SHORT-NAME>
                  <ARTIFACT-DESCRIPTOR>
                    <SHORT-LABEL>generate_PB::include::CDD_I2c_PBcfg.h</SHORT-LABEL>
                    <CATEGORY>SWHDR</CATEGORY>
                  </ARTIFACT-DESCRIPTOR>
                  <USAGES>
                    <USAGE>EXECUTE</USAGE>
                  </USAGES>
                </DEPENDENCY-ON-ARTIFACT>
                <DEPENDENCY-ON-ARTIFACT>
                  <SHORT-NAME>CDD_I2c_PBcfg_c</SHORT-NAME>
                  <ARTIFACT-DESCRIPTOR>
                    <SHORT-LABEL>generate_PB::src::CDD_I2c_PBcfg.c</SHORT-LABEL>
                    <CATEGORY>SWSRC</CATEGORY>
                  </ARTIFACT-DESCRIPTOR>
                  <USAGES>
                    <USAGE>EXECUTE</USAGE>
                  </USAGES>
                </DEPENDENCY-ON-ARTIFACT>
              </GENERATED-ARTIFACTS>

              <LINKERS>
                <LINKER>
                  <SHORT-NAME>GCC_Linker</SHORT-NAME>
                  <NAME>GCC Compiler</NAME>
                  <OPTIONS>-Wl,-Map,filename -T linkerfile --entry=Reset_Handler -nostartfiles -mcpu=cortexm7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mlittle-endian -ggdb3 -lc -lm -lgcc</OPTIONS>
                  <VENDOR>GCC Systems</VENDOR>
                  <VERSION>NXP GCC 10.2.0 20200723 (Build 1728 Revision g5963bc8)</VERSION>
                </LINKER>
              </LINKERS> 
              <PROGRAMMING-LANGUAGE>C</PROGRAMMING-LANGUAGE>
              <RESOURCE-CONSUMPTION>
                <SHORT-NAME>ResourceConsumption</SHORT-NAME>
                <MEMORY-SECTIONS>
                  <MEMORY-SECTION>
                    <SHORT-NAME>I2C_CODE</SHORT-NAME>
                    <ALIGNMENT>UNSPECIFIED</ALIGNMENT>
                    <SW-ADDRMETHOD-REF DEST="SW-ADDR-METHOD">/AUTOSAR_MemMap/SwAddrMethods/CODE</SW-ADDRMETHOD-REF>
                    <SYMBOL>CODE</SYMBOL>
                  </MEMORY-SECTION>
                  <MEMORY-SECTION>
                    <SHORT-NAME>I2C_CONFIG_DATA_UNSPECIFIED</SHORT-NAME>
                    <ALIGNMENT>UNSPECIFIED</ALIGNMENT>
                    <SW-ADDRMETHOD-REF DEST="SW-ADDR-METHOD">/AUTOSAR_MemMap/SwAddrMethods/CONFIG_DATA</SW-ADDRMETHOD-REF>
                    <SYMBOL>CONFIG_DATA_UNSPECIFIED</SYMBOL>
                  </MEMORY-SECTION>
                  <MEMORY-SECTION>
                    <SHORT-NAME>I2C_VAR_CLEARED_8</SHORT-NAME>
                    <ALIGNMENT>8</ALIGNMENT>
                    <SW-ADDRMETHOD-REF DEST="SW-ADDR-METHOD">/AUTOSAR_MemMap/SwAddrMethods/VAR_CLEARED</SW-ADDRMETHOD-REF>
                    <SYMBOL>VAR_CLEARED_8</SYMBOL>
                  </MEMORY-SECTION>
                </MEMORY-SECTIONS>
              </RESOURCE-CONSUMPTION>
              <SW-VERSION>2.0.0</SW-VERSION>
              <VENDOR-ID>43</VENDOR-ID>
              <AR-RELEASE-VERSION>4.4.0</AR-RELEASE-VERSION>

              <BEHAVIOR-REF DEST="BSW-INTERNAL-BEHAVIOR">/AUTOSAR_I2c/BswModuleDescriptions/I2c/InternalBehavior_0</BEHAVIOR-REF>
              <VENDOR-SPECIFIC-MODULE-DEF-REFS>
                <VENDOR-SPECIFIC-MODULE-DEF-REF DEST="ECUC-MODULE-DEF">/TS_T40D34M20I0R0/I2c</VENDOR-SPECIFIC-MODULE-DEF-REF>
              </VENDOR-SPECIFIC-MODULE-DEF-REFS>
            </BSW-IMPLEMENTATION>
          </ELEMENTS>
        </AR-PACKAGE>
      </AR-PACKAGES>
    </AR-PACKAGE>
  </AR-PACKAGES>
</AUTOSAR>

最后

以上就是动人眼睛为你收集整理的AUTOSAR BSW MD文件解析的全部内容,希望文章能够帮你解决AUTOSAR BSW MD文件解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部