在之前的帖子里(http://blogs.mathworks.com/simulink/2014/12/11/simulink-functions-intro/),我重點(diǎn)介紹了怎么使用 Simulink Function 來構(gòu)造可以導(dǎo)出為函數(shù)的模型,這樣可以把 Simulink Function 模塊放在單獨(dú)的模型里。在仿真的時候,可以引用這個模型,然后使用 Function Caller 模塊來調(diào)用它。
還可以將這個 Function Library 模型生成代碼,在自己的手寫代碼里就可以任意調(diào)用這些函數(shù)了。
沒有提到的一點(diǎn)是, Simulink Function 和 Function Caller 模塊完全可以反過來用。也就是說,在被引用的模型里放 Function Caller 模塊,而在主模型里放被調(diào)用的 Simulink Function 模塊。
為什么要這樣做?簡而言之,這是為了模擬一些不直接用于仿真的自定義代碼。我們來看看這是如何實(shí)現(xiàn)的。
使用 Function Caller 模塊來調(diào)用外部代碼
如果我們把上面的子模型 codeGenModel.xls 生成代碼的話,代碼就像下面這樣:
默認(rèn)情況下,這個代碼不會被編譯,因?yàn)榫幾g器不知道上哪找這個 timesTwo 函數(shù)。如果你知道怎么去配置模型,這個函數(shù) timesTwo 可以從任意地方提供。比如在這個例子里,假設(shè)我們有一個 timesTwo.c 文件。
在模型的配置項(xiàng)里,我可以通過設(shè)置把這個文件包含到編譯過程中去。
這樣,我就可以調(diào)用我自己寫的 timesTwo.c 然后編譯成可執(zhí)行文件了。
總結(jié)來說,可以通過構(gòu)造一個 Simulink Function 來模擬外部代碼。
我們可以構(gòu)造一個仿真框架模型(如第二張圖的 simTop),然后引用我們的算法模型(比如 codeGenModel.xls)。對于這個算法子模型來說,被它調(diào)用的 Simulink Function (對于 simTop 來說)是可見的。但是,當(dāng)把子模型 (codeGenModel 單獨(dú))生成代碼的時候,它并不知道( 主模型里的)Simulink Function 的存在,而相應(yīng)的,它會鏈接到你所指定的那個外部代碼(timesTwo.c)上去。
我必須得說明一下,這只是眾多往Simulink 自動生成的代碼中插入外部代碼的方法之一。
如果在主機(jī)上就有外部代碼的話,我會推薦使用 S-function 來包裝和重用,可用于仿真和代碼生成。
但是,如果沒有外部代碼,比如說這些代碼是目標(biāo)板上面的 OS 服務(wù)程序,那么這種方法倒有點(diǎn)意思(用Simulink Function 來模擬這些硬件 OS 服務(wù)程序)。
-
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70753 -
編譯
+關(guān)注
關(guān)注
0文章
679瀏覽量
34002
發(fā)布評論請先 登錄
三相異步電機(jī)在SIMULINK下的建模與仿真
在IAR Arm開發(fā)工具鏈中--function_sections編譯選項(xiàng)的使用

基于VT系統(tǒng)的MCU硬件在環(huán)建模與仿真應(yīng)用分析

大規(guī)模硬件仿真系統(tǒng)的編譯挑戰(zhàn)

如何用Simulink仿真BLDC反電動勢波形(可下載)
用matlab里的simulink仿真一個推挽升壓仿真電路,輸出帶載能力很差?
Simulink與 Simscape的結(jié)合使用
Simulink模型仿真與分析技巧
Simulink自定義模塊開發(fā)教程 Simulink 在控制系統(tǒng)中的應(yīng)用
EasyGo 實(shí)時仿真丨DC-AC-MMC 實(shí)時仿真應(yīng)用
Matlab/Simulink/Stateflow建模開發(fā)及仿真測試
FPGA仿真工具包軟件EasyGo Vs Addon介紹

【干貨分享】硬件在環(huán)仿真(HiL)測試

評論