我們寫 C 代碼的時候,為了主程序結構清晰,通常會把具有獨立功能的代碼變成子函數的形式。類似的,為了 Simulink 模型結構清晰,我們在模型里也經常會用把具一片實現某種功能的模塊變成子系統的形式。
那么,如果我希望這些Simulink 子系統在自動代碼生成時,也能真的生成單獨的子函數,該如何配置呢?
把某個子系統編程函數調用
要得到:
自動生成代碼時,讓某個 Simulink 子系統的算法生成單獨子函數形式。
怎么做:
把該子系統變為元胞子系統 (Atomic Subsystem),并配置子系統的代碼生成選項。
舉個例子
1. 模型
這是在前一篇帖子最后用到的一個模型。MATLAB Function 里面寫了一個循環語句,并在循環內部調用了外部子系統 func:
它所生成的代碼如下圖。可以看到 Simulink 子系統 func 在生成代碼后,具體的 C 代碼并不會平鋪在主程序里。它而是作為一個函數調用的形式出現的的 func( ):
2. 設置
這是因為對該模塊的屬性做了設置,如下圖。
首先右鍵點擊模型,打開 Block Parameters 界面,首先要在 Main 的頁面將子系統勾選為Atomic Subsystem。只不過在這個案例模型里,由于 func 是觸發子系統,默認就是 Atomic 的。
然后,點開出現的 Code Generation 頁面,將 Function packaging 配置為 Nonresusable function,主函數調用它時通過全局變量來傳遞數據(總之不選擇 Inline 和 Auto)。
也可以設置為 Reusable ,這時主程序調用它的時候,會通過傳參的方式來進行數據傳遞。最后生成的代碼如下圖:
模型的默認設置是 Auto,所以在這種情況下,代碼生成工具會把這個子系統的算法代碼寫在主程序里,而不會采用函數調用的方式,如下圖:
總結
如果希望某個子系統的 C 代碼單獨生成一個子函數,那么:
把子系統配置為元胞子系統(Atomic Subsystem);
設置 Code Generation 屬性為 Reusable 或者 NonReusable。
另外,不僅可以將子系統的代碼放在單獨的子函數里,還可以配置放在單獨的文件(在配置菜單里指定文件名即可)里。
-
編程
+關注
關注
88文章
3637瀏覽量
93900 -
函數
+關注
關注
3文章
4344瀏覽量
62864 -
代碼
+關注
關注
30文章
4820瀏覽量
68882
發布評論請先 登錄
相關推薦
評論