《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于AutoSAR規(guī)范的驅(qū)動代碼生成工具箱設計與實現(xiàn)
基于AutoSAR規(guī)范的驅(qū)動代碼生成工具箱設計與實現(xiàn)
來源:電子技術(shù)應用2012年第7期
馮輝宗,劉先東,蔣建春,邱寶梅
重慶郵電大學 重慶高校汽車電子與嵌入式系統(tǒng)工程研究中心,重慶400065
摘要: 針對汽車控制器中驅(qū)動代碼生成存在對硬件依賴性強、代碼格式不規(guī)范、可重用性不強等問題,提出利用仿真建模工具Simulink/RTW、結(jié)合AutoSAR規(guī)范、基于代碼生成技術(shù)的汽車控制器驅(qū)動工具箱的設計方法。通過對驅(qū)動配置模塊的不同芯片配置及對相關參數(shù)的設置滿足多處理器需求,依據(jù)AutoSAR規(guī)范對驅(qū)動函數(shù)接口的封裝實現(xiàn)代碼的可重用性。最后將設計的驅(qū)動工具箱結(jié)合代碼生成模板應用于BCM車窗控制系統(tǒng),實驗證明了該方法的高效性和可行性。
中圖分類號: TP316.2
文獻標識碼: A
文章編號: 0258-7998(2012)07-0033-04
Design and implementation of the driver code generation toolbox based on AutoSAR
Feng Huizong,Liu Xiandong,Jiang Jianchun,Qiu Baomei
Engineering Research Center of Automotive Electron and Embeded System, Chongqing University of Posts and Telecommunications, Chongqing 400065,China
Abstract: According to the problems of code generation in the driver of auto controller, such as depending on hardware strongly,code format not standard, reusability not strong and so on, this paper puts forward a kind of designing method of the driver toolbox of auto controller using the simulation modeling tools Simulink/RTW, combining with AutoSAR norms,based on code generation. In designing process, it meets many processors through different chips configuration and the related parameters settings of the drive configuration module, and realizes the code reusability through the encapsulation of driver function interface according to AutoSAR norms. Finally, the designed driver toolbox is used in BCM windows control system, combining with the code generation template, and the experimental results proves the high efficiency and feasibility of this method.
Key words : code generation;the drive toolbox;AutoOSAR;Simulink/RTW

    隨著汽車電子的飛速發(fā)展和代碼自動生成技術(shù)的出現(xiàn),汽車電子控制系統(tǒng)實現(xiàn)了從建模、仿真到代碼自動生成的一體化開發(fā), 極大提高了生成代碼的效率、通用性及可移植性[1]。但是,汽車控制系統(tǒng)中驅(qū)動代碼卻依賴于特定的硬件與運行環(huán)境,主要還是以手工編寫代碼為主[2]。這種手工編寫代碼的方法存在大量的重復勞動,且代碼無法規(guī)范統(tǒng)一,可重用性不強、可讀性差。

    所以,設計一款可以兼容多款處理器的驅(qū)動代碼工具,生成統(tǒng)一性、規(guī)范性和開發(fā)性代碼成為行業(yè)發(fā)展的趨勢。當前在汽車行業(yè)應用最廣的是德國dSPACE公司的Targetlink代碼生成工具和Mathworks公司的RTW代碼生成工具[3]。本文采用Matlab/Simulnik/RTW工具設計并實現(xiàn)了基于代碼生成技術(shù)的驅(qū)動工具箱,實現(xiàn)了汽車電控系統(tǒng)中驅(qū)動代碼生成的可靠性、安全性、高效性及可移植性。
1 AutoSAR規(guī)范驅(qū)動接口
    汽車開放式系統(tǒng)架構(gòu)標準AutoSAR(AuTomotive Open System ARchitecture),主要可分為三層:應用層、運行時環(huán)境和基礎軟件。其中基礎軟件又包括系統(tǒng)服務、ECU抽象層和uC抽象層,所有驅(qū)動程序都包含在uC抽象層和ECU抽象層中。
    本文依據(jù)AutoSAR規(guī)范中ECU抽象層和uC抽象層中硬件接口標準編寫驅(qū)動程序,組成驅(qū)動資源庫[4]。驅(qū)動程序按照硬件功能特點可分為四類:通用I/O硬件驅(qū)動、通信硬件驅(qū)動、存儲硬件驅(qū)動和微控制器驅(qū)動。其內(nèi)容與結(jié)構(gòu)如圖1所示。

    AutoSAR規(guī)范定義了汽車電控單元硬件驅(qū)動程序的接口規(guī)范,把驅(qū)動函數(shù)進行了標準化和模塊化,為驅(qū)動工具箱開發(fā)應用奠定了良好的基礎。
