999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MC9S08系列微控制器的C代碼生成研究

2010-08-14 08:03:06黃志輝羅峰
關(guān)鍵詞:用戶(hù)工程設(shè)計(jì)

黃志輝,羅峰

(同濟(jì)大學(xué) 汽車(chē)學(xué)院,上海201804)

黃志輝(碩士研究生),研究方向?yàn)檐?chē)輛電子技術(shù)。

引 言

自動(dòng)代碼生成技術(shù)在航空航天、汽車(chē)、工業(yè)控制及自動(dòng)化等領(lǐng)域有著廣泛的應(yīng)用。20世紀(jì)90年代,隨著計(jì)算機(jī)技術(shù)和軟件技術(shù)的發(fā)展,許多工業(yè)領(lǐng)域廣泛采用基于模型的設(shè)計(jì)方法,極大地提高了系統(tǒng)的開(kāi)發(fā)效率。基于模型的開(kāi)發(fā)方法中一項(xiàng)核心的技術(shù)就是自動(dòng)代碼生成技術(shù),在快速原型及系統(tǒng)實(shí)現(xiàn)等方面做出了巨大貢獻(xiàn)[1]。

Real-Time Workshop Embedded Coder(RTWEC)能夠?qū)imulink中圖形化設(shè)計(jì)的模塊生成用戶(hù)目標(biāo)所需的C語(yǔ)言代碼,該代碼可以應(yīng)用于許多實(shí)時(shí)或者非實(shí)時(shí)的場(chǎng)合,比如快速原型和硬件在環(huán)測(cè)試[2]。用戶(hù)可以修改生成的代碼,在獨(dú)立于Matlab之外的環(huán)境下執(zhí)行。代碼轉(zhuǎn)換是RTWEC的應(yīng)用基礎(chǔ),它能生成與ANSI/ISO標(biāo)準(zhǔn)相兼容的C語(yǔ)言代碼,這樣的代碼可運(yùn)行于目標(biāo)微控制器和實(shí)時(shí)操作系統(tǒng)(RTOS)。

本文以基于飛思卡爾公司的8位微控制器MC9S08QE128的電動(dòng)智能車(chē)轉(zhuǎn)向控制系統(tǒng)系統(tǒng)為例,闡述利用RTWEC生成高質(zhì)量、高效率的C代碼,并移植到該芯片內(nèi)的過(guò)程。由于 RTWEC對(duì)本課題所使用的MC9S08QE128并沒(méi)有專(zhuān)門(mén)的支持,因此用戶(hù)需要自己定制所需要的模塊。

1 RTWEC代碼轉(zhuǎn)換過(guò)程

RTWEC自動(dòng)程序創(chuàng)建過(guò)程,能在不同主機(jī)環(huán)境下生成用于實(shí)時(shí)應(yīng)用的程序。程序創(chuàng)建過(guò)程使用高級(jí)語(yǔ)言編譯器中的聯(lián)編實(shí)用程序,來(lái)控制所生成源代碼的編譯和鏈接過(guò)程。如圖1所示,代碼生成的整個(gè)流程可以分為3個(gè)步驟[3]。

圖1 RTWEC代碼生成流程

①通過(guò)RTWEC將建立起來(lái)的模型文件model.mdl文件編譯成一個(gè)中間描述文件,即model.rtw。它包括模塊參數(shù)、信號(hào)寬度、采樣時(shí)間以及各模塊的執(zhí)行次序。該文件可以被用戶(hù)修改,用來(lái)傳遞重要的參數(shù)信息。

②讀取中間描述文件mode1.rtw,然后進(jìn)行編譯和執(zhí)行目標(biāo)文件中的命令,包括系統(tǒng)目標(biāo)文件和每一個(gè)模塊目標(biāo)文件。在這一階段中,目標(biāo)語(yǔ)言編譯器TLC將中間描述文件model.rtw和相關(guān)的模塊、S函數(shù)等轉(zhuǎn)換為目標(biāo)源代碼。

③RTWEC根據(jù)系統(tǒng)模板聯(lián)編文件生成自定義聯(lián)編文件model.mk,然后調(diào)用make實(shí)用程序,它根據(jù)生成的聯(lián)編文件model.mk的規(guī)則,把生成的源代碼編譯、鏈接,從而生成可執(zhí)行代碼。比較特殊的一點(diǎn)是,CodeWarrior IDE使用的是project.mcp工程文件來(lái)進(jìn)行編譯、鏈接,而不是make實(shí)用程序,因此需要另外設(shè)計(jì)接口。

