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

迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗(yàn)

迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)三級(jí)節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)

RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)

評(píng)論