2 驅(qū)動代碼生成工具箱的設計與實現(xiàn)
2.1 設計方法

    在Simulink/RTW平臺上設計基于AutoSAR規(guī)范的驅(qū)動代碼生成工具箱是通過建立S函數(shù)模塊配置參數(shù)并設計封裝入庫[5]來實現(xiàn)的。驅(qū)動工具箱的設計流程如圖2所示,具體內(nèi)容如下:

    (1)分析AutoSAR規(guī)范中驅(qū)動函數(shù)接口標準的內(nèi)容,確定驅(qū)動應用代碼的內(nèi)容。
    (2)分析汽車電控系統(tǒng)中驅(qū)動代碼的需求,確定驅(qū)動應用代碼的格式。
    (3)根據(jù)規(guī)范和需求確定驅(qū)動工具箱的設計方案,設計驅(qū)動工具箱為驅(qū)動配置功能模塊和驅(qū)動API功能模塊兩大類。
    (4)編寫S函數(shù),實現(xiàn)驅(qū)動配置功能模塊和驅(qū)動API功能模塊的參數(shù)變量。
    (5)在Simulink平臺上建立S函數(shù)模塊并添加各功能模塊的參數(shù)變量。
    (6)設計和封裝S函數(shù)模塊內(nèi)容及格式,實現(xiàn)驅(qū)動功能模塊的功能和創(chuàng)建驅(qū)動工具箱并添加到Simulink庫中。
    (7)依據(jù)驅(qū)動工具箱的功能編寫代碼生成模板,實現(xiàn)驅(qū)動應用代碼自動生成。
2.2 實現(xiàn)
    下面以驅(qū)動ADC模塊的實現(xiàn)為例詳細介紹驅(qū)動工具箱模塊的實現(xiàn)方法。
    依據(jù)驅(qū)動工具箱的設計方案可知,驅(qū)動ADC功能模塊分為配置模塊和API模塊。ADC配置模塊實現(xiàn)不同處理器初始化配置;API模塊(即ADC驅(qū)動函數(shù)模塊)實現(xiàn)驅(qū)動函數(shù)接口的配置及函數(shù)的調(diào)用。ADC功能模塊實現(xiàn)的主要步驟及內(nèi)容如表1所示。

    ADC驅(qū)動模塊庫中配置模塊通過初始化相關參數(shù)的配置,實現(xiàn)不同處理器下驅(qū)動ADC使用時其相關的頭文件包含、配置文件生成、初始化結(jié)構(gòu)體參數(shù)配置及ADC的API開關定義。ADC驅(qū)動API模塊由API函數(shù)接口變量的配置實現(xiàn)驅(qū)動函數(shù)與控制算法的無縫連接,并配置函數(shù)體參數(shù)實現(xiàn)API函數(shù)的正確調(diào)用。
    各驅(qū)動模塊設計封裝好后添加到Simulink庫中就完成了驅(qū)動工具箱的設計。圖3是驅(qū)動代碼生成工具箱各功能模塊的結(jié)構(gòu)圖。

3 驅(qū)動工具箱代碼生成模板的設計與實現(xiàn)
    代碼生成模板基于模塊TLC設計,其主要功能是驅(qū)動函數(shù)初始化代碼的實現(xiàn)和API函數(shù)調(diào)用代碼的實現(xiàn)[5]。
