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

迅為RK3568開發(fā)板驅動指南GPIO子系統(tǒng)三級節(jié)點操作函數(shù)實驗

RK3568驅動指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結合實驗

評論