AUTOSAR基础软件
基础软件常规_1.BSW的模块
源自文档《AUTOSAR_SWS_BSWGeneral》
稍做翻译,目的:
1.便于宏观理解AUTOSAR架构下的第三方模块源码;
2.提升手写代码质量;
BSW中的模块;
Bsw基础软件的模块,就是各个功能构件,网上有很多AUTOSAR的架构图,可以进行参考。AUTOSAR的开发方法论中使用描述性语言对模块进行说明,可以通过*.arxml文件进行传递与使用。但是在程序员眼里是对于各个模块的第一印象就是代码(当然也包括其他的说明文档),需要要直接的认知模块的源码。
往往不可继续拆分的模块都有自己的名称,可以用模块前缀去代指它。关于模块前缀Module implementation prefix :格式遵循:<Ma>[_<vi>_<ai>],看源码的时候基本上可以通过文件命名判断其所属的基础软件模块(统一使用驼峰命名加下划线分隔)。
<Ma> Module abbreviation:EcuM, CanIf, OS, Com…
<vi> vendor Id
<ai> vendor Api Infix.
以太网收发器模块的前缀:<EthTrcv>[_<30>_<Ethmii>] ,下面的例子Mip用于文件的命名(也可以用于函数与变量的命名,这些后面再掰扯):
在以上例子中,Mip用于文件命名。推荐的文件命名格式遵循:<Mip>[_<Ie>].,文件名称命名规范,有助于模块功能移植,有助于编译时查询相关信息等诸多好处。文档提示,我们在命名时要注意系统对大小写的识别和是否有歧义;
<Ie> implementation specific file name extension
项目中常见的此类名称文件类型有*.c/h/s/o等等。
关于模块的代码分类如下:其中接触较多的就是模块主功能源码和头文件Mip.c/h,以及相关配置文件Mip_?Cfg.c/h,配置文件可作用于build/link/post build三个阶段(可参考编译器原理理解);
Callback头文件,是为了引用了依赖模块中的回调实体;中断处理源文件多见于Mcal的驱动模块,个人常理解成模块主功能的一个子功能;
在一般写Cdd的时候都会仿照这个文件结构进行功能划分,举个例子:
有的模块常关联各自的两类文件(一般不放在模块的文件夹内,是非必要的),
1.内存空间映射头的文件,部分模块需要配置固定的内存空间时(包括模块内部的变量函数等,个人不太会划分的如此详细,后面再掰扯),可用于内存的分配,可以和标定,DMA,MPU等功能结合使用,命名格式遵循:<Mip>_MemMap.h
2.调度头文件,一般用于Rte和OS调度(后面再掰扯),命名格式遵循:SchM_<Mip>.h
以上仅是从文件角度理解,具体作为模块的开发者,需要参阅相关模块的技术文档,可以参考标准的AUTOSAR技术文档《AUTOSAR_SWS_ECUStateManager》,或者参考AUTOSAR协议栈的第三方库文档了解模块的功能与原理(Davanci/Tresos/EAS等工具链的安装目录找一下技术文档)。