C代碼中常用的循環(huán)控制語(yǔ)句有諸如for 、while以及do while。那么,這種循環(huán)邏輯在Simulink模型中是如何實(shí)現(xiàn)的呢?
Simulink里有三種建模手段:
Simulink 框圖
Stateflow Chart
先來(lái)看看如何使用Simulink 框圖來(lái)表達(dá)這種循環(huán)邏輯。
點(diǎn)擊末尾的 “閱讀原文” 下載本文的案例模型
循環(huán)邏輯
要得到:
y1 = 0;
for(inx = 0; inx <10; inx++)
{
y1 = u1[inx] + y1;
}
或者
while(flag && (num_iter <= 100)
{
flag = func ();
num_iter ++;
}
怎么做:
在 Simulink的Port & Subsystem庫(kù)里,有IF-ELSE以及While模塊。
For循環(huán)實(shí)例
1. 新建一個(gè)簡(jiǎn)單的Simulink模型
首先來(lái)看For循環(huán),這是從Port & Subsystem庫(kù)里拖出來(lái)的For Iterator模塊:

雙擊它,搭建內(nèi)部如下圖:

代碼生成之前所需要的配置、數(shù)據(jù)對(duì)象的構(gòu)造以及信號(hào)關(guān)聯(lián)等等,這些任務(wù)與之前所述一樣,此處就不再重復(fù)說(shuō)了。
5. 生成代碼
Ctrl+B,生成代碼。
如前面所設(shè)置的,可以看到下圖所生成的For循環(huán)的C代碼:

While循環(huán)實(shí)例
在Port & Subsystem庫(kù)里的While Iterator模塊,實(shí)現(xiàn)while循環(huán)的功能。從這個(gè)模型的端口來(lái)看,在這個(gè)循環(huán)里根據(jù)輸入u2來(lái)計(jì)算輸出y2的值,如下圖。

在這個(gè)While Iterator子系統(tǒng)內(nèi)部,則是具體的while循環(huán)的內(nèi)容,如下圖。
While Iterator模塊,是這個(gè)循環(huán)的條件模塊,可以設(shè)置最大的循環(huán)次數(shù),同時(shí)cond為while的循環(huán)條件。而在上部的累加計(jì)算框圖,則是 while 循環(huán)的內(nèi)容。

生成代碼,如下圖。圖中的func函數(shù)就是框圖func子系統(tǒng)所生成的函數(shù)。內(nèi)部做了一些更新flag的計(jì)算。另外可以看到累加框圖生成的代碼:y2 += u2。

do while循環(huán)實(shí)例
這個(gè)就簡(jiǎn)單了,直接把上圖中的 while Iterator 模塊雙擊設(shè)置為 do while 的模式就行了。
其他
生成代碼結(jié)束之后,如果繼續(xù)編譯鏈接生成 exe 文件時(shí),會(huì)有一個(gè)有意思的錯(cuò)誤如下。有興趣的可以去查看 math.h 的函數(shù)定義。

在Simulink的Port & Subsystem庫(kù)里,有IF-ELSE以及While相應(yīng)的子系統(tǒng)模塊實(shí)現(xiàn)循環(huán)算法。
-
邏輯
+關(guān)注
關(guān)注
2文章
834瀏覽量
30139 -
循環(huán)
+關(guān)注
關(guān)注
0文章
92瀏覽量
16659 -
C代碼
+關(guān)注
關(guān)注
1文章
90瀏覽量
15185
發(fā)布評(píng)論請(qǐng)先 登錄
廣東宏展科技淺談板級(jí)溫度循環(huán)瞬斷試驗(yàn)
【「龍芯之光 自主可控處理器設(shè)計(jì)解析」閱讀體驗(yàn)】--LoongArch邏輯綜合、芯片設(shè)計(jì)
按鍵消抖的方法
長(zhǎng)晶科技邏輯芯片產(chǎn)品矩陣介紹
關(guān)于實(shí)現(xiàn)邏輯循環(huán)的方法分析和介紹
評(píng)論