生成代碼
我們拿下面這個模型作為一個例子。它有一個 Bias 和一個 Unit Delay 模塊,每 0.001s 運(yùn)行一次,另外有一個 Math Function 模塊,每 0.01s 運(yùn)行一次。

就像你們知道的那樣,Embedded Coder 可以把 Simulink 模型生成 C 代碼。這里使用 Embedded 默認(rèn)的系統(tǒng)目標(biāo)文件配置(tlc文件),所生成的代碼像下面這樣:

如你所見,代碼里有一個 Initialize 函數(shù)以及一個 Step 函數(shù)。Step 函數(shù)將以模型的基礎(chǔ)采樣率調(diào)用,在這里是 0.001s。最好是把這個代碼放在單任務(wù)環(huán)境里運(yùn)行。
如果你需要的話,也可以讓 Simulink 把每個離散采樣率歸到一個單獨(dú)的任務(wù)。

在這所生成的代碼里,每一個采樣時間的部分都單獨(dú)生成一個函數(shù)。這樣,你就可以用你實現(xiàn)的調(diào)度器,來任意調(diào)用各個采樣率的部分。

導(dǎo)出函數(shù)
各個采樣率的部分都能生成一個單獨(dú)的函數(shù)還挺有用的,但是,如果你想更隨心所欲的控制代碼的執(zhí)行,該怎么做呢?比如說,把某個采樣率的部分拆成若干個任務(wù),然后指定每個任務(wù)不同的優(yōu)先級。
為此,Embedded Coder 提供了導(dǎo)出函數(shù)(export functions)的功能。這個功能可以直接控制某個部分單獨(dú)生成函數(shù),另外還可以仿真它們的調(diào)度和優(yōu)先級。
為了匹配導(dǎo)出函數(shù)這個目的,你的模型必須以特定的方式來搭建。需要導(dǎo)出的函數(shù)頂層必須只包含 Function Call 子系統(tǒng),輸入以及輸出端口。這樣的話,每一個子系統(tǒng)會生成一個函數(shù)。
比如,我們剛才那個模型,重新按照下面這個方式來實現(xiàn):

對于仿真來說,不同任務(wù)的調(diào)度必須顯示指定出來,比如像上圖那樣,使用 Stateflow 來實現(xiàn)。要生成代碼的時候,你可以在這個子系統(tǒng)上右鍵,然后導(dǎo)出這個函數(shù)。

得到的代碼就像下面這樣:

你就可以把這些代碼集成到你手寫的調(diào)度器里去了。就像我之前提到的,通過這種方式,你可以將一個速率的部分拆分成多個函數(shù)或者任務(wù)。
導(dǎo)出函數(shù)模型
對于更大型的項目,你也可以將導(dǎo)出函數(shù)構(gòu)造為單獨(dú)的模型(Export Function Models)。
在這里,頂層的模型只是用于仿真,被引用子模型要生成代碼。 Simulink 會自動識別這個模型是用于導(dǎo)出函數(shù)的,它所生成的代碼也會跟上面的那個子系統(tǒng)類似。

-
函數(shù)
+關(guān)注
關(guān)注
3文章
4419瀏覽量
67678 -
代碼
+關(guān)注
關(guān)注
30文章
4973瀏覽量
74160
發(fā)布評論請先 登錄
PCB Gerber文件如何導(dǎo)出
Moku升級實時計算并顯示g(2)二階關(guān)聯(lián)函數(shù)及最新活動更新
函數(shù)指針介紹
電能質(zhì)量在線監(jiān)測裝置的多維度統(tǒng)計報表支持遠(yuǎn)程訪問導(dǎo)出嗎?
內(nèi)聯(lián)函數(shù)介紹
安世中國關(guān)于當(dāng)前供應(yīng)鏈局勢及相關(guān)訴求的鄭重聲明
電能質(zhì)量在線監(jiān)測裝置的報警記錄可以導(dǎo)出嗎?
關(guān)于系統(tǒng)鏈接腳本的介紹
軟件設(shè)計及串口相關(guān)函數(shù)介紹
凡億Allegro Skill工藝輔助之導(dǎo)出公制的坐標(biāo)
Allegro Skill封裝功能-導(dǎo)出device文件介紹與演示
Allegro Skill封裝功能之導(dǎo)出單個封裝介紹
函數(shù)指針的六個常見應(yīng)用場景
關(guān)于導(dǎo)出函數(shù)的相關(guān)分析和介紹
評論