AUTOSAR架构中的配置文件
注:本文首發于公眾號“嵌入式軟件實戰派”
?
你有沒有發覺AUTOSAR代碼里面有些文件名很是引起你注意,如xxx_PBcfg.c、xxx_Lcfg.c和xxx_Cfg.h。
看起來,這像是配置文件,實際也證明跟AUTOSAR配置有關(更改配置工具如Davinci Configurator上的配置信息)生成代碼時,這些文件會有相應的變化。
那么,問題來了,一個xxx_cfg.h或者xxx_cfg.c就搞定了,為什么會有三種配置文件呢?
于是,我要刨根問底了。
cfg還好理解,就是configuration的意思,這個PB和L又是什么意思?
翻了很多AUTOSAR官方文檔,終于找到了,其實AUTOSAR Base Software支持以下幾種配置類型:
1. Pre-compile time
-
處理器指令
-
代碼生成(選擇和合成)
2. Link time
-
module外的const數據;?模塊編譯后和配置數據
3. Post-build time
-
加載Module外部的const數據.?加載數據到指定的memory段
獨立于配置類,可以通過變化點提供單個或多個配置集。如果提供了多個配置集,則在運行時綁定變量點的情況下,將在運行時選擇實際使用的配置集。
在許多情況下,一個模塊的配置參數將具有不同的配置類別。
例如,提供構建后時間配置參數的模塊仍將具有一些可進行預編譯時間配置的參數。
這樣看來,這個PB就是post-build time了,而L就是Link time了。那么各個配置文件有什么作用和區別呢?
Pre-compile time
使用:
-
啟用/禁用可選功能。這樣可以排除不需要的部分源代碼。
-
優化性能和代碼大小。在大多數情況下,使用#defines比訪問常量甚至通過指針訪問常量的代碼效率更高。
生成的代碼避免了代碼和運行時開銷。
Pre-compile的配置要通過兩個配置文件(xxx_Cfg.h,?xxx_Cfg.c)?實現:
-
xxx_Cfg.h?包含如?宏定義和或者#defines
-
xxx_Cfg.c?包含如const數據
Nm_cfg.c
#include?"Nm_Cfg.h"/*lint?-restore?*/CONST(Nm_NmFunctionTableType,?NM_CONST)?Nm_NmFunctionTable[1]?=?{??/*?PRQA?S?1514,?1533?*/??/*?MD_CSL_ObjectOnlyAccessedOnce?*//*?Index????GetLocalNodeIdentifier????????GetNodeIdentifier????????GetPduData????????GetState????????NetworkRelease????????NetworkRequest????????PassiveStartUp??????????????Referable?Keys?*/{?/*?????0?*/?CanNm_GetLocalNodeIdentifier,?CanNm_GetNodeIdentifier,?CanNm_GetPduData,?CanNm_GetState,?CanNm_NetworkRelease,?CanNm_NetworkRequest,?CanNm_PassiveStartUp?}???/*?[CanNm]?*/};m_Cfg.h
/*?Global?Properties?*/ #ifndef?NM_DEV_ERROR_DETECT #define?NM_DEV_ERROR_DETECT?STD_ON #endif #ifndef?NM_DEV_ERROR_REPORT #define?NM_DEV_ERROR_REPORT?STD_ON #endif #define?NM_VERSION_INFO_API????????????????????????????STD_OFFNm.c
/*?NM?Interface?version?is?decimal?coded.?*/ CONST(uint8,?NM_CONST)?Nm_MainVersion??????=?NM_SW_MAJOR_VERSION; CONST(uint8,?NM_CONST)?Nm_SubVersion???????=?NM_SW_MINOR_VERSION; CONST(uint8,?NM_CONST)?Nm_ReleaseVersion???=?NM_SW_PATCH_VERSION;Link time
Link time配置用于:
-
模塊配置僅僅對目標代碼可用(例如IP Protection和warranty原因)
-
在編譯之后但在鏈接之前創建配置。
例如
Mcu_Lcfg.c
/*?QAC?Warning:?START?Msg(2:3211)-2?*/ /*?Data?Structure?of?RAM?setting?Configuration?*/ CONST(Mcu_RamSetting,?MCU_VAR)?Mcu_GstRamSetting[1]?= {/*?Index:?0?-?McuRamInitConfiguration?*/{/*?pRamStartAddress?*//*?MISRA?Violation:?START?Msg(4:0306)-1?*/ /*?QAC?Warning:?START?Msg(2:0315)-3?*/ /*?QAC?Warning:?START?Msg(2:3892)-4?*/(P2VAR(uint8,?TYPEDEF,?MCU_CONFIG_DATA))?0xFEBD0000UL,/*?END?Msg(2:3892)-4?*//*?END?Msg(2:0315)-3?*//*?END?Msg(4:0306)-1?*//*?ulRamSectionSize?*/0x00000100UL,/*?ucRamInitValue?*/0xFFU,/*?enRamWriteSizeSel?*/MCU_8BIT_SIZE} };Mcu.c
?/*?Get?the?pointer?to?the?RAM?structure?*/LpRamSetting?=?&Mcu_GstRamSetting[RamSection];?Post-build time
?Post-build time會用于
-
數據配置,其中僅定義結構,但在ECU生成期間未知內容
-
在ECU-build時之后(例如,生產end of line,測試和校準期間)可能會更改或必須修改的數據配置
-
跨不同汽車版本(相同應用,不同配置)的ECU的可重用性,例如 與豪華版轎車的ECU相比,低成本版轎車的ECU在總線上傳輸的信號更少。
例如
?
關注“嵌入式軟件實戰派”,回復“AUTOSAR”獲得更多實戰教程。
總結
以上是生活随笔為你收集整理的AUTOSAR架构中的配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NS3 Tutorial 中文版:第二
- 下一篇: HDFS文件系统的基础理论,HDFS工作