• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      利用MATLAB/RTW的嵌入式代碼自動生成與整合

      2018-04-13 10:03:27張承瑞
      關(guān)鍵詞:代碼生成代碼組件

      陳 攀,張承瑞,羅 映

      1(山東大學(xué) 機(jī)械工程國家級實(shí)驗教學(xué)示范中心,濟(jì)南 250061) 2(山東建筑大學(xué) 機(jī)電工程學(xué)院,濟(jì)南 250101) E-mail:sduchenpan@163.com

      1 引 言

      隨著軟件工具的發(fā)展,自動代碼生成技術(shù)在工業(yè)控制[1]、汽車電子[2]、航天和導(dǎo)彈制導(dǎo)[3]等領(lǐng)域得到廣泛的應(yīng)用.自動代碼生成相比于手工編程,能夠減少偶然的bug,減少重復(fù)勞動的時間,提高嵌入式系統(tǒng)的可靠性[4].在MATLAB/Simulink下,8051、飛思卡爾DSP563XX、英飛凌C166和ARM系列等芯片都有對應(yīng)的toolbox支持,在創(chuàng)建MATLAB/Simulink模型后,通過RTW工具,可直接生成控制代碼.而外圍器件選型或布置等設(shè)計變化可能導(dǎo)致用戶不能直接通過工具生成代碼.為了滿足不同項目的嵌入式控制器的設(shè)計需求,需要根據(jù)MATLAB/Simulink和RTW的工作原理,結(jié)合實(shí)際需求設(shè)計代碼生成工具,進(jìn)而使代碼的生成符合預(yù)期,同時提高代碼質(zhì)量.本文從RTW的工作原理出發(fā),以飛思卡爾S12X系列單片機(jī)為例,利用COM技術(shù)連接MATLAB/Simulink與CodeWarrior IDE,整合驅(qū)動層與應(yīng)用層,最后實(shí)現(xiàn)自動代碼生成,并且代碼無需手動修改,能夠直接下載到目標(biāo)板上.

      2 MATLAB/RTW與代碼生成

      RTW(Real-Time Workshop)是基于Simulink的代碼自動生成環(huán)境.Simulink軟件生成一個包含框圖執(zhí)行語義的高級表示文件——model.rtw文件.model.rtw文件是一個ASCII格式數(shù)據(jù)庫,其中的內(nèi)容描述了Simulink模型中的各個塊的包括屬性名稱和屬性值等.目標(biāo)語言編譯器(TLC)讀取model.rtw文件并將其轉(zhuǎn)換為內(nèi)部表示,并根據(jù)其他模塊TLC文件等修改最初的model.rtw文件.在RTW下能直接從Simulink的模型中產(chǎn)生優(yōu)化的、可移植的和個性的代碼,并根據(jù)目標(biāo)配置自動生成多種環(huán)境下的程序[5].RTW環(huán)境下的代碼生成過程有如下四個部分:

      1)RTW讀取模型文件model.mdl,生成模型的描述文件model.rtw,該文件以ASCII碼存儲;

      2)TLC讀取model.rtw,并根據(jù)的系統(tǒng)TLC與模塊TLC文件,生成指定目標(biāo)的代碼,如ANSI C/C++代碼;

      3) RTW代碼生成器根據(jù)給定的模型,將makefile模板生成具體的makefile文件(model.mk),該文件可修改用于生成可執(zhí)行文件的C/C++編譯器及編譯選項;

      4)連接model.mk與運(yùn)行時的接口支持文件,將代碼編譯成可執(zhí)行的文件[6].

      圖1 RTW工作過程Fig.1 RTW working process

      3 COM與ActiveX簡介

      MATLAB通過ActiveX自動化管理其他ActiveX組件或者被其他ActiveX組件所控制.ActiveX是Microsoft公司推出的基于組件對象模型(Component Object Model,COM)的一種技術(shù),他使各種軟件組件可以在網(wǎng)絡(luò)環(huán)境中相互作用,而不管這種組件是使用什么語言編寫的.當(dāng)MATLAB受到其他ActiveX組件控制時,充當(dāng)了自動化服務(wù)器,ActiveX組件則是自動化客戶機(jī)[7].而實(shí)際上ActiveX是商標(biāo)名稱,COM才是技術(shù)名稱.

      COM是微軟公司提出的以組件為發(fā)布對象的軟件開發(fā)技術(shù).組件對象模型(COM)是Windows對象的二進(jìn)制標(biāo)準(zhǔn).為Windows提供了統(tǒng)一地、面向?qū)ο蟮?、可擴(kuò)充的通訊協(xié)議.這意味著描述一個對象的可執(zhí)行代碼(.dll或.exe文件的代碼)可以被其他對象執(zhí)行[7].得益于COM具有與語言、平臺無關(guān)的特征,MATLAB的m函數(shù)可以基于COM標(biāo)準(zhǔn)與CodeWarrior IDE通訊,然后控制程序生成的過程.

      在MATLAB下編寫m函數(shù)使用COM技術(shù),可通過MATLAB的ActiveX支持調(diào)用必要的方法來調(diào)用CodeWarrior IDE.通過COM技術(shù),可以實(shí)現(xiàn)調(diào)用CodeWarrior(例如,啟動一個新的CodeWarrior會話);打開CodeWarrior MCP項目文件;刪除舊的目標(biāo)文件;構(gòu)建項目以創(chuàng)建二進(jìn)制文件;下載并執(zhí)行目標(biāo)板上的二進(jìn)制文件.

      4 軟件架構(gòu)與實(shí)現(xiàn)

      嵌入式軟件架構(gòu)的設(shè)計,可以按如圖2分為三層:微控制器層、設(shè)備接口層、邏輯應(yīng)用層.微控制器層負(fù)責(zé)硬件的初始化和頭文件定義等內(nèi)容;設(shè)備接口層,封裝驅(qū)動接口,供邏輯應(yīng)用層調(diào)用.這兩層都在CodeWarrior IDE編寫,根據(jù)需要用C語言編寫IO驅(qū)動和通信驅(qū)動,封裝接口并測試,作為工程模板;最后的邏輯應(yīng)用層在MATLAB/Simulink下編寫.邏輯應(yīng)用層通過相關(guān)的UI模塊處理設(shè)備驅(qū)動層的接口,同時負(fù)責(zé)邏輯與應(yīng)用的搭建.

      圖2 軟件框架設(shè)計Fig.2 Design of software framework

      4.1 驅(qū)動模塊的建立

      在MATLAB/Simulink中,驅(qū)動UI模塊與設(shè)備驅(qū)動一一對應(yīng).驅(qū)動UI模塊的功能是在RTW程序創(chuàng)建過程中將驅(qū)動程序內(nèi)嵌到模型源代碼中.驅(qū)動UI驅(qū)動的建立有兩種思路:一種是用TLC語言處理寄存器配置等底層硬件驅(qū)動,后生成C代碼;另一種是通過MATLAB配置相關(guān)的參數(shù),后調(diào)用相關(guān)的驅(qū)動函數(shù),生成階段只負(fù)責(zé)整合.采用第二種思路編寫驅(qū)動,可以在IDE編寫底層驅(qū)動庫[8],便于對已有的產(chǎn)品代碼進(jìn)行重構(gòu),更能適應(yīng)新的需求[9],而TLC文件處理相關(guān)的接口即可.對于TLC語言不熟悉的硬件工程師而言,采用第二種方式能減少編寫TLC文件的工作量,提高效率.

      驅(qū)動模塊的建立需要先創(chuàng)建代表硬件的S函數(shù),通過在與S函數(shù)對應(yīng)的UI模塊上定義參數(shù),例如外設(shè)寄存器地址、采樣時間等,將這些參數(shù)傳遞到RTW文件中去.實(shí)際的驅(qū)動接口相關(guān)的函數(shù)寫在S函數(shù)同名的TLC文件中.驅(qū)動模塊的建立可以分為兩個部分,第一步,模型階段,處理模型相關(guān)的模塊noninlined C MEX S-Function,此時創(chuàng)建的S函數(shù)模塊只能用于仿真而不能用于生成代碼;第二步,RTW階段,編寫TLC文件,用來定制RTW,為系統(tǒng)模型生成實(shí)時C代碼.最后通過MEX指令生成Inlined S-function(內(nèi)聯(lián)S函數(shù)).

      對于I/O驅(qū)動模塊的設(shè)計,具體的過程包含如下四個階段:

      1.UI模塊界面設(shè)計,根據(jù)模塊參數(shù)及輸入輸出來設(shè)計模塊的配置參數(shù),對于AI模塊可以設(shè)計電壓、電阻、電流模式參數(shù),分辨率參數(shù)、通道參數(shù)等配置選項,UI界面的參數(shù)會傳遞到接下來編寫的S-Function中;

      2.編寫模塊S-Function,通過修改Simulink Library提供的S-Fuction Example中提供的合適的S-Function模板,使得在RTW的程序創(chuàng)建過程中能將自定義的模塊程序嵌入到模型源代碼中,注意,此時創(chuàng)建的S函數(shù)模塊只能用于仿真而不能用于生成代碼;

      3.編寫TLC文件,需設(shè)計模塊TLC文件用于定制模塊程序,TLC文件通過獲取模塊中的參數(shù)值來定制驅(qū)動程序并將其嵌入到自動生成的模型源代碼中,一般TLC文件負(fù)責(zé)制定的I/O宏定義、變量定義、code庫等內(nèi)容和硬件初始化等,按照本文的軟件結(jié)構(gòu),TLC文件以接口處理為主.

      4.模塊整合,調(diào)用命令mex生成內(nèi)聯(lián)S函數(shù),最后將目標(biāo)硬件驅(qū)動程序封裝成靜態(tài)庫:調(diào)用sblock函數(shù),封裝并加入Simulink庫,供系統(tǒng)邏輯應(yīng)用調(diào)用.

      4.2 系統(tǒng)設(shè)計

      系統(tǒng)設(shè)計不僅僅負(fù)責(zé)main主函數(shù)生成,還為COM技術(shù)的使用和整個自動代碼過程服務(wù).目標(biāo)系統(tǒng)通過系統(tǒng)文件(TLC)和hook文件把mdl轉(zhuǎn)換成c/h文件,而其余文件輔助這個過程.系統(tǒng)級設(shè)計包含系統(tǒng)目標(biāo)文件、hook文件和腳本文件[10],過程如圖1所示.

      1) 系統(tǒng)目標(biāo)文件用于設(shè)置代碼生成的參數(shù)及目標(biāo)硬件相關(guān)的專用數(shù)據(jù).可以設(shè)置一些最基本的內(nèi)容,配置代碼生成格式、類型、語言等內(nèi)容,一般用于對目標(biāo)系統(tǒng)的各種參數(shù)進(jìn)行默認(rèn)配置;

      2) hook 文件用于對代碼生成的各個階段對自定義操作的處理.hook文件的設(shè)計用于在代碼生成過程中hook文件的執(zhí)行分為表1六個階段,貫穿了整個RTW的程序創(chuàng)建過程.根據(jù)實(shí)際需要可設(shè)計與修改各階段的內(nèi)容.

      表1 RTW 創(chuàng)建過程
      Table 1 RTW creation process

      階段創(chuàng)建過程entry自定義目標(biāo)進(jìn)行預(yù)配置,參數(shù)配置檢驗before_tlc調(diào)用目標(biāo)語言編譯器TLC自動生成模型源代碼after_tlc自動生成創(chuàng)建目錄的信息文件,并將其放在創(chuàng)建的文件夾中before_make生成程序創(chuàng)建過程必須的庫文件after_make更新創(chuàng)建信息對象exit調(diào)用COM組件來處理代碼整合

      3)腳本文件用于創(chuàng)建訪問實(shí)例,通過COM組件在MATLAB中實(shí)現(xiàn)對編譯器的操作.首先用MATLAB注冊函數(shù)actxserver(′CodeWarrior.CodeWarriorApp′)創(chuàng)建CodeWarrior的COM對象,返回句柄,然后再通過COM接口來執(zhí)行將基于模型的.c和.h文件添加到CodeWarrior的工程中,接著進(jìn)行編譯,最后根據(jù)設(shè)置執(zhí)行程序下載等命令.

      5 驗 證

      項目開發(fā)一款飛思卡爾S12X系列MC9S12XEP100為主控芯片的控制器,具備AD采集、數(shù)字DA、電流測量、時間測量、PWM輸出、高低邊功率輸出、CAN、LIN、RS232和RS485,10種通用I/O功能.以AD采集模塊為例,說明硬件模塊在MATLAB/Simulink下程序整合的過程.對無操作系統(tǒng)的嵌入式系統(tǒng)主要有兩種實(shí)現(xiàn)方式:循環(huán)輪轉(zhuǎn)和前后臺系統(tǒng),程序是基于時間的循環(huán)輪轉(zhuǎn)系統(tǒng).AD5V代表最大量程5V.按照圖2的分層思路,AD5V在底層進(jìn)行封裝,并留出初始化接口函數(shù)和獲取電壓接口函數(shù):

      ret_t ecmad5VddiInit (uint16_t Channel,int mode);

      int32_t ecmAI5ddiGetVol(uint16_t Channel);

      以初始化為例,在TLC文件中將如圖3的AD模塊中的配置參數(shù)(Supply項為標(biāo)記不與形參對應(yīng))傳遞給接口函數(shù)

      %assign Channel=CAST("Number",SFcnParamSettings.Channel)

      %assign Mode=CAST("Number",SFcnParamSettings.Mode)

      %assign Supply=CAST("Number",SFcnParamSettings.Supply)

      /* S-Function "INIT_ad5V" initialization Block:% */

      ecmad5VddiInit(%,%);

      圖3 AD 模塊Fig.3 AD module

      配置面板中選擇創(chuàng)建的系統(tǒng)TLC文件作為System target file,代碼生成的默認(rèn)選項與系統(tǒng)TLC設(shè)置對應(yīng).通過系統(tǒng)TLC設(shè)置,可提供代碼生成后編譯、下載或無操作的選項.

      圖4 MATLAB/Simulink測試模型Fig.4 Test model in MATLAB/Simulink

      搭建如圖5所示MATLAB/Simulink測試模型,通過PIT定時模塊設(shè)置定時任務(wù)[11],I/O模塊采集信號并進(jìn)行邏輯運(yùn)算并輸出.硬件驅(qū)動模塊在底層IDE工具中完成,在MATLAB/Simulink模型初始化時,獲取工程模板文件路徑;系統(tǒng)編寫通過修改對應(yīng)部分的系統(tǒng)TLC文件和M文件完成,利用COM技術(shù),實(shí)現(xiàn)對CodeWarrior的生成控制.

      圖5 自動代碼生成的工程文件Fig.5 Project of automatic code generation

      運(yùn)行“build model”,新生成的工程會新增如圖5“Sources”文件夾下的多個文件,其中s12x100_main,程序的main文件;model.h/c包含模型數(shù)據(jù)模型算法邏輯,是程序入口與核心,其他文件與宏定義結(jié)構(gòu)體等有關(guān).“model”代表模型的實(shí)際命名,工程目錄中為“Interrrupt_led”.另外,若需要進(jìn)一步優(yōu)化代碼,提高模塊重用性,提升代碼簡潔性等,需要在配置參數(shù)界面內(nèi)設(shè)置.

      6 結(jié) 論

      MATLAB作為現(xiàn)在重要的工具軟件,深入探究其RTW工作的原理,結(jié)合COM技術(shù),成功實(shí)現(xiàn)代碼的生成代碼與底層的整合.合適的軟件結(jié)構(gòu)設(shè)計,合理的工作分工,能夠提升開發(fā)的效率,并減少了TLC代碼的工作量,更加符合一般硬件工程師開發(fā)習(xí)慣.對于自動代碼生成的研究,對于快速原型開發(fā)和V流程設(shè)計有較好的借鑒意義.

      [1] Guo Xiao-qiang,Zhao Gang,Huang Kun.Auto-generation of TI C2000 DSP code on MATLAB/simulink bench[J].Science Technology & Engineering,2011,11(13):2941-2944.

      [2] Hong Xiao-jun,Zhu Lei.Vehicle controller rapid prototype based on the automatic code generation technology on MATLAB/RTWEC [J].Mecha Tronics,2014,20(8):47-52.

      [3] Yang Xiang,An Jin-wen,Cui Wen-ge.The research on application of embedded auto code generation[J].Journal of Projectiles Rockets Missiles & Guidance,2008,28(3):250-253.

      [4] Guo Wen-sheng,Wang Yong,Yang Xia,et al.Codecomb:automated test case generation and defect detecting for embedded software based on symbolic execution[J].Journal of Chinese Computer Systems,2017,38(6):1250-1255.

      [5] Yang Di.The environment and application of system real time simulation and development[M].Beijing:Tsinghua University Press,2002:32-37.

      [6] Liu Jie,Weng Gong-yu,Zhou Yu-bo.The design of the model-MCU[M].Beijing:Beihang University Press Based on,2011:152-218.

      [7] Zhang De-feng.MATLAB and external programming interface programming [M].Beijing:Machinery Industry Press,2009:192-209.

      [8] Ren Jia-li,Cao Hai-yan.Research of code auto-generation and integration for the embedded software[J].Journal of Taiyuan University of Technology,2013,44(4):518-521.

      [9] Zhang Wei,Wu Yi-jian,Shen Li-wei,et al.Software product line evolution driven by source code changes[J].Journal of Chinese Computer Systems,2017,38(5):919-924.

      [10] Feng Hui-zong,Zhu Peng,Jiang Jian-chun,et al.Research on driver code quick generation technology based on real-time workshop[J].Computer Application and Software,2016,33(3):226-228.

      [11] Gong Wei-wei,Wang Rui,Li Xiao-juan.Modeling and validation of cognitive robot control behavior using uppaal [J].Journal of Chinese Computer Systems,2016,37(6):1279-1283.

      附中文參考文獻(xiàn):

      [1] 郭小強(qiáng),趙 剛,黃 昆.基于MATLAB/Simulink平臺下TI C2000 DSP代碼的自動生成[J].科學(xué)技術(shù)與工程,2011,11(13):2941-2944.

      [2] 洪曉君,朱 磊.基于MATLAB/RTWEC自動代碼生成技術(shù)整車控制器快速原型開發(fā)[J].機(jī)電一體化,2014,20(8):47-52.

      [3] 楊向忠,安錦文,崔文革.嵌入式自動代碼生成技術(shù)應(yīng)用研究[J].彈箭與制導(dǎo)學(xué)報,2008,28(3):250-253.

      [4] 郭文生,汪 勇,楊 霞,等.Codecomb:基于符號執(zhí)行的嵌入式軟件測試案例自動生成與缺陷檢測[J].小型微型計算機(jī)系統(tǒng),2017,38(6):1250-1255.

      [5] 楊 滌.系統(tǒng)實(shí)時仿真開發(fā)環(huán)境與應(yīng)用[M].北京:清華大學(xué)出版社,2002:32-37.

      [6] 劉 杰,翁公羽,周宇博.基于模型的設(shè)計—MCU篇[M].北京:北京航空航天大學(xué)出版社,2011:152-218.

      [7] 張德豐.MATLAB與外部程序接口編程[M].北京:機(jī)械工業(yè)出版社,2009:192-209.

      [8] 任佳麗,曹海燕.嵌入式軟件自動代碼生成和代碼整合方法研究[J].太原理工大學(xué)學(xué)報,2013,44(4):518-521.

      [9] 張 薇,吳毅堅,沈立煒,等.代碼變更驅(qū)動的軟件產(chǎn)品線演化方法[J].小型微型計算機(jī)系統(tǒng),2017,38(5):919-924.

      [10] 馮輝宗,朱 澎,蔣建春,等.基于RTW的驅(qū)動代碼快速生成技術(shù)研究[J].計算機(jī)應(yīng)用與軟件,2016,33(3):226-228.

      [11] 鞏衛(wèi)衛(wèi),王 瑞,李曉娟.基于UPPAAL的認(rèn)知機(jī)器人控制行為建模與驗證[J].小型微型計算機(jī)系統(tǒng),2016,37(6):1279-1283.

      猜你喜歡
      代碼生成代碼組件
      無人機(jī)智能巡檢在光伏電站組件診斷中的應(yīng)用
      能源工程(2022年2期)2022-05-23 13:51:50
      新型碎邊剪刀盤組件
      Lustre語言可信代碼生成器研究進(jìn)展
      U盾外殼組件注塑模具設(shè)計
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
      電子世界(2016年15期)2016-08-29 02:14:28
      基于XML的代碼自動生成工具
      電子科技(2015年2期)2015-12-20 01:09:20
      繁峙县| 施秉县| 临沧市| 沙坪坝区| 铁岭市| 重庆市| 临武县| 安国市| 云梦县| 临夏县| 当阳市| 甘泉县| 五大连池市| 连州市| 天峻县| 凤城市| 灵宝市| 景洪市| 财经| 常熟市| 崇仁县| 郁南县| 涡阳县| 衡阳县| 安化县| 博湖县| 唐海县| 娄烦县| 嘉善县| 梅河口市| 大庆市| 涡阳县| 翁源县| 资溪县| 鸡西市| 海兴县| 高陵县| 通许县| 天镇县| 延长县| 毕节市|