《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于AutoSAR規(guī)范的驅(qū)動(dòng)代碼生成工具箱設(shè)計(jì)與實(shí)現(xiàn)
基于AutoSAR規(guī)范的驅(qū)動(dòng)代碼生成工具箱設(shè)計(jì)與實(shí)現(xiàn)
來(lái)源:電子技術(shù)應(yīng)用2012年第7期
馮輝宗,劉先東,蔣建春,邱寶梅
重慶郵電大學(xué) 重慶高校汽車電子與嵌入式系統(tǒng)工程研究中心,重慶400065
摘要: 針對(duì)汽車控制器中驅(qū)動(dòng)代碼生成存在對(duì)硬件依賴性強(qiáng)、代碼格式不規(guī)范、可重用性不強(qiáng)等問(wèn)題,提出利用仿真建模工具Simulink/RTW、結(jié)合AutoSAR規(guī)范、基于代碼生成技術(shù)的汽車控制器驅(qū)動(dòng)工具箱的設(shè)計(jì)方法。通過(guò)對(duì)驅(qū)動(dòng)配置模塊的不同芯片配置及對(duì)相關(guān)參數(shù)的設(shè)置滿足多處理器需求,依據(jù)AutoSAR規(guī)范對(duì)驅(qū)動(dòng)函數(shù)接口的封裝實(shí)現(xiàn)代碼的可重用性。最后將設(shè)計(jì)的驅(qū)動(dòng)工具箱結(jié)合代碼生成模板應(yīng)用于BCM車窗控制系統(tǒng),實(shí)驗(yàn)證明了該方法的高效性和可行性。
中圖分類號(hào): TP316.2
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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ā)展和代碼自動(dòng)生成技術(shù)的出現(xiàn),汽車電子控制系統(tǒng)實(shí)現(xiàn)了從建模、仿真到代碼自動(dòng)生成的一體化開(kāi)發(fā), 極大提高了生成代碼的效率、通用性及可移植性[1]。但是,汽車控制系統(tǒng)中驅(qū)動(dòng)代碼卻依賴于特定的硬件與運(yùn)行環(huán)境,主要還是以手工編寫代碼為主[2]。這種手工編寫代碼的方法存在大量的重復(fù)勞動(dòng),且代碼無(wú)法規(guī)范統(tǒng)一,可重用性不強(qiáng)、可讀性差。

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

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

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

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

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

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

 

 

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