01
緣由
在AUTOSAR的配置軟件中,經(jīng)??梢砸姷絇ostBuild、Precompile、Linktime這三個的影子,所以想搞清楚它們的區(qū)別,以及知道大概是干什么的。
1)DaVinciCFG中
2)EB工具中
3)在買AUTOSAR模塊時
02
編譯基礎知識回顧
在研究之前,先復習一下編譯過程的基礎知識
注意:
靜態(tài)庫是經(jīng)過編譯的二進制文件。在鏈接階段,引用庫一旦鏈接成功,將匯編生成的目標文件與引用的庫一起鏈接打包到可執(zhí)行文件當中。
預處理Preprocessing :
1、處理一些#開頭的預處理指令,比如#if等
2、進行宏定義的替換
3、去除代碼注釋
編譯Compilation :把.C文件編譯生成匯編代碼.asm
匯編Assemble :把.asm會變成中間文件.o
鏈接Linking :鏈接.o,.a,.lib文件生成可執(zhí)行文件
03
為什么需要配置?
AUTOSAR標準了很多東西,所以在考慮問題方面,需要做的更加 全面 ,以應付不同的使用軟件使用場景。那么代碼不可避免的就需要配置一些東西,比如使用宏定義來選擇哪些模塊不需要。再比如,傳統(tǒng)的ECU汽車軟件開發(fā)結(jié)束后,不修改代碼是無法更新DBC的,即使功能類似,也做不到,只能重新開發(fā),改動比較大,重新開發(fā)還要重新測試。因此AUTOSAR提出了Post-build的方案,運行在開發(fā)結(jié)束后對ECU的參數(shù)進行修改,以便于節(jié)省維護和測試成本。
按照編譯過程的階段,把配置方法進行分類,分為三類,分別是 Pre-compile 、Link time和 Post-build ,下面三類AUTOSR都是支持的。
04
Pre-Compile
實現(xiàn)手段:
1、通過宏定義來Enable和disable一些不需要的模塊
2、使用宏定義來定義常量進行配置
在預編譯階段,就會把這些配置項進行宏替換,在實際使用當中,配置項放在單獨的.c和.h文件中(*_Cfg.h, *_Cfg.c),比如Spi.c的配置項,放在了Spi_Cfg.c和Spi.h中,并且被配置的文件(比如Spi.c必須有源文件)不能是.o,.a等庫文件或者中間文件,因為庫已經(jīng)被預編譯過一次了,只能參與到鏈接。
優(yōu)勢:
1)節(jié)省運行時的開銷,在預編譯階段就完成了配置
劣勢:
1)參數(shù)配置是通過宏來實現(xiàn),要求被配置的C要以源碼形式提供,不能以庫或者中間文件的形式
2)參數(shù)類型更改需要重新編譯軟件
*_Cfg.h中放宏定義
*_Cfg.c中放const常量
一個示例
eg.使能和關(guān)閉一個功能
Spi_Cfg.h:
Spi_Cfg.c:
Spi.c(必須要有Spi.c的源文件,不能是庫)
05
Link-time
Link time在鏈接時進行配置,適合對沒有C源碼的庫(.a,.lib)或者中間文件(.o)進行配置。
eg.
Dem_Cfg.h
typedef uint16 Dem_EventIdType; /* total number of events = 380 = > uint16 required */
#define DemConf_DemEventParameter_FLS_E_ERASE_FAILED_0 1U
#define DemConf_DemEventParameter_FLS_E_ERASE_FAILED_1 2U
#define DemConf_DemEventParameter_FLS_E_WRITE_FAILED_0 3U
#define DemConf_DemEventParameter_FLS_E_WRITE_FAILED_1 4U
#define DemConf_DemEventParameter_NVM_E_REQ_FAILED 5U
#define DemConf_DemEventParameter_CANSM_E_BUS_OFF 6U
Fls_Lcfg.c
#include "Dem_Cfg.h" /* for providing access to event symbols */
const Dem_EventIdType Fls_WriteFailed[2] = {DemConf_DemEventParameter_FLS_E_WRITE_FAILED_1,
DemConf_DemEventParameter_FLS_E_WRITE_FAILED_2};
File Fls.c (available as object code):
#include "Dem.h" /* for reporting production errors */
extern const Dem_EventIdType Fls_WriteFailed[];
Dem_SetEventStatus(Fls_WriteFailed[instance], DEM_EVENT_STATUS_FAILED);
06
Post-build
適合的場景:
1)適合ECU適配ECU的數(shù)據(jù)配置,比如產(chǎn)線出產(chǎn)后的一些標定和校準參數(shù)(這些參數(shù)事先在開發(fā)期間,不知道這些參數(shù),一般每一臺機器的因為硬件的微小差異導致每臺機器的參數(shù)都不一樣),或者每臺機器的序列號、版本配置,都是屬于Post-build time配置。
2)跨不同汽車版本(相同應用,不同配置)的ECU的可重用性,例如 與豪華版轎車的ECU相比,低配版轎車的ECU在總線上傳輸?shù)?a target="_blank">信號更少,其他配置一樣。
Post-build概述
就是單獨把配置的參數(shù)放到一個 內(nèi)存區(qū)域 ,這個區(qū)域可以 單獨被刷寫 (通過flash擦寫工具,通過UDS服務,通過Bootloader修改參數(shù)),這樣做的一個好處是,OEM不需要知道代碼邏輯,甚至不需要編譯器(有些符合功能安全的編譯器是要license才能使用的),也能修改BSW總的部分配置參數(shù)。
Post-build的工作流
如前面所說Post-build time是在鏈接得到二進制后,再進行修改的,下面是Vector給出的一個Post-build的工作流:
1)分為兩大塊,左邊是TIER 1(零部件廠商,一般只做單個ECU的公司)的工作流,右邊是OEM(整車廠,比如大眾等)的工作流。
2)TIER 1通過Vector的兩個工具Davinci Developer和Dabinci Configrator Pro配置完,開發(fā)后,再用編譯器,編譯鏈接,生成HEX文件。
3)OEM使用Dabinci Configrator可以更改軟件的部分配置(不是全部),然后通過Post Build Tool生成二進制文件,單獨更新配置到ECU
4)Tier1和OEM的主要區(qū)別是,OEM不需要編譯器,并且只能配置部分參數(shù)。
Post-build分為兩種
1) Post-Build Loadable :配置參數(shù)只有一份,單獨保存在flash的一個固定區(qū)域(特定地址),可以修改參數(shù)配置,可以單獨被更新。
2) Post-Build Selectable :配置參數(shù)預先配置好了幾份放在flash的一個固定區(qū)域(特定地址),不能修改參數(shù)配置,只能從預先放好的配置中選擇一份配置。
Post-build與Link time的區(qū)別
1)時間上的不同:Link time是鏈接時配置好,Post-build是編譯鏈接完成后,再需要修改參數(shù)
2)Link time完成后,不支持單獨修改參數(shù),要想修改參數(shù)需要重新編譯鏈接,Post-build支持單獨修改參數(shù)(通過flash擦寫工具,通過UDS服務,通過Bootloader修改參數(shù))
07
總結(jié)
注意事項:
1)如果需要使用Post-Build中的Loadable或者Selectable,在購買AUTOSAR時需要選擇,就是說要多給錢。
2)配置參數(shù)不是多有的BSW參數(shù)都可以配置,哪些參數(shù)可以配置,哪些不可以配置需要和OEM溝通好,在AUTOSAR標準中也有定義,比如《AUTOSAR_SWS_COM.pdf》第129頁。
X:表示支持
--:表示不支持
-
AUTOSAR
+關(guān)注
關(guān)注
10文章
350瀏覽量
21471 -
ecu
+關(guān)注
關(guān)注
14文章
880瀏覽量
54404 -
預處理器
+關(guān)注
關(guān)注
0文章
13瀏覽量
2221
發(fā)布評論請先 登錄
相關(guān)推薦
評論