我原來(lái)寫(xiě)了一些很漂亮的 C 函數(shù),寫(xiě)得非常不錯(cuò),想把它集成到 Simulink 環(huán)境中來(lái),怎么辦?
點(diǎn)擊末尾的 “閱讀原文” 下載本文的案例模型
集成外部C代碼到Simulink模型
要得到:
把自己編寫(xiě)的 C 函數(shù)集成到 Simulink 模型中
怎么做:
Simulink 提供了多種方法來(lái)集成外部的 C 代碼。從簡(jiǎn)單到復(fù)雜來(lái)看,可以:
使用 Stateflow;
使用 Legacy Code Tool 構(gòu)造 S-fcn 模塊;
自己寫(xiě) S-fcn
只介紹簡(jiǎn)單的方法
1.假設(shè)已有代碼 table1D.c 以及 table1D.h
table1D 是個(gè)簡(jiǎn)單的 1 維查表函數(shù)。這是它的函數(shù)原型。第1、2個(gè)輸入是表格數(shù)據(jù),第 3 個(gè)輸入是表格長(zhǎng)度數(shù)據(jù),第 4 個(gè)輸入就是要查找的 x,查到的結(jié)果作為返回值。
2. 函數(shù)調(diào)用
我現(xiàn)在希望在 Simulink 環(huán)境下使用這個(gè)查表函數(shù)。當(dāng)前的應(yīng)用場(chǎng)景是:在給定表格的情況下,通過(guò)輸入 u 查出相應(yīng)的 y 出來(lái)。
在Stateflow中,參照 .h 文件里定義的函數(shù)原型直接調(diào)用這個(gè)函數(shù):
然后如下圖說(shuō)明一下各個(gè)變量:u 是這個(gè) Chart 模塊的輸入,y 是 Chart 的輸出, uMap,yMap,n 是固定的表格參數(shù)。
在MATLAB Function模塊中,需要使用到coder.ceval調(diào)用這段代碼,引用傳遞使用 coder.rref:
跟 Stateflow 類(lèi)似,在 MATLAB Function 中也需要對(duì) m 腳本里用到的各個(gè)變量名做一個(gè)說(shuō)明。
3. 在Workspace 里定義數(shù)據(jù)對(duì)象
再來(lái)看 Simulink 模型,它現(xiàn)在有 4 個(gè)信號(hào):
我希望控制這 4 個(gè)信號(hào)的名字以及定義方式,所以新建這 4 個(gè)信號(hào)對(duì)應(yīng)的數(shù)據(jù)對(duì)象。另外,也給之前的 3 個(gè)參數(shù)定義對(duì)應(yīng)的數(shù)據(jù)對(duì)象。
4.并把該模型生成代碼
Ctrl + B,得到如下所示,兩句函數(shù)調(diào)用的語(yǔ)句:
另外,為了保證模型的正確編譯鏈接,生成代碼之前還需要在源文件中 include 手寫(xiě)的 .h 文件。如圖,要在模型.h 文件中增加這一行 include 的代碼。
那這一行 include 是怎么加進(jìn)去的呢?如下頁(yè)面得到:
總結(jié)
使用 Stateflow 以及 MATLAB Function 模塊可以很方便的集成外部的 C 代碼。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62622 -
C代碼
+關(guān)注
關(guān)注
1文章
89瀏覽量
14302
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論