徐旭
?
Simulink 環境下的TCU代碼集成方法
徐旭
(陜西法士特汽車傳動工程研究院智能傳動研究所,陜西 西安 710119)
將Simulink環境下搭建的模型轉化為C代碼,通過調用MCU(微處理器)的編譯器將這些C代碼進行編譯,并封裝為庫文件,ECU基礎軟件在IDE環境下也封裝為庫文件,最終在Simulink環境下通過調用MCU編譯器的鏈接器進行兩個庫文件的合并,最終生成MCU可執行的二進制文件。
Simulink;編譯器;庫文件;鏈接
隨著Simulink建模技術在汽車行業中的的應用,越來越多的算法工程師開始在Simulink下進行控制邏輯的模型搭建,以便提高控制算法的設計及驗證周期,Simulink環境本身具有強大的軟件模型庫,可供軟件工程師根據自己的需求從庫中提取需要的模塊進行任意邏輯的組合,在該環境下可通過仿真輸入驗證整個控制過程的動態響應。
驗證完的算法需要運行在ECU(Electronic Control Uint)控制器上才能真正的將工程師的設計運用到實踐中來。
這就提出了將Simulink模型轉化為控制器認識的 – 可執行文件的問題,控制器內部是由MCU(微處理器)及外設驅動(CAN驅動、輸入、輸出驅動)組成的一個電控單元,其主體是類似于人類大腦的MCU在接收外界的輸入信號,根據內部提前設計好的運算邏輯,進行計算后再輸出,從而讓執行機構產生相應的動作。
MCU內部運行的是編譯器編譯后生成的二進制文件 – Interl格式的Hex文件,編譯器類似于一個翻譯者的角色,將人們在計算機上書寫的高級語言(C語言)翻譯成MCU可讀懂的機器語言。
這就需要我們在Simulink環境下調用MCU的編譯器對Simulink生成的C代碼進行編譯,并與ECU的基礎軟件進行鏈接,從而最終生成Hex文件。
Simulink本身是MATLAB軟件中的一個功能模塊,主要用來進行基于模型的開發,從MATLAB的軟件環境來看,其隸屬關系如圖1。

圖1 MATLAB軟件開發環境示意圖
Simulink內置Embedded Coder工具可實現將Simulink模型生成符合嵌入式系統使用的C代碼功能,其內置的命令 rtwbuild ( model ),可一鍵式將模型轉化為C代碼,參數model是需要生成C代碼的模型名。
在實際中我們常使用的命令是rtwbuild (subsystem, ‘Mode’,‘ExportFunctionCalls’),該命令可針對模型( model )中的某一個子系統(Subsystem)進行C代碼的生成,將模型中的子系統生成一個獨立的函數(model.c文件)。
所以我們可通過RTW命令實現模型轉化為C代碼的過程。
大型的Simulink模型生成的C文件往往不止一兩個,隨著模型中子系統數量的增加,生成的C文件常多達幾十個,如何將這些文件準確、可靠的與ECU基礎軟件進行“合并”是我們在進行代碼集成過程中需要考慮的,這里我們通過庫文件的形式來將Simulink生成的C代碼進行封裝。
所謂的庫文件也就是一系列工程文件的集合,而工程文件也就是原始C文件經過編譯后生成的文件。
圖2展示的C代碼的典型編譯工程(以hello.c文件為例),該文件會先后經過預編譯、編譯、匯編三個步驟,匯編后生成的hello.o文件就是工程文件,該文件已經將C語言書寫的高級語言轉化了MCU可認識的機器語言,我們將這些工程文件進行打包合并后可以生成庫文件hello.lib(可類比理解為壓縮文件)。

圖2 C文件典型編譯過程示意圖
ECU基礎軟件的開發通常是在MCU專屬的編譯器環境下進行的(俗稱的IDE – 集成開發環境),軟件開發工程師在該環境下進行手工代碼的編寫與功能的開發,IDE環境下本身就支持C代碼的編譯功能,可通過一鍵式的“BUILD”功能按鍵將工程路徑下的C代碼進行編譯,并通過前期的編譯選項設置,將工程文件生成為基礎軟件庫文件 – BSW.lib。
合并也就是將上述的兩個庫文件進行鏈接的過程,鏈接器(linker)是編譯器軟件中的一個子軟件,是專門用來實現代碼鏈接的工具,代碼鏈接的過程類似于積木的拼接過程,將hello.lib與BSW.lib中的外部符號進行查找,然后將符號的地址填充到對應的代碼中,當所有的符號都可準確定位和填充后,則可以生成Hex文件。
綜上所述,為了將Simlink模型轉化為Hex文件,先需要通過RTW命令將模型轉化為C代碼,并調用MCU編譯器將C代碼封裝為庫文件,ECU基礎軟件開發人員則并行在MCU IDE環境下進行基礎軟件的開發工作,并也封裝為庫文件,最終在Simulink環境下通過調用MCU的連接器將上下層的庫文件進行合并,生成Hex文件。

圖3 Simulink環境下的代碼集成方法示意圖
[1] 孫忠瀟.Simulink仿真及代碼生成技術入門到精通[M].北京航空航天大學出版社,2015.
Binary Code Generation of TCU Embedded System In Simulink
Xu Xu
( Shaanxi Fast Auto Drive Engineering Research Insitute, Shaanxi Xi’an 710119 )
Convert the Simulink model to C code, invoke MCU compiler to compile the C code into static library, and compile the ECU basic software into static libraty under the IDE, link both library in Simulink and generate the final binary code.
Simulink; Complier; Library file; Link
U467
A
1671-7988(2019)07-73-02
徐旭,電器工程師,中級工程師,就職于陜西法士特汽車傳動研究院智能傳動研究所,主要從事嵌入式系統軟件開發,AutoSAR平臺下的底層軟件開發,Simulink代碼集成等方面的研究工作。
U467
A
1671-7988(2019)07-73-02
10.16638/j.cnki.1671-7988.2019.07.024