C代碼中常用的循環控制語句有諸如for 、while以及do while。那么,這種循環邏輯在Simulink模型中是如何實現的呢?
Simulink里有三種建模手段:
Simulink 框圖
Stateflow Chart
先來看看如何使用Simulink 框圖來表達這種循環邏輯。
點擊末尾的 “閱讀原文” 下載本文的案例模型
循環邏輯
要得到:
y1 = 0;
for(inx = 0; inx <10; inx++)
{
y1 = u1[inx] + y1;
}
或者
while(flag && (num_iter <= 100)
{
flag = func ();
num_iter ++;
}
怎么做:
在 Simulink的Port & Subsystem庫里,有IF-ELSE以及While模塊。
For循環實例
1. 新建一個簡單的Simulink模型
首先來看For循環,這是從Port & Subsystem庫里拖出來的For Iterator模塊:
雙擊它,搭建內部如下圖:
代碼生成之前所需要的配置、數據對象的構造以及信號關聯等等,這些任務與之前所述一樣,此處就不再重復說了。
5. 生成代碼
Ctrl+B,生成代碼。
如前面所設置的,可以看到下圖所生成的For循環的C代碼:
While循環實例
在Port & Subsystem庫里的While Iterator模塊,實現while循環的功能。從這個模型的端口來看,在這個循環里根據輸入u2來計算輸出y2的值,如下圖。
在這個While Iterator子系統內部,則是具體的while循環的內容,如下圖。
While Iterator模塊,是這個循環的條件模塊,可以設置最大的循環次數,同時cond為while的循環條件。而在上部的累加計算框圖,則是 while 循環的內容。
生成代碼,如下圖。圖中的func函數就是框圖func子系統所生成的函數。內部做了一些更新flag的計算。另外可以看到累加框圖生成的代碼:y2 += u2。
do while循環實例
這個就簡單了,直接把上圖中的 while Iterator 模塊雙擊設置為 do while 的模式就行了。
其他
生成代碼結束之后,如果繼續編譯鏈接生成 exe 文件時,會有一個有意思的錯誤如下。有興趣的可以去查看 math.h 的函數定義。
在Simulink的Port & Subsystem庫里,有IF-ELSE以及While相應的子系統模塊實現循環算法。
-
邏輯
+關注
關注
2文章
834瀏覽量
29689 -
循環
+關注
關注
0文章
92瀏覽量
16240 -
C代碼
+關注
關注
1文章
90瀏覽量
14663
發布評論請先 登錄
技術干貨驛站 ▏深入理解C語言:嵌套循環與循環控制的底層原理

邏輯異或和邏輯或的比較分析
關于LRU(Least Recently Used)的邏輯實現

評論