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

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

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

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

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

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

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

 

 

    驅(qū)動配置模塊TLC實(shí)現(xiàn)驅(qū)動初始化部分代碼的生成,驅(qū)動API模塊實(shí)現(xiàn)驅(qū)動函數(shù)調(diào)用代碼的生成。下面結(jié)合這兩類功能模塊TLC介紹驅(qū)動工具箱代碼生成模板的設(shè)計(jì)。
    (1)驅(qū)動配置模塊TLC的設(shè)計(jì)
    驅(qū)動配置模塊TLC結(jié)合配置模塊參數(shù)生成關(guān)聯(lián)芯片選擇的驅(qū)動初始化相關(guān)代碼,其主要內(nèi)容可以分為三大部分,具體內(nèi)容如下:
    ①頭文件包含代碼。TLC文件中由條件判斷語句判斷文件包含命令,再由TLC中文件內(nèi)插入代碼語句實(shí)現(xiàn)頭文件包含代碼。
    ②配置文件與API開關(guān)代碼。TLC中首先判斷芯片選擇內(nèi)容,再由配置文件生成語句實(shí)現(xiàn)對應(yīng)的配置文件生成,最后在生成的配置文件中添加對應(yīng)選擇芯片的驅(qū)動API開關(guān)代碼內(nèi)容。
    ③用戶自定義函數(shù)與驅(qū)動初始化函數(shù)代碼。用戶自定義函數(shù)包含驅(qū)動初始化函數(shù)、實(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的設(shè)計(jì)
    按照API模塊代碼生成模板功能,驅(qū)動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),在配置文件中對全局變量進(jìn)行定義聲明。
3.2 實(shí)現(xiàn)
    每個(gè)驅(qū)動模塊代碼生成模板實(shí)現(xiàn)方法都一致。下面以ADC為例分析驅(qū)動配置模塊TLC和驅(qū)動API模塊TLC介紹代碼生成模板的具體實(shí)現(xiàn)。
    (1)ADC驅(qū)動配置模塊TLC的實(shí)現(xiàn)
    ADC驅(qū)動模塊TLC內(nèi)容分三部分,各部分通過條件選擇和配置文件實(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開關(guān)部分:在生成的配置文件中添加相關(guān)API開關(guān),實(shí)現(xiàn)代碼如下:
      %openfile buffer
      %if SFcnParamSettings.Adc_GetVersionInfo_API==
"on"
    #define ADC_GET_VERSION_INFO_API STD_ON
    &hellip;&hellip;.//各驅(qū)動API開關(guān)添加
    %closefile buffer
    ③配置文件與驅(qū)動初始化配置:在生成的配置文件中添加驅(qū)動初始化代碼,實(shí)現(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的實(shí)現(xiàn)
    驅(qū)動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ū)動代碼生成工具箱的應(yīng)用
    驅(qū)動工具箱應(yīng)用于BCM車窗控制系統(tǒng)中,實(shí)現(xiàn)車窗控制系統(tǒng)中驅(qū)動代碼的自動生成。
    車窗控制系統(tǒng)中需要驅(qū)動的有兩部分:車窗控制函數(shù)的輸入信號由ADC采樣獲?。卉嚧翱刂坪瘮?shù)輸出信號由DIO或者PORT實(shí)現(xiàn)對目標(biāo)ECU管腳的輸出,完成對車窗的驅(qū)動。
    使用Real-Time Workshop將Simulink模型轉(zhuǎn)化為代碼時(shí),編譯器通過系統(tǒng)目標(biāo)TLC并調(diào)用模塊對應(yīng)的TLC文件,最終生成滿足目標(biāo)ECU的C語言代碼。下面是RTW中驅(qū)動應(yīng)用于車窗控制模型代碼自動生成的三個(gè)步驟:
    第一步:修改Matlab中系統(tǒng)目標(biāo)TLC文件osekworks.tlc。
    第二步:配置模型參數(shù)配置對話框中的標(biāo)簽頁對其中幾個(gè)標(biāo)簽頁進(jìn)行設(shè)置。
    (1)Solver:設(shè)置Solver類型為離散(discrete)固定步長(Fixed-step);
    (2)Real-Time Workshop:在該標(biāo)簽頁中填寫系統(tǒng)目標(biāo)osekworks.tlc,調(diào)用對應(yīng)的模塊TLC文件來生成代碼。
    第三步:代碼自動生成。 點(diǎn)擊Real-Time Workshop中的GenerateCode可以直接生成代碼。
    從代碼生成報(bào)告中可看出,驅(qū)動應(yīng)用部分代碼主要體現(xiàn)在包含驅(qū)動初始化代碼的配置文件和調(diào)用驅(qū)動API函數(shù)的車窗控制算法代碼文件中。下面是兩部分的驅(qū)動應(yīng)用代碼生成的結(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ū)動應(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ū)動規(guī)范,提出了一種基于代碼生成技術(shù)的汽車電子底層驅(qū)動工具箱的設(shè)計(jì)方法。該方法能屏蔽芯片硬件特性的差異性,滿足不同硬件處理器要求。通過BCM車窗控制模型對驅(qū)動的應(yīng)用,實(shí)現(xiàn)了代碼的自動生成。快速替換控制模型中的被控對象,極大地方便了汽車電子嵌入式控制系統(tǒng)底層驅(qū)動代碼的應(yīng)用,提高了汽車電子控制系統(tǒng)的開發(fā)效率。
參考文獻(xiàn)
[1] 齊振恒,孫中杰,李濤.RTW嵌入式代碼自動生成機(jī)制與代碼結(jié)構(gòu)分析[J].計(jì)算機(jī)測量與控制,2010,18(3):639-642.
[2] 鄢化彪.構(gòu)建RTW下的嵌入式系統(tǒng)開發(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ū)動軟件開發(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)載。