2 目標(biāo)驅(qū)動(dòng)模塊設(shè)計(jì)

目標(biāo)驅(qū)動(dòng)模塊主要是用來(lái)生成微處理器所需的底層驅(qū)動(dòng)代碼,即對(duì)微處理器的寄存器進(jìn)行設(shè)置。在CodeWarrior IDE的指令集中,大量寄存器的設(shè)置因所選單片機(jī)型號(hào)各異,對(duì)不熟悉其復(fù)雜指令的設(shè)計(jì)人員來(lái)說(shuō),調(diào)試過(guò)程是很漫長(zhǎng)的。而目標(biāo)驅(qū)動(dòng)模塊如同CodeWarrior IDE的Processor Expert模塊,更為方便地提供給用戶(hù)進(jìn)行設(shè)計(jì)。如圖2所示,用戶(hù)只需要在PORT下拉列表框中選擇相應(yīng)的端口,而不需要了解繁瑣的寄存器設(shè)置。

圖2 數(shù)字I/O輸入模塊

根據(jù)上述RTWEC代碼生成的流程,可以得到目標(biāo)驅(qū)動(dòng)模塊的設(shè)計(jì)過(guò)程。目標(biāo)驅(qū)動(dòng)模塊主要是由S函數(shù)和TLC文件定制的。S函數(shù)(需要被封裝)用于定制自定義simulink模塊,該模塊可以傳遞用戶(hù)設(shè)置的參數(shù)信息,并保存在model.rtw文件中。TLC文件可以取出model.rtw文件中保存的參數(shù)信息,通過(guò)內(nèi)聯(lián)和一定的代碼生成規(guī)則,用于控制代碼生成過(guò)程與格式。

下面以數(shù)字I/O輸入模塊為例來(lái)說(shuō)明目標(biāo)驅(qū)動(dòng)模塊的設(shè)計(jì)。

(1)編寫(xiě)C MEX S函數(shù)

S函數(shù)有很多種設(shè)計(jì)方式,比如m文件和C語(yǔ)言等。其中,只有用可被編譯C語(yǔ)言文件(C MEX文件)或者S函數(shù)生成器建立起來(lái)的S函數(shù),才能夠內(nèi)聯(lián)TLC文件,從而生成所需代碼。在編寫(xiě)S函數(shù)中,最重要的是參數(shù)傳遞,即將用戶(hù)所選擇的參數(shù)傳遞到TLC文件中去。這里RTWEC提供了一個(gè)model.rtw文件,該文件可以用作S函數(shù)和TLC文件的橋梁。其實(shí)現(xiàn)方法是,通過(guò)mdlRTW函數(shù)將用戶(hù)參數(shù)傳遞到rtw中的SFcnParamSettings對(duì)象中去。代碼如下:

這樣,在 TLC文件中通過(guò)SFcnParamSettings.port_name便可以調(diào)用該參數(shù)。完成后用命令mex進(jìn)行編譯,即可生成所需的C MEX文件。

(2)封裝S函數(shù)

該步驟主要為方便用戶(hù)進(jìn)行參數(shù)設(shè)置,注意參數(shù)名與S函數(shù)對(duì)話框中的參數(shù)名要一致,而且必須是DOUBLE類(lèi)型的。封裝好的模塊便可以放到自定義的Simulink模型庫(kù)中去。

(3)編寫(xiě)TLC文件

這一文件的編寫(xiě)非常重要,它直接決定了生成代碼的形式,即代碼內(nèi)容和它安放在生成的C語(yǔ)言文件中的位置。其參數(shù)的獲得正是通過(guò)rtw中的SfcnParamSettings對(duì)象所得到的。注意,TLC文件名與S函數(shù)一致才能夠被內(nèi)聯(lián)。下列TLC語(yǔ)句段顯示了如何根據(jù)用戶(hù)的選擇將寄存器的設(shè)置嵌入到生成的代碼中去:

3 CodeWarrior IDE接口設(shè)計(jì)

為了在RTWEC生成代碼的同時(shí)建立起CodeWarrior IDE的工程文件,并自動(dòng)對(duì)其進(jìn)行操作。RTWEC提供了兩種截然不同的方法[4]。

(1)XML工程導(dǎo)入

