概述
我们都知道,在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为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文件解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复