




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、從Matlab Simulink生成易讀可重用代碼by: 吳少風MATLAB提供從MATLAB代碼或simulink模型生成C/C+代碼的功能。從MATLAB 2011b版開始,MATLAB將代碼生成Coder作為單獨模塊發(fā)布。MATLAB每年更新兩次,經(jīng)過不斷完善,新版本的Coder功能更強大。用MATLAB生成C/C+代碼具有MATLAB Coder、Simulink Coder、Embedded Coder三個功能模塊,MATLAB Coder從MATLAB 代碼生成代碼,Simulink Coder從Simulink模型生成代碼,Embedded Coder結(jié)合MATLAB Coder
2、和Simulink Coder,生成嵌入式代碼。利用代碼生成功能,可以快速從模型生成可靠的代碼,應用越來越廣泛。要生成易于閱讀、重用性好的代碼,必須進行詳細設(shè)置。文中內(nèi)容以易讀、可重用為目標,建立嵌入式代碼生成的演示模型,了解Simulink代碼生成相關(guān)工具,介紹詳細設(shè)置步驟,最終生成容易閱讀、可重用代碼,供單處理器單任務實時嵌入式系統(tǒng)應用。文中的方法為嚴格控制生成代碼的個人總結(jié)。以文檔呈現(xiàn),方便自己今后查看,也希望能為其他人提供一些方便。1. 簡單示例本部分搭建一個簡單的PI控制器模型,示范模型建立、設(shè)置、生成代碼的詳細步驟。1) 新建嵌入式代碼生成模型,MATLAB->simulin
3、k,New / Embedded Coder / Code Generation System。不選擇一般simulink模板,可減少模型配置參數(shù)的設(shè)置。2) 搭建如Error! Reference source not found.所示簡易模型,保存文檔,設(shè)置文件名。圖 1. 一個簡單示例模型3) 點擊工具欄圖標 ,設(shè)置模型配置參數(shù),應用并保存。對嵌入式應用,固定步長,離散,可調(diào)參數(shù),ERT目標,C語言,設(shè)置基本固定,未設(shè)置的地方保持默認。è solver options: type - Fixed step. solver - Discrete. è optimizat
4、ion->signals and parameters: l Default parameter behavior - tunable. l Pass reusable subsystem outputs as -輸出較多選用structure reference.è hardware implementation: 按實際設(shè)hardware board, device, device details.è code generation: l System target file - ert.tlc, Language - C, generate code only.
5、 code generation objectives.Ø comments: include comments, 默認全選,可按需要選擇。Ø symbols: 命名規(guī)則設(shè)置,按各自代碼規(guī)范設(shè)置。Ø interface: 設(shè)置整個模型生成代碼的接口。² code interface package,可選擇可重用,Pass root level I/O as,模型輸入輸出參數(shù)一般較多,一般選擇結(jié)構(gòu)體,structure reference,模型數(shù)據(jù)、輸入、輸出通過各自獨立結(jié)構(gòu)體傳入?yún)?shù);part of model data structure,一個結(jié)構(gòu)體傳
6、入?yún)?shù)。也可選擇不可重用。² configure model functions,點擊進入,設(shè)置模型具體的C原型。get default configuration,可修改模型默認initialize/step函數(shù)名,及參數(shù),各輸入輸出單獨作為函數(shù)參數(shù),這與結(jié)構(gòu)體傳參是矛盾的,不能同時設(shè)置。Ø code style: 設(shè)置代碼風格。² Parentheses括號, - Nominal(readability),按可讀性優(yōu)化。² Casting mode 強制轉(zhuǎn)換方式,Nominal. ² Code indentation 代碼縮進, size
7、- 4.Ø Code placement: 代碼放置,可設(shè)置變量定義或聲明在單獨文件還是和源代碼放一起,頭文件包含是< head.h >還是" head.h "。Ø Data type replacement: 數(shù)據(jù)類型替換。4) 設(shè)置模型中每一個基本模塊的屬性。包括名稱、值、數(shù)據(jù)類型、采樣時間等。子模塊或者引用模型等這類自定義模塊,除了內(nèi)部基本模塊的屬性外,還要設(shè)置各自的模塊屬性。模塊中參數(shù)等值,必須按照設(shè)計配置;如果想使用可調(diào)參數(shù),則將參數(shù)設(shè)置為變量,再設(shè)置變量值。生成代碼模型中的模塊名設(shè)置,最好遵循目標語言的命名規(guī)則,因為生成代碼中的一
8、些名稱可以從模塊名繼承。嵌入式應用大多無浮點單元,定點數(shù)據(jù)的設(shè)置在模塊屬性的代碼生成欄。將圖 1中各模塊可按如下方式設(shè)置:l inport,點擊模塊下方名稱,設(shè)置模塊名,將其設(shè)置為In;雙擊模塊進入模塊屬性設(shè)置,main欄設(shè)置編號,編號會體現(xiàn)在子系統(tǒng)或引用模型上;signal attributes設(shè)置數(shù)據(jù)類型為定點數(shù),16b字長10b小數(shù)部分fixdt(1,16,10)。其它模塊設(shè)置方法類似。l view->model data,彈出model data窗口。simulink提供的model data窗口,用于顯示當前層級下的所有輸入輸出、信號、狀態(tài)、參數(shù),并將對應屬性羅列成表格,而且表
9、格可編輯部分屬性。l Kp增益模塊,雙擊模塊,輸出數(shù)據(jù)類型設(shè)置為同輸入,參數(shù)數(shù)據(jù)類型設(shè)置為從Gain繼承,Gain設(shè)置為Kp。l 在model data窗口,參數(shù)欄,Kp模塊,值變?yōu)镵p,其后出現(xiàn)create.鏈接字樣。點擊彈出create new data窗口,值選擇Simulink.Parameter,位置選擇Base Workspace,創(chuàng)建,彈出Simulink.Parameter: Kp屬性窗口,設(shè)置值為10,數(shù)據(jù)類型為定點數(shù)fixdt(1,16,10),存儲類型選擇ExportedGlobal,確定。l Ki增益模塊,使用設(shè)置Kp的方法將simulink參數(shù)屬性值設(shè)為1。l Fil
10、e->Model properties,彈出模型屬性窗口,選擇數(shù)據(jù)欄,將數(shù)據(jù)定義到數(shù)據(jù)字典,選擇或新建一個數(shù)據(jù)字典文件,應用。建立在基本工作區(qū)的數(shù)據(jù)遷移到數(shù)據(jù)字典保存。后面該模型新建參數(shù)等數(shù)據(jù),基本工作區(qū)的位置將被數(shù)據(jù)字典代替。保存在基本工作區(qū)的數(shù)據(jù),關(guān)閉MATLAB不會自動保存,因此一些模型也采用腳本配置。位置也可選擇模型工作區(qū),但保存到模型工作區(qū)的參數(shù),有效的存儲類型會受到限制。l unit delay單位延時,初始條件設(shè)為0,狀態(tài)名稱按實際意義設(shè)置。l Outport,數(shù)據(jù)類型可選自動。信號名稱,可到model data窗口統(tǒng)一設(shè)置,該窗口中選中信號,模型區(qū)會用顏色標記對應標記。沒
11、有設(shè)置名稱的信號,按照內(nèi)部規(guī)則生成代碼。模型相關(guān)設(shè)置,simulink還提供model explorer圖形界面統(tǒng)一管理。點擊圖標可打開。5) 設(shè)置完成后,啟用Advisor檢查模型設(shè)置。選擇檢查項目,運行檢查,修改不符合的項目。analysis -> model advisor,針對模型,可選項目包括MISRA、ISO26262等。選中by task,右側(cè)點擊run selected checks。analysis -> data type design -> fixed point tool,進入設(shè)置后,左側(cè)選擇項目,右側(cè)運行檢查。code -> C/C+ code
12、 -> code generation advisor,針對生成代碼,可選項目有空間效率、執(zhí)行效率、可追蹤性、安全預警、MISRA C: 2012 guidelines等。檢查項目可能會彈出一些警告,是之前手動設(shè)置的,這時選擇忽略。比如內(nèi)聯(lián)參數(shù)有效率,但想要用可調(diào)參數(shù),就只能忽略檢查時的警告。6) 點擊圖標,編譯模型生成代碼。完成后可查看報告。算法代碼如下:數(shù)據(jù)定義如下:2. Simulink生成代碼相關(guān)工具在“1簡單示例”一節(jié),介紹了代碼生成的詳細過程。其中一些常用的工具及菜單,現(xiàn)羅列于表 1中。表 1. 常用工具及菜單圖標名稱最方便的位置功能Library Browser工具欄圖標基
13、本模塊庫,搭建模型的基本元素所在庫。Model Configuration Parameters工具欄圖標模型配置參數(shù),模型仿真、生成代碼所依賴的全局規(guī)則。Mode Data菜單View- -Mode Data列表顯示當前層級模型的信號、參數(shù)、狀態(tài)等,可以在此處集中編輯。Model Explorer工具欄圖標樹狀結(jié)構(gòu)的模型管理器,包括數(shù)據(jù)、配置、子模塊等。從樹狀結(jié)構(gòu)可以看出,每一個模型都單獨包含數(shù)據(jù)數(shù)據(jù)、配置等元素。Model Advisor工具欄圖標根據(jù)選定項,針對模型設(shè)計,進行檢查,提供建議。用戶根據(jù)建議修改自己的模型。Code Generation AdvisorModel Adviso
14、r-圖標下拉根據(jù)選定項,針對代碼生成設(shè)置,進行檢查,提供建議。用戶根據(jù)建議修改自己的模型。Fixed-Point Tool菜單Analysis - - data Type Design - Fixed-Point Tool針對定點數(shù)設(shè)計,進行檢驗,提供建議。用戶可以根據(jù)建議修改自己的模型。Build Model工具欄圖標根據(jù)配置,編譯模型生成代碼。圖標下拉欄還有:編譯備選子系統(tǒng),嵌入式代碼快速向?qū)???焖傧驅(qū)О床襟E生成新配置,并依次生成代碼。Run工具欄圖標模型仿真運行。一般首先會用仿真驗證模型。3. Coder保留的默認名稱在“1簡單示例”一節(jié),生成的代碼中出現(xiàn)了一些固定的名稱,這些是代碼生成
15、器保留的默認名稱,用戶不能改變。為方便理解生成的代碼,將這些默認名稱及含義列于表 1中。表 2. 生成代碼中的默認名稱默認名稱含義默認名稱含義U整個模型的輸入模塊local局部變量加的前綴Y整個模型的輸出模塊rt全局變量的前綴,可設(shè)置B模塊輸出信號rtb局部模塊輸出的前綴,可設(shè)置P模塊參數(shù)_T默認類型后綴,可替換DW離散模塊狀態(tài)step模型入口,可設(shè)置DefaultP默認參數(shù)initialize模型初始化,可設(shè)置Ext全局類型加的前綴4. 代碼重用該部分將搭建一個稍微復雜模型,封裝參數(shù),生成可重用代碼。1) 建立如Error! Reference source not found.模型。圖 2
16、. PID模型2) 選中上面模型,右鍵,create subsystem from selection進入子系統(tǒng),按上面介紹的方法編輯各基本模塊。為信號和狀態(tài)起名,設(shè)置輸入數(shù)據(jù)類型,輸出數(shù)據(jù)類型和輸入保持一致。參數(shù)設(shè)置為結(jié)構(gòu)體,比如KpGain的值設(shè)置為pid.Kp,數(shù)據(jù)類型繼承。3) 返回模型上一級,修改子系統(tǒng)名稱為Dpid,選中子系統(tǒng)右鍵 -> mask -> edit mask,在parameter選項卡,編輯參數(shù),將名稱設(shè)為pid。4) 右鍵->subsystem parameters,勾選treat as atomic unit,function packing設(shè)為
17、reusable,函數(shù)名設(shè)為UnSatIntPid。5) 打開model explorer,在數(shù)據(jù)字典中添加simulink bus類,選中該類,右下角launch bus editor進入編輯,設(shè)置類名稱為PidParaStrc,將參數(shù)按名稱依次添加到類,并設(shè)置基本數(shù)據(jù)類型。6) 在數(shù)據(jù)字典中添加simulink parameter對象,將對象數(shù)據(jù)名稱設(shè)為DpidPar,類型設(shè)為PidParaStrc,值設(shè)為struct,存儲類型設(shè)為ExportedGlobal。在DpidPar值屬性列,編輯與PidParaStrc類成員對應的參數(shù)名稱,并賦值。將simulink參數(shù)DpidPar復制一份,
18、編輯其參數(shù)值。7) 將子系統(tǒng)Dpid復制一份,名稱改為Qpid,設(shè)置mask參數(shù)為QpidPar,連上輸入輸出,最終模型如圖所示。圖 3. 代碼重用演示模型8) 設(shè)置好模型配置參數(shù),編譯生成代碼,查看生成的報告。整個模型的代碼如下,調(diào)用兩次UnSatIntPid函數(shù),分別傳入不同的參數(shù)。生成可重用的算法如下所示,函數(shù)名為設(shè)置的UnSatIntPid,函數(shù)參數(shù)有四個,依次是給定,反饋,子系統(tǒng)狀態(tài),PidParaStrc參數(shù)。5. 數(shù)據(jù)重用嵌入式應用多用查表的方式實現(xiàn)較復雜的數(shù)學函數(shù),比如三角函數(shù)。而且為了保證精度,表格的數(shù)據(jù)一般較多。通常,如正弦函數(shù),會充分利用周期性對稱性,查找(0, pi/2)的sin表格。本部分將演示,將(0, pi/2)的sin表格定義為全局const變量,單獨放在一個文件,實現(xiàn)sin/cos函數(shù)。1) 建立如圖 4模型實現(xiàn)sin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運動與健康促進工作計劃
- 管理者的影響力與說服力計劃
- 2025年雙氰胺合作協(xié)議書
- 評優(yōu)評先活動與實施方案計劃
- 包裝行業(yè)設(shè)計創(chuàng)新包裝材料計劃
- 2025年微循環(huán)測試系統(tǒng)項目建議書
- 2025年激光轉(zhuǎn)速測量儀合作協(xié)議書
- 2025年中國消毒柜行業(yè)發(fā)展環(huán)境、供需態(tài)勢及投資前景分析報告(智研咨詢發(fā)布)
- 七年級下冊《平行線》課件與練習
- 電子政務系統(tǒng)權(quán)限設(shè)置指南
- 初中八年級音樂-勞動號子《軍民大生產(chǎn)》
- 寒假社會實踐大學生返鄉(xiāng)
- 站樁的知識講座
- 【物業(yè)】《維修資金管理與使用》培訓課件
- 革命文物主題陳列展覽導則(試行)
- 鋁合金時效爐安全操作規(guī)程模版
- DB2201T 59-2023 冬季供暖運行參數(shù)氣象指標及分級
- 醫(yī)學遺傳學第三版課件
- 四川家庭農(nóng)場補貼標準2023年
- 五年級下冊字帖
- 設(shè)備采購供貨安裝實施方案
評論
0/150
提交評論