雖然說基于模型的設計(Model Based Design,MBD)就是未來嵌入式控制開發的主流方法,但是很多工程師都是C代碼的高手,對Simulink并不是很熟悉,尤其是自動代碼生成。在進行Simulink模型代碼自動生成的時候,也會習慣性的去想生成的代碼如何匹配腦子里所想的C代碼。
那么,Let's Go!
Typedef
要得到:typedef double float_64;
怎么做:用Simulink.AliasType數據對象。
實例一
因為是第一個例子,過程會稍微介紹得詳細一些。
1. 建一個簡單的Simulink模型
2. 代碼生成基本配置
求解器:定步長—離散求解器
系統目標文件:ert.tlc
這時候Ctrl+B,可以生成代碼了。只不過此時u1,y1以及k都不是我們想要的定義方式。
3. 新建數據對象
打開Model Explorer,點擊菜單的Add,在base workspace里定義如圖三個數據對象。
新建Simulink.AliasType,名字為float_64,并把Base type設置為double。這樣,在生成代碼的時候,就會出現這一句:typedef double float_64。
新建Simulink.Signal,名字為u1;新建Simulink.Parameter命名為k。注意它們Data Type與Storage class的定義。
4. 將Simulink信號線與workspace的數據對象關聯
在信號線u1上右鍵,設置它的屬性,勾選Signal name must resolve to Simulink signal object,信號線上會出現如后圖的藍色小叉子。這樣這個信號u1就會使用它所關聯的數據對象u1所定義的方式來生成代碼。
除了這種關聯的方式之外,還可以直接設置信號的屬性。比如右鍵單擊信號y1,設置它的屬性如圖。
參數k不需要手動關聯。
顯示模塊端口的數據類型,得到如下圖的顯示。( 點擊模型的菜單Display -> Signal&Ports -> Ports Data Type)
5. 生成代碼查看結果
Ctrl+B生成代碼。
代碼生成報告打開,在模型名_types.h文件里,看得到了這句typedef。這是之前定義Simulink.AliasType得到的結果。
里面的real_T是E-Coder默認的對double的typedef:
同時,可以看到模型中的u1,y1以及k的定義,這是之前將信號和參數綁定到數據對象而得到的結果。
總結
要得到:typedef double float_64;
怎么做:用Simulink.AliasType數據對象
-
數據
+關注
關注
8文章
7081瀏覽量
89177 -
信號
+關注
關注
11文章
2794瀏覽量
76880
發布評論請先 登錄
相關推薦
評論