生成代碼
我們拿下面這個模型作為一個例子。它有一個 Bias 和一個 Unit Delay 模塊,每 0.001s 運行一次,另外有一個 Math Function 模塊,每 0.01s 運行一次。
就像你們知道的那樣,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)境里運行。
如果你需要的話,也可以讓 Simulink 把每個離散采樣率歸到一個單獨的任務(wù)。
在這所生成的代碼里,每一個采樣時間的部分都單獨生成一個函數(shù)。這樣,你就可以用你實現(xiàn)的調(diào)度器,來任意調(diào)用各個采樣率的部分。
導(dǎo)出函數(shù)
各個采樣率的部分都能生成一個單獨的函數(shù)還挺有用的,但是,如果你想更隨心所欲的控制代碼的執(zhí)行,該怎么做呢?比如說,把某個采樣率的部分拆成若干個任務(wù),然后指定每個任務(wù)不同的優(yōu)先級。
為此,Embedded Coder 提供了導(dǎo)出函數(shù)(export functions)的功能。這個功能可以直接控制某個部分單獨生成函數(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)造為單獨的模型(Export Function Models)。
在這里,頂層的模型只是用于仿真,被引用子模型要生成代碼。 Simulink 會自動識別這個模型是用于導(dǎo)出函數(shù)的,它所生成的代碼也會跟上面的那個子系統(tǒng)類似。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62622 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68616
發(fā)布評論請先 登錄
相關(guān)推薦
評論