资讯详情

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其余功能函数为0ID需唯一)
    • 是否可重入
    • 同步函数还是异步函数
    • 调用类型(共五种):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">    span class="token tag"><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>

标签: t40fm扭矩传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司