我们都知道,在AUTOSAR在整个工作过程中,有一件事很重要,贯穿整个过程,那就是arxml文件。根据AUTOSAR不同软件层的架构责任不同,因此相应arxml文件的内容也不同。本文将介绍BSW层1描述文件:Xxx_Bswmd.arxml(Xxx代表模块缩写)。
Bswmd是Basic Software Module Description的缩写。
- 本文重点讲解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>