AUTOSAR基础软件中,支持Pre-compiletime、Link time、Post-build time三种配置方式,分别是啥呢?下面分别对其进行解释。
Pre-compile time
采用宏开关的形式,在编译预处理阶段,处理预编译指令,对宏定义进行替换。其使用场景比如:启动或禁用功能,这样可以仅对有效的代码进行编译,减少编译时间和内存空间的使用;使用#define定义,可以比访问常量甚至通过指针访问常量效率更高,提高运行速度。
Pre-compile time配置在AUTOSAR中通常在模块的*_Cfg.h、_Cfg.c中实现,其中_Cfg.h存储宏定义、#defines,*_Cfg.c存储常量。
如图1所示,在Spi_cfg.h中通过配置 SPI_DEV_ERROR_DETECT为ON,Spi.c中的向Det报错功能的条件编译满足,编译过程中就会对该功能进行编译。
图1 Pre-compile配置
Link time
在链接时配置,有些常量数据存在于模块代码之外,因此在模块编译好之后进行数据配置,而不需要重新编译模块,这种方式适合导入库文件来配置代码功能。
Link time配置在AUTOSAR中通常在模块的*_lcfg.h、*_lcfg.c。
如图2所示,Fls_WriteFailed[2]定义于Fls_Lcfg.c中,Fls.c中声明了Fls_WriteFailed[2]来自外部,在Dem_SetEventStatus()中使用了变量,在编译Fls.c时不需要Fls_WriteFailed的原型,在链接过程中将二者关联在一起。
图2 link time配置
Post-build time
Post-build存在两种类型,分别是Post-build Loadable和Post-build selectable,其中Post-build Loadable与link time非常类似,不同点在于Post-build Loadable的数据位于允许重新加载的特定内存段。Post-build Selectable则是提供了多个配置集,在运行时加载特定的配置集,其方式如图3所示。
Post-build time配置在AUTOSAR中通常在模块的*_pbcfg.h、*_pbfg.c。
图3 post buile配置
Post-build这种方式通常可用于协调OEM和Tier1之间的ECU开发,例如ECU需要匹配不同的车型,而其中BSW中的差别仅在通信矩阵,则可以通过Post-build方式,将通信模块交由OEM负责,这样即使匹配不同车型或者频繁更改dbc,都可以快速响应。