3.1 設計
    基于RTW的代碼生成工具設計驅(qū)動工具箱代碼生成模板,主要包含系統(tǒng)目標TLC和驅(qū)動模塊TLC。系統(tǒng)目標TLC在Matlab7.1版系統(tǒng)目標osekworks.tlc基礎上修改,修改TLC組件的包含及相關文件名即可[6]。驅(qū)動工具箱代碼生成模板結(jié)構(gòu)圖如圖4所示。

 

 

    驅(qū)動配置模塊TLC實現(xiàn)驅(qū)動初始化部分代碼的生成,驅(qū)動API模塊實現(xiàn)驅(qū)動函數(shù)調(diào)用代碼的生成。下面結(jié)合這兩類功能模塊TLC介紹驅(qū)動工具箱代碼生成模板的設計。
    (1)驅(qū)動配置模塊TLC的設計
    驅(qū)動配置模塊TLC結(jié)合配置模塊參數(shù)生成關聯(lián)芯片選擇的驅(qū)動初始化相關代碼,其主要內(nèi)容可以分為三大部分,具體內(nèi)容如下:
    ①頭文件包含代碼。TLC文件中由條件判斷語句判斷文件包含命令,再由TLC中文件內(nèi)插入代碼語句實現(xiàn)頭文件包含代碼。
    ②配置文件與API開關代碼。TLC中首先判斷芯片選擇內(nèi)容,再由配置文件生成語句實現(xiàn)對應的配置文件生成,最后在生成的配置文件中添加對應選擇芯片的驅(qū)動API開關代碼內(nèi)容。
    ③用戶自定義函數(shù)與驅(qū)動初始化函數(shù)代碼。用戶自定義函數(shù)包含驅(qū)動初始化函數(shù)、實現(xiàn)用戶自定義驅(qū)動初始化函數(shù)功能。用戶自定義函數(shù)代碼包含main函數(shù)中的函數(shù)調(diào)用、頭文件中函數(shù)的聲明、源文件中函數(shù)體的定義等內(nèi)容。驅(qū)動初始化結(jié)構(gòu)體參數(shù)和初始化函數(shù)內(nèi)嵌到自定義函數(shù)定義里。
    (2)驅(qū)動API模塊TLC的設計
    按照API模塊代碼生成模板功能,驅(qū)動API模塊TLC要實現(xiàn)的是API函數(shù)的調(diào)用代碼和函數(shù)返回值傳遞。API函數(shù)調(diào)用代碼包含函數(shù)及參數(shù)配置,在TLC中由獲取模塊參數(shù)值實現(xiàn)。函數(shù)返回值的傳遞由全局變量實現(xiàn),在配置文件中對全局變量進行定義聲明。
3.2 實現(xiàn)
    每個驅(qū)動模塊代碼生成模板實現(xiàn)方法都一致。下面以ADC為例分析驅(qū)動配置模塊TLC和驅(qū)動API模塊TLC介紹代碼生成模板的具體實現(xiàn)。
    (1)ADC驅(qū)動配置模塊TLC的實現(xiàn)
    ADC驅(qū)動模塊TLC內(nèi)容分三部分,各部分通過條件選擇和配置文件實現(xiàn)與芯片選擇關聯(lián)。
    ①頭文件包含部分實現(xiàn)主要代碼如下:
    %assign
      c/hFile=LibCreateSourceFile("Source/Header","Custom,
"%<SFcnParamSettings.ObjFName>")
    %<LibSetSourceFileSection(c/hFile,"Functions",buffer)>
    //頭文件或者源文件生成代碼實現(xiàn)
      %openfile buffer
      #include&ldquo;adc_app.h&rdquo;
      %closefile buffer
      ②配置文件與API開關部分:在生成的配置文件中添加相關API開關,實現(xiàn)代碼如下:
      %openfile buffer
      %if SFcnParamSettings.Adc_GetVersionInfo_API==
"on"
    #define ADC_GET_VERSION_INFO_API STD_ON
    &hellip;&hellip;.//各驅(qū)動API開關添加
    %closefile buffer
    ③配置文件與驅(qū)動初始化配置:在生成的配置文件中添加驅(qū)動初始化代碼,實現(xiàn)代碼如下:
    %openfile buffer
    void %<SFcnParamSettings.APPFcnName>()
    {const Adc_ConfigType
    %<SFcnParamSettings.Adc_Config>={
    ADC驅(qū)動初始化結(jié)構(gòu)體參數(shù)代碼};
    Adc_Init(&%<SFcnParamSettings.Adc_Config>);}
    %closefilebuffer
    (2)ADC驅(qū)動API模塊TLC的實現(xiàn)
    驅(qū)動API模塊TLC中主要是函數(shù)參數(shù)配置與返回值傳遞,具體實現(xiàn)代碼如下:
    %openfile buffer
    Extern%<SFcnParamSettings.DataBufferType>
    %closefile buffer
    在生成源文件中插入以下代碼實現(xiàn)全局變量定義:
    %openfile buffer
    %<SFcnParamSettings.DataBufferName>={0};
    %closefile buffer