CodeWarrior IDE的大多數(shù)版本都支持可擴(kuò)展標(biāo)記語(yǔ)言(XML)形式的工程導(dǎo)入或者導(dǎo)出。通過(guò)修改TLC文件,RTWEC可自動(dòng)生成XML文件,作為CodeWarrior IDE的工程導(dǎo)入。但該方法有個(gè)缺陷,每當(dāng)用戶(hù)在CodeWarrior IDE中修改工程時(shí),必須重新修改TLC文件,給使用帶來(lái)了很大不便。其設(shè)計(jì)過(guò)程如圖3所示。

圖3 以XML工程導(dǎo)入為接口

(2)COM組件控制工程建立

在CodeWarrior IDE有許多的接口函數(shù),而這些函數(shù)是可以通過(guò)用戶(hù)建立COM組件來(lái)進(jìn)行調(diào)用的。COM組件技術(shù)可以自動(dòng)執(zhí)行一些重復(fù)性的任務(wù),從而進(jìn)行外部操作。比如通過(guò)命令 actxserver('CodeWarrior.CodeWarriorApp')來(lái)打開(kāi)CodeWarrior IDE,從而對(duì)其進(jìn)行控制。

本文嘗試了一種手工建立工程的方法,即在CodeWarrior IDE中建立工程,修改源文件 main.c,然后將生成的代碼文件和函數(shù)分別添加到工程和main.c中去,從而形成一種文件路徑的映射關(guān)系。這樣,每次在RTWEC中生成代碼后,直接用CodeWarrior IDE編譯即可。該方法使用簡(jiǎn)單,但缺點(diǎn)是自動(dòng)化程度差,用戶(hù)需要自行建立mcp工程,添加和修改文件。

4 智能車(chē)隨動(dòng)算法的C代碼生成與測(cè)試

下面以一個(gè)實(shí)例來(lái)說(shuō)明RTWEC代碼的生成及其測(cè)試。本文所設(shè)計(jì)的系統(tǒng)將前瞻傳感器安裝在智能車(chē)的伺服電機(jī)(隨動(dòng)舵機(jī))上,前置并懸伸出車(chē)體前端,將前瞻距離延長(zhǎng)到前排傳感器所能達(dá)到的最大距離。然后,控制隨動(dòng)舵機(jī)使其跟蹤黑線,并始終將黑線置于隨動(dòng)光電組的中間位置。在控制算法中通過(guò)隨動(dòng)比調(diào)節(jié)轉(zhuǎn)向舵機(jī)的轉(zhuǎn)角,使其配合隨動(dòng)舵機(jī)進(jìn)行轉(zhuǎn)向,如此便能達(dá)到智能車(chē)系統(tǒng)的超前調(diào)節(jié)和路徑優(yōu)化等目的[5]。

圖4為利用Matlab/StateFlow搭建起來(lái)的控制器模型。該模型比較復(fù)雜,手寫(xiě)C代碼易出錯(cuò),調(diào)試周期長(zhǎng);而使用RTWEC自動(dòng)代碼生成技術(shù),調(diào)試過(guò)程中很容易檢查出邏輯沖突、數(shù)據(jù)溢出等錯(cuò)誤,大大縮短了開(kāi)發(fā)周期。

圖4 隨動(dòng)控制算法的有限狀態(tài)機(jī)模型

在生成的代碼中,最重要的是初始化函數(shù)model_initialize()和運(yùn)行主函數(shù)model_step()。設(shè)計(jì)人員只要將這兩個(gè)函數(shù)包含在主函數(shù)里,就可以運(yùn)行了。

為了測(cè)試RTWEC生成代碼的正確性和運(yùn)行效率,將同樣的控制算法的生成代碼和手寫(xiě)C代碼放在VC++中運(yùn)行。運(yùn)行前將一傳感器返回值設(shè)為1,設(shè)置不同的運(yùn)行時(shí)間(運(yùn)行次數(shù)),比較計(jì)算結(jié)果和 CPU消耗周期(cpucounter)。其中計(jì)算結(jié)果和隨動(dòng)轉(zhuǎn)角(angle)成正比,CPU消耗周期用庫(kù)函數(shù)QueryPerformanceCounter()計(jì)算得到。

圖5是手寫(xiě)代碼與生成代碼消耗CPU周期對(duì)比,圖6為手寫(xiě)代碼與生成代碼計(jì)算結(jié)果對(duì)比。可見(jiàn)兩者極為接近,自動(dòng)生成的代碼運(yùn)行正確,且效率沒(méi)有明顯降低。

