




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、從Matlab Simulink生成易讀可重用代碼by: 吳少風MATLAB提供從MATLAB代碼或simulink模型生成C/C+代碼的功能。從MATLAB 2011b版開始,MATLAB將代碼生成Coder作為單獨模塊發布。MATLAB每年更新兩次,經過不斷完善,新版本的Coder功能更強大。用MATLAB生成C/C+代碼具有MATLAB Coder、Simulink Coder、Embedded Coder三個功能模塊,MATLAB Coder從MATLAB 代碼生成代碼,Simulink Coder從Simulink模型生成代碼,Embedded Coder結合MATLAB Coder
2、和Simulink Coder,生成嵌入式代碼。利用代碼生成功能,可以快速從模型生成可靠的代碼,應用越來越廣泛。要生成易于閱讀、重用性好的代碼,必須進行詳細設置。文中內容以易讀、可重用為目標,建立嵌入式代碼生成的演示模型,了解Simulink代碼生成相關工具,介紹詳細設置步驟,最終生成容易閱讀、可重用代碼,供單處理器單任務實時嵌入式系統應用。文中的方法為嚴格控制生成代碼的個人總結。以文檔呈現,方便自己今后查看,也希望能為其他人提供一些方便。1. 簡單示例本部分搭建一個簡單的PI控制器模型,示范模型建立、設置、生成代碼的詳細步驟。1) 新建嵌入式代碼生成模型,MATLAB->simulin
3、k,New / Embedded Coder / Code Generation System。不選擇一般simulink模板,可減少模型配置參數的設置。2) 搭建如Error! Reference source not found.所示簡易模型,保存文檔,設置文件名。圖 1. 一個簡單示例模型3) 點擊工具欄圖標 ,設置模型配置參數,應用并保存。對嵌入式應用,固定步長,離散,可調參數,ERT目標,C語言,設置基本固定,未設置的地方保持默認。è 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: 按實際設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: 命名規則設置,按各自代碼規范設置。Ø interface: 設置整個模型生成代碼的接口。² code interface package,可選擇可重用,Pass root level I/O as,模型輸入輸出參數一般較多,一般選擇結構體,structure reference,模型數據、輸入、輸出通過各自獨立結構體傳入參數;part of model data structure,一個結構體傳
6、入參數。也可選擇不可重用。² configure model functions,點擊進入,設置模型具體的C原型。get default configuration,可修改模型默認initialize/step函數名,及參數,各輸入輸出單獨作為函數參數,這與結構體傳參是矛盾的,不能同時設置。Ø code style: 設置代碼風格。² Parentheses括號, - Nominal(readability),按可讀性優化。² Casting mode 強制轉換方式,Nominal. ² Code indentation 代碼縮進, size
7、- 4.Ø Code placement: 代碼放置,可設置變量定義或聲明在單獨文件還是和源代碼放一起,頭文件包含是< head.h >還是" head.h "。Ø Data type replacement: 數據類型替換。4) 設置模型中每一個基本模塊的屬性。包括名稱、值、數據類型、采樣時間等。子模塊或者引用模型等這類自定義模塊,除了內部基本模塊的屬性外,還要設置各自的模塊屬性。模塊中參數等值,必須按照設計配置;如果想使用可調參數,則將參數設置為變量,再設置變量值。生成代碼模型中的模塊名設置,最好遵循目標語言的命名規則,因為生成代碼中的一
8、些名稱可以從模塊名繼承。嵌入式應用大多無浮點單元,定點數據的設置在模塊屬性的代碼生成欄。將圖 1中各模塊可按如下方式設置:l inport,點擊模塊下方名稱,設置模塊名,將其設置為In;雙擊模塊進入模塊屬性設置,main欄設置編號,編號會體現在子系統或引用模型上;signal attributes設置數據類型為定點數,16b字長10b小數部分fixdt(1,16,10)。其它模塊設置方法類似。l view->model data,彈出model data窗口。simulink提供的model data窗口,用于顯示當前層級下的所有輸入輸出、信號、狀態、參數,并將對應屬性羅列成表格,而且表
9、格可編輯部分屬性。l Kp增益模塊,雙擊模塊,輸出數據類型設置為同輸入,參數數據類型設置為從Gain繼承,Gain設置為Kp。l 在model data窗口,參數欄,Kp模塊,值變為Kp,其后出現create.鏈接字樣。點擊彈出create new data窗口,值選擇Simulink.Parameter,位置選擇Base Workspace,創建,彈出Simulink.Parameter: Kp屬性窗口,設置值為10,數據類型為定點數fixdt(1,16,10),存儲類型選擇ExportedGlobal,確定。l Ki增益模塊,使用設置Kp的方法將simulink參數屬性值設為1。l Fil
10、e->Model properties,彈出模型屬性窗口,選擇數據欄,將數據定義到數據字典,選擇或新建一個數據字典文件,應用。建立在基本工作區的數據遷移到數據字典保存。后面該模型新建參數等數據,基本工作區的位置將被數據字典代替。保存在基本工作區的數據,關閉MATLAB不會自動保存,因此一些模型也采用腳本配置。位置也可選擇模型工作區,但保存到模型工作區的參數,有效的存儲類型會受到限制。l unit delay單位延時,初始條件設為0,狀態名稱按實際意義設置。l Outport,數據類型可選自動。信號名稱,可到model data窗口統一設置,該窗口中選中信號,模型區會用顏色標記對應標記。沒
11、有設置名稱的信號,按照內部規則生成代碼。模型相關設置,simulink還提供model explorer圖形界面統一管理。點擊圖標可打開。5) 設置完成后,啟用Advisor檢查模型設置。選擇檢查項目,運行檢查,修改不符合的項目。analysis -> model advisor,針對模型,可選項目包括MISRA、ISO26262等。選中by task,右側點擊run selected checks。analysis -> data type design -> fixed point tool,進入設置后,左側選擇項目,右側運行檢查。code -> C/C+ code
12、 -> code generation advisor,針對生成代碼,可選項目有空間效率、執行效率、可追蹤性、安全預警、MISRA C: 2012 guidelines等。檢查項目可能會彈出一些警告,是之前手動設置的,這時選擇忽略。比如內聯參數有效率,但想要用可調參數,就只能忽略檢查時的警告。6) 點擊圖標,編譯模型生成代碼。完成后可查看報告。算法代碼如下:數據定義如下:2. Simulink生成代碼相關工具在“1簡單示例”一節,介紹了代碼生成的詳細過程。其中一些常用的工具及菜單,現羅列于表 1中。表 1. 常用工具及菜單圖標名稱最方便的位置功能Library Browser工具欄圖標基
13、本模塊庫,搭建模型的基本元素所在庫。Model Configuration Parameters工具欄圖標模型配置參數,模型仿真、生成代碼所依賴的全局規則。Mode Data菜單View- -Mode Data列表顯示當前層級模型的信號、參數、狀態等,可以在此處集中編輯。Model Explorer工具欄圖標樹狀結構的模型管理器,包括數據、配置、子模塊等。從樹狀結構可以看出,每一個模型都單獨包含數據數據、配置等元素。Model Advisor工具欄圖標根據選定項,針對模型設計,進行檢查,提供建議。用戶根據建議修改自己的模型。Code Generation AdvisorModel Adviso
14、r-圖標下拉根據選定項,針對代碼生成設置,進行檢查,提供建議。用戶根據建議修改自己的模型。Fixed-Point Tool菜單Analysis - - data Type Design - Fixed-Point Tool針對定點數設計,進行檢驗,提供建議。用戶可以根據建議修改自己的模型。Build Model工具欄圖標根據配置,編譯模型生成代碼。圖標下拉欄還有:編譯備選子系統,嵌入式代碼快速向導。快速向導按步驟生成新配置,并依次生成代碼。Run工具欄圖標模型仿真運行。一般首先會用仿真驗證模型。3. Coder保留的默認名稱在“1簡單示例”一節,生成的代碼中出現了一些固定的名稱,這些是代碼生成
15、器保留的默認名稱,用戶不能改變。為方便理解生成的代碼,將這些默認名稱及含義列于表 1中。表 2. 生成代碼中的默認名稱默認名稱含義默認名稱含義U整個模型的輸入模塊local局部變量加的前綴Y整個模型的輸出模塊rt全局變量的前綴,可設置B模塊輸出信號rtb局部模塊輸出的前綴,可設置P模塊參數_T默認類型后綴,可替換DW離散模塊狀態step模型入口,可設置DefaultP默認參數initialize模型初始化,可設置Ext全局類型加的前綴4. 代碼重用該部分將搭建一個稍微復雜模型,封裝參數,生成可重用代碼。1) 建立如Error! Reference source not found.模型。圖 2
16、. PID模型2) 選中上面模型,右鍵,create subsystem from selection進入子系統,按上面介紹的方法編輯各基本模塊。為信號和狀態起名,設置輸入數據類型,輸出數據類型和輸入保持一致。參數設置為結構體,比如KpGain的值設置為pid.Kp,數據類型繼承。3) 返回模型上一級,修改子系統名稱為Dpid,選中子系統右鍵 -> mask -> edit mask,在parameter選項卡,編輯參數,將名稱設為pid。4) 右鍵->subsystem parameters,勾選treat as atomic unit,function packing設為
17、reusable,函數名設為UnSatIntPid。5) 打開model explorer,在數據字典中添加simulink bus類,選中該類,右下角launch bus editor進入編輯,設置類名稱為PidParaStrc,將參數按名稱依次添加到類,并設置基本數據類型。6) 在數據字典中添加simulink parameter對象,將對象數據名稱設為DpidPar,類型設為PidParaStrc,值設為struct,存儲類型設為ExportedGlobal。在DpidPar值屬性列,編輯與PidParaStrc類成員對應的參數名稱,并賦值。將simulink參數DpidPar復制一份,
18、編輯其參數值。7) 將子系統Dpid復制一份,名稱改為Qpid,設置mask參數為QpidPar,連上輸入輸出,最終模型如圖所示。圖 3. 代碼重用演示模型8) 設置好模型配置參數,編譯生成代碼,查看生成的報告。整個模型的代碼如下,調用兩次UnSatIntPid函數,分別傳入不同的參數。生成可重用的算法如下所示,函數名為設置的UnSatIntPid,函數參數有四個,依次是給定,反饋,子系統狀態,PidParaStrc參數。5. 數據重用嵌入式應用多用查表的方式實現較復雜的數學函數,比如三角函數。而且為了保證精度,表格的數據一般較多。通常,如正弦函數,會充分利用周期性對稱性,查找(0, pi/2)的sin表格。本部分將演示,將(0, pi/2)的sin表格定義為全局const變量,單獨放在一個文件,實現sin/cos函數。1) 建立如圖 4模型實現sin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 私房建設審批管理辦法
- 科技創業園區管理辦法
- 科技研發支出管理辦法
- 科技評估管理辦法停用
- 租賃期間費用管理辦法
- 競價平臺采購管理辦法
- 簽約登記回款管理辦法
- 管理辦法公示時間多久
- 經濟適用化肥管理辦法
- 經營收入使用管理辦法
- 兒童籃球教學課件視頻
- 道路運輸行業員工安全考試試卷及答案
- 注塑公司規章管理制度
- 應急救援技術專業教學標準(中等職業教育)2025修訂
- 河南交通投資集團有限公司招聘筆試真題2024
- 呼吸康復講課
- 互聯網女皇AI報告:人工智能趨勢報告(雙語翻譯版本)
- 2025年西藏事業單位招聘考試職業能力傾向測驗試卷(民族醫藥類)
- T/COSHA 12-2022研學旅行安全工作規范
- T/CIE 149-2022霍爾電推進系統點火測試規范
- 200句記憶高中英語3500詞(語法填空練習)
評論
0/150
提交評論