我原來寫了一些很漂亮的 C 函數(shù),寫得非常不錯,想把它集成到 Simulink 環(huán)境中來,怎么辦?
點擊末尾的 “閱讀原文” 下載本文的案例模型
集成外部C代碼到Simulink模型
要得到:
把自己編寫的 C 函數(shù)集成到 Simulink 模型中
怎么做:
Simulink 提供了多種方法來集成外部的 C 代碼。從簡單到復(fù)雜來看,可以:
使用 Stateflow;
使用 Legacy Code Tool 構(gòu)造 S-fcn 模塊;
自己寫 S-fcn
只介紹簡單的方法
1.假設(shè)已有代碼 table1D.c 以及 table1D.h
table1D 是個簡單的 1 維查表函數(shù)。這是它的函數(shù)原型。第1、2個輸入是表格數(shù)據(jù),第 3 個輸入是表格長度數(shù)據(jù),第 4 個輸入就是要查找的 x,查到的結(jié)果作為返回值。

2. 函數(shù)調(diào)用
我現(xiàn)在希望在 Simulink 環(huán)境下使用這個查表函數(shù)。當(dāng)前的應(yīng)用場景是:在給定表格的情況下,通過輸入 u 查出相應(yīng)的 y 出來。

在Stateflow中,參照 .h 文件里定義的函數(shù)原型直接調(diào)用這個函數(shù):

然后如下圖說明一下各個變量:u 是這個 Chart 模塊的輸入,y 是 Chart 的輸出, uMap,yMap,n 是固定的表格參數(shù)。

在MATLAB Function模塊中,需要使用到coder.ceval調(diào)用這段代碼,引用傳遞使用 coder.rref:

跟 Stateflow 類似,在 MATLAB Function 中也需要對 m 腳本里用到的各個變量名做一個說明。

3. 在Workspace 里定義數(shù)據(jù)對象
再來看 Simulink 模型,它現(xiàn)在有 4 個信號:

我希望控制這 4 個信號的名字以及定義方式,所以新建這 4 個信號對應(yīng)的數(shù)據(jù)對象。另外,也給之前的 3 個參數(shù)定義對應(yīng)的數(shù)據(jù)對象。

4.并把該模型生成代碼
Ctrl + B,得到如下所示,兩句函數(shù)調(diào)用的語句:

另外,為了保證模型的正確編譯鏈接,生成代碼之前還需要在源文件中 include 手寫的 .h 文件。如圖,要在模型.h 文件中增加這一行 include 的代碼。

那這一行 include 是怎么加進去的呢?如下頁面得到:

總結(jié)
使用 Stateflow 以及 MATLAB Function 模塊可以很方便的集成外部的 C 代碼。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67516 -
C代碼
+關(guān)注
關(guān)注
1文章
90瀏覽量
15185
發(fā)布評論請先 登錄
matlab的算法部署在simulink中
使用Simulink自動生成浮點運算HDL代碼(Part 1)
vision board部署模型到openmv的代碼導(dǎo)致連接超時怎么解決?
汽車HIL測試系統(tǒng),歐美標(biāo)充電模型Simulink模型,開發(fā),有償
干貨分享 | TSMaster MBD模塊全解析:從模型搭建到自動化測試的完整實踐
三相異步電機在SIMULINK下的建模與仿真
FA模型的ServiceAbility的切換介紹
FA模型綁定Stage模型ServiceExtensionAbility介紹
代碼革命的先鋒:aiXcoder-7B模型介紹
關(guān)于的集成外部C代碼到Simulink模型分析和介紹
評論