圖5 手寫(xiě)代碼與生成代碼消耗CPU周期對(duì)比

圖6 手寫(xiě)代碼與生成代碼計(jì)算結(jié)果對(duì)比

5 結(jié) 論

生成代碼在CodeWarrior編譯后效率會(huì)降低,但隨著程序長(zhǎng)度的增加,代碼運(yùn)行的主要執(zhí)行時(shí)間將更多地消耗在邏輯判斷上,RTWEC生成代碼的執(zhí)行速度會(huì)相對(duì)得到提高。編程人員除了要提高代碼的執(zhí)行效率之外,還需要考慮設(shè)計(jì)的快速性、調(diào)試的方便性,以及可讀性等多方面因素。

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

[2]戴海峰,魏學(xué)哲,孫澤昌.V-模式及其在現(xiàn)代汽車(chē)電子系統(tǒng)開(kāi)發(fā)中的應(yīng)用[J].機(jī)電一體化,2006(6).

[3]任傳俊,蔣志文.Real-Time Workshop實(shí)時(shí)仿真研究與應(yīng)用[J].計(jì)算機(jī)仿真,2007(8).

[4]Mathworks,Inc.Matlab R2008b Help Document,2008.

[5]卓晴,黃開(kāi)勝,邵貝貝.學(xué)做智能車(chē)[M].北京:北京航空航天大學(xué)出版社,2007.

猜你喜歡
用戶(hù)工程設(shè)計(jì)
瞞天過(guò)海——仿生設(shè)計(jì)萌到家
設(shè)計(jì)秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計(jì)叫而專(zhuān)
Coco薇(2017年5期)2017-06-05 08:53:16
關(guān)注用戶(hù)
子午工程
太空探索(2016年6期)2016-07-10 12:09:06
關(guān)注用戶(hù)
關(guān)注用戶(hù)
工程
如何獲取一億海外用戶(hù)
工程
主站蜘蛛池模板: 亚洲无码高清一区| 国模粉嫩小泬视频在线观看| 精品乱码久久久久久久| 国产成人精品男人的天堂下载 | 欧美在线免费| 国产精品va免费视频| 中日韩一区二区三区中文免费视频| 少妇人妻无码首页| 亚洲精品午夜天堂网页| 亚洲男人天堂网址| 中文字幕欧美日韩| 伊人国产无码高清视频| 最新国产网站| 在线国产91| 免费高清自慰一区二区三区| 美女黄网十八禁免费看| 91麻豆久久久| 天堂在线www网亚洲| 久久伊人色| 女人18毛片水真多国产| 亚洲欧洲一区二区三区| 国产日本视频91| 最新国产精品第1页| 在线观看视频99| 国产一级毛片在线| 亚洲第一香蕉视频| 999精品在线视频| 热久久国产| 狠狠亚洲婷婷综合色香| 国产精品播放| 欧美精品成人一区二区视频一| 国产精品13页| 国产不卡一级毛片视频| 乱人伦视频中文字幕在线| 日韩精品欧美国产在线| 欧美午夜在线视频| 人妻精品久久久无码区色视| 久久久久久国产精品mv| 久操线在视频在线观看| 无码专区国产精品一区| 国产小视频在线高清播放 | 人妻无码中文字幕第一区| 成人a免费α片在线视频网站| 先锋资源久久| 日本精品影院| 中文字幕免费播放| av一区二区三区在线观看| 国产在线欧美| 97视频免费在线观看| 国产免费黄| 免费欧美一级| 欧美精品亚洲二区| 2021最新国产精品网站| 国产伦片中文免费观看| 欧美国产日韩在线观看| 色综合中文| 国产成人成人一区二区| 99精品国产高清一区二区| 国产精品自在在线午夜| 国产精彩视频在线观看| 无码区日韩专区免费系列| 无码视频国产精品一区二区| 在线欧美日韩国产| 伊人天堂网| 99精品视频九九精品| 无码有码中文字幕| 国产亚洲精品资源在线26u| 色噜噜在线观看| 亚洲视频免费播放| 波多野结衣视频一区二区| 国产精品久久久免费视频| 欧美日韩精品一区二区在线线| 日韩毛片在线播放| 国产小视频a在线观看| 漂亮人妻被中出中文字幕久久| 在线无码av一区二区三区| 免费99精品国产自在现线| 欧美啪啪网| 一级爱做片免费观看久久| 中文一级毛片| 亚洲AV无码久久精品色欲| 成人免费午夜视频|