<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 編寫(xiě)代碼太累?試試基于模型的設計

編寫(xiě)代碼太累?試試基于模型的設計

作者:paradoxfx 時(shí)間:2013-11-25 來(lái)源:電子產(chǎn)品世界 收藏

  前一陣參加了公司一個(gè)關(guān)于基于模型的設計的講座,先介紹了基于模型的設計model based design,然后是親自動(dòng)手體驗;感覺(jué)很有意義,特別是其中的生成,所以在此和大家分享一下。

本文引用地址:http://dyxdggzs.com/article/192595.htm

  聽(tīng)起來(lái),自動(dòng)生成代碼好像是專(zhuān)門(mén)為不想多動(dòng)手的工程師準備的工具。其實(shí),生成最早是做為基于模型的設計方法的一部分提出的。一般情況下,系統軟件的開(kāi)發(fā)分為需求定義、功能設計、代碼編寫(xiě)和測試等幾個(gè)階段,測試、找和解決往往要花費很多的精力,特別是越是隱藏的深的越難發(fā)現和解決,隱患也很大。所以每次在傳統方法下發(fā)現和解決bug造成的發(fā)布延時(shí)都會(huì )造成整個(gè)修復成本的指數級上升。而采用基于模型的設計,則可以在設計的早期通過(guò)仿真等手段保證模型的正確性,例如在仿真環(huán)境下,我們的模型能夠完全實(shí)現我們的意圖,然后生成和驗證就是水到渠成的問(wèn)題了。

  其次,基于模型的設計在復雜和非常復雜的系統中特別有意義。他們舉了幾個(gè)例子,例如在高檔的汽車(chē)上,全部代碼預估已經(jīng)達到千萬(wàn)行、甚至兩千萬(wàn)行的級別了,這么多代碼要是靠手工編寫(xiě)和測試,首先需要幾十個(gè)幾百個(gè)人的編程和測試團隊不說(shuō),光是溝通的效率就很難保證了;基于模型的設計方法則可以有效解決這個(gè)問(wèn)題。目前在汽車(chē)行業(yè),這種模式已經(jīng)成為主流的開(kāi)發(fā)方法了,在航空航天等領(lǐng)域也得到了很廣泛的應用,例如著(zhù)名的F-22戰斗機和“好奇號”火星車(chē)都使用了基于模型的設計方法。例如講座中提到,火星車(chē)的開(kāi)發(fā)中,使用了380000次仿真,這要是按照傳統的測試方法去一遍遍做,估計整個(gè)團隊都要吐血身亡了。

  此外,開(kāi)發(fā)一個(gè)復雜系統要花費大量的時(shí)間,新系統開(kāi)發(fā)時(shí)從現有系統中復用現有的代碼是省事實(shí)力的?;谀P偷脑O計方法因為使用模型參考調用的方法引用子系統,所以代碼的移植和復用非常方便。例如例如講座中提到,F35戰斗機有A、B、C三種型號,在開(kāi)發(fā)過(guò)程中,可以重復使用的系統設計模型就顯著(zhù)提高了開(kāi)發(fā)效率。

  接下來(lái)講講我所理解的基于模型設計的開(kāi)發(fā)過(guò)程:

  1. 系統需求

  不管用啥開(kāi)發(fā)方法,最終要完成的系統是一樣的,所以系統需求并沒(méi)有什么顯著(zhù)區別。只不過(guò)Simulink開(kāi)發(fā)工具可以在建模中將模型與需求文檔進(jìn)行關(guān)聯(lián),方便快速查看模型功能與需求文檔之間是否有偏差。

  2. 建模

  就是在Simulink環(huán)境中把我們需要的功能用模塊搭建起來(lái),例如控制系統、通信系統等,基于圖形化的編程還是較為直觀(guān)和容易的,并且仿真測試很快就能得到結果了。

  3. 代碼生成

  模型有了,這一步就是超級吸引人的了,直接把模型生成C代碼,多方便的功能。當然有一些規范要定義的,包括一些ISO的標準;而且如果我們使用的處理器被Simulink支持的話(huà),在生成代碼的時(shí)候還可以直接針對代碼優(yōu)化,例如我們的目標對象是TI的一個(gè)DSP,則一些數學(xué)運算在生成代碼時(shí)會(huì )直接調用BootROM里的數學(xué)庫,相比于傳統的C語(yǔ)言math.h里面的標準數學(xué)庫,運行速度要強的多;常用的DSP、ARM等基本都是支持的。

  4. 軟件在環(huán)測試

  硬件在環(huán)測試HIL大家可能都聽(tīng)說(shuō)過(guò),不過(guò)軟件在環(huán)測試SIL貌似是個(gè)比較新鮮的概念。它的含義就是把生成的c代碼調用到仿真環(huán)境中,輸入是與仿真的那步是一樣的,這樣就能比較生成的代碼和我們的模型是否有結果的差異。當然幾乎是不會(huì )出現什么狀況的。

  5. 硬件在回路測試

  這一步很多人都不陌生,就是把生成的代碼下載到實(shí)際的控制器中,觀(guān)測返回的結果是不是和我們的仿真模型是一致的。

  試驗了一下,生成代碼的效率還不錯,可讀性也很好,如果覺(jué)得編程太累了,可以嘗試一下。當然有一些功能在Simulink里面實(shí)現還是暫時(shí)有困難的,例如實(shí)時(shí)操作系統的任務(wù)調度,目前還很難實(shí)現出來(lái),所以可以把功能劃分一下,一部分控制系統、通信系統的代碼使用這種方法,其它的則還需要手工編寫(xiě),然后通過(guò)接口進(jìn)行協(xié)同工作。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>