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

評論