汽車行業(yè)流行平臺化開發(fā),希望通過一套軟件對付一系列車型,當然這一系列車型的軟件基本上一致,不同配置之間可能有很少一點差別,怎么辦?C語言開發(fā)中有條件編譯,同一份源代碼,可以通過設(shè)置不同的參數(shù),讓編譯出來不同的軟件,而無需編譯冗余的軟件。
使用模型開發(fā)算法,
是否也可以讓模型生成的代碼做到這一點呢?
回答是肯定的。
下面我們來看一個例子,例子中我們通過參數(shù)K來選擇編譯不同部分的算法。
雙擊打開Variant Subsystem,往這里面添加幾個Atomic Subsystem,分別命名為Algorithm1、Algorithm2、Algorithm3,如下圖:
Algorithm1、Algorithm2、Algorithm3里面的算法如下:
不同的是Algorithm1、Algorithm2、Algorithm3里面的Gain分別為1、2、3。
在Variant Subsystem模塊上,鼠標右鍵,選擇Block Parameters,設(shè)置如下圖所示:
最后,在Base Workspace或者data dictionary里使用參數(shù)類定義參數(shù)對象K,設(shè)置K的Storage Class為Define,同時指定頭文件為my_config.h。
好了,做完上述設(shè)置就可以生成如下的代碼了:
void mymodel_step(void)
{
#if K == 1
y = x;
#elif K == 2
y = 2.0 * x;
#elif K == 3
y = 3.0 * x;
#endif
}
注:假如我們給K賦值為2,模型就會出現(xiàn)最前面兩幅圖片里顯示的那樣,Variant Subsystem最上方的名字是Algorithm2,Variant Subsystem里面的3個Atomic Subsystem中Algorithm2是黑色的,另外兩個是灰色的。
需要注意的是:
代碼生成的時候,在Variant Subsystem模塊上鼠標右鍵,選擇Block Parameter,設(shè)置Variant control條件,同時,勾上Analyze all choices during update diagram and generate preprocessorconditionals;
Variant Subsystem內(nèi)部的連接關(guān)系是通過顏色表示的,黑色的就表明已經(jīng)連上了,不要試圖使用鼠標把這里的Inport、Outport和某個子系統(tǒng)上的端口硬連接,當然,你也是連不上的;
這三部分算法之間的差別非常小,可以使用Variant subsystem的方式實現(xiàn),如果算法差別的部分比較大,建議使用Model Variant實現(xiàn)。
往期 | 老胡專欄
為什么要基于模型設(shè)計?
自動代碼生成五大原則
什么樣的模型算正確的模型?
簡單說說MIL、SIL、PIL和HIL
自動生成的代碼支持哪些硬件平臺?
-
算法
+關(guān)注
關(guān)注
23文章
4612瀏覽量
92901 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68616 -
編譯
+關(guān)注
關(guān)注
0文章
657瀏覽量
32872
發(fā)布評論請先 登錄
相關(guān)推薦
評論