上次介紹過可以使用Variant Subsystem或者Model Variant實現帶有條件編譯的代碼(條件編譯助力Simulink模型平臺化開發)。最近了解到,從MATLAB R2016a開始,又有一種新的方式可以實現C代碼中的條件編譯。這就是Variant Sourc模塊的使用。

假設有如下模型:

雙擊Variant Source模塊,可以看到如下配置界面:

不難看出,除了要定義Simulink Variant對象K1、K2之外,還需要勾上Analyze all choices during update diagram and generate prepropcessor conditionals選項。顯然,如果K==1條件成立,則Port 1分支對應的代碼被編譯,如果K==2,則Port 2分支對應的代碼被編譯。這里的K可以定義為Simulink Parameter對象,Storage Class定義為Define(Custom),并且需要指定宏定義的文件。
如此設置之下,得到的模型算法實現函數如下:
voidtestvariantSource_step(void)
{
real_T rtb_VariantMerge_For_Variant_So;
#ifK1
rtb_VariantMerge_For_Variant_So = u1 + u2;
#endif
#ifK2
rtb_VariantMerge_For_Variant_So = u3 + u4;
#endif
y = rtb_VariantMerge_For_Variant_So;
}
這種方式實現帶有條件編譯的代碼也非常簡單,條件編譯的好處可以通過控制宏定義K控制需要編譯哪部分代碼,那么,如果不設置條件編譯呢?
上述模型中,如果不再勾選Analyze all choices during update diagram and generate prepropcessor conditionals選項,我們得到如下代碼:
voidtestvariantSource_step(void)
{
y = u1 + u2;
}
代碼中只有當前參數條件下有效算法的代碼。
跟上次介紹的條件編譯相比,實現方式不同,應用場景也可能不同,如何取舍,這里就不去分析了。但是,在基于模型的開發模式下,到底在模型級別上做選擇,還是通過C代碼級別的條件編譯做選擇,這是個值得我們思考的問題。
-
代碼
+關注
關注
30文章
4968瀏覽量
73988 -
編譯
+關注
關注
0文章
694瀏覽量
35166
發布評論請先 登錄
一種基于PWM的電壓輸出DAC電路設計
一種帶通濾波器在無位置傳感器轉子檢測中的應用
多種空間矢量調制方法的諧波分析
VirtualLab:醫用衍射透鏡
VirtualLab Fusion應用:多反射系統的非序列建模
PanDao:實際約束條件下成像系統的初始結構的生成
電機瞬態過程分析的MATLAB建模與仿真
一種新型激光雷達慣性視覺里程計系統介紹
一種分段氣隙的CLLC變換器平面變壓器設計
一種基于分數階 PID 直流電機調速的 AGV 控制系統
一種多模態駕駛場景生成框架UMGen介紹
關于一種實現條件編譯的建模方法分析和介紹
評論