4 驅(qū)動代碼生成工具箱的應用
    驅(qū)動工具箱應用于BCM車窗控制系統(tǒng)中,實現(xiàn)車窗控制系統(tǒng)中驅(qū)動代碼的自動生成。
    車窗控制系統(tǒng)中需要驅(qū)動的有兩部分:車窗控制函數(shù)的輸入信號由ADC采樣獲??;車窗控制函數(shù)輸出信號由DIO或者PORT實現(xiàn)對目標ECU管腳的輸出,完成對車窗的驅(qū)動。
    使用Real-Time Workshop將Simulink模型轉(zhuǎn)化為代碼時,編譯器通過系統(tǒng)目標TLC并調(diào)用模塊對應的TLC文件,最終生成滿足目標ECU的C語言代碼。下面是RTW中驅(qū)動應用于車窗控制模型代碼自動生成的三個步驟:
    第一步:修改Matlab中系統(tǒng)目標TLC文件osekworks.tlc。
    第二步:配置模型參數(shù)配置對話框中的標簽頁對其中幾個標簽頁進行設置。
    (1)Solver:設置Solver類型為離散(discrete)固定步長(Fixed-step);
    (2)Real-Time Workshop:在該標簽頁中填寫系統(tǒng)目標osekworks.tlc,調(diào)用對應的模塊TLC文件來生成代碼。
    第三步:代碼自動生成。 點擊Real-Time Workshop中的GenerateCode可以直接生成代碼。
    從代碼生成報告中可看出,驅(qū)動應用部分代碼主要體現(xiàn)在包含驅(qū)動初始化代碼的配置文件和調(diào)用驅(qū)動API函數(shù)的車窗控制算法代碼文件中。下面是兩部分的驅(qū)動應用代碼生成的結(jié)果。
    (1)Adc_App.c文件中ADC驅(qū)動初始化部分:
    #include "Adc_App.h"
    uint16 DataBufferPtr_FR[1]= { 0 };
    void Adc_APP_Init_FR()
        {const Adc_ConfigType Adc_Config= {
        ADC_CHANNEL_3,
        &hellip;&hellip;};//結(jié)構(gòu)體參數(shù)配置
        Adc_Init(&Adc_Config);
    (2)車窗控制scan_MR_window_SW中ADC驅(qū)動應用:
    unsigned char scan_MR_window_SW(old_AD)
    {unsigned int AD_value,status;
    Adc_APP_Init_MR();
    Adc_SetupResultBuffer(ADC_GROUP_2,DataBuffer Ptr_MR);    本文采用Matlab/Simulink/RTW工具,結(jié)合AutoSAR驅(qū)動規(guī)范,提出了一種基于代碼生成技術(shù)的汽車電子底層驅(qū)動工具箱的設計方法。該方法能屏蔽芯片硬件特性的差異性,滿足不同硬件處理器要求。通過BCM車窗控制模型對驅(qū)動的應用,實現(xiàn)了代碼的自動生成??焖偬鎿Q控制模型中的被控對象,極大地方便了汽車電子嵌入式控制系統(tǒng)底層驅(qū)動代碼的應用,提高了汽車電子控制系統(tǒng)的開發(fā)效率。
參考文獻
[1] 齊振恒,孫中杰,李濤.RTW嵌入式代碼自動生成機制與代碼結(jié)構(gòu)分析[J].計算機測量與控制,2010,18(3):639-642.
[2] 鄢化彪.構(gòu)建RTW下的嵌入式系統(tǒng)開發(fā)環(huán)境.單片機與嵌入式系統(tǒng)應用[J].2007(1):72-73.
[3] Real-Time workshop for use with Simulink[M].The Mathworks Inc.1999:5-26.
[4] 王安軍,蔣建春,陳培然.符合AUTOSAR 規(guī)范的底層驅(qū)動軟件開發(fā)[J].計算機工程,2011(9):62-64、67.
[5] 陳永春.從Matlab/Simulink模型到代碼實現(xiàn)[M].北京:清華大學出版社,2002:180-200.
[6] Hu Jinhui,Hu Dabin,Xiao Jianbo.Study of real-time simulation system based on RTW and Its application in warship simulator[C].Conference on Electronic Measurement  & Instruments,2009:966-970.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。