循環(huán)邏輯
要得到:
y1 = 0;
for(inx = 0; inx <10; inx++)
{
y1 = u1[inx] + y1;
}
或者
while(flag && (num_iter <= 100)
{
flag = func ();
num_iter ++;
}
怎么做:
Stateflow 有相應的流程圖向導可以直接使用,自動生成對應的流程圖結構。
For循環(huán)
1. 模型
在 Stateflow 里有各種控制流的構造向導,如下圖。如果對 Stateflow 的流程圖構建不熟悉的話,可以使用它來自動生成,再在它的基礎上進行修改:

從而得到所需要的框圖:

2. 數(shù)據(jù)
定義 Stateflow 模塊的端口和本地變量,輸入端口 u1,輸出端口 yy1,以及本地變量 inx 如下:

在 Base Workspace 里定義輸入輸出信號 u1,yy1 的 Data Object:

3. 關聯(lián)
在信號線上右鍵,設置信號屬性,勾選 “Signal name must resolve to Simulink signal object”,將信號與 Base Workspace 的數(shù)據(jù)對象關聯(lián)在一起。關聯(lián)輸入輸出信號后,會看到如圖的藍色小叉子:

4. 代碼
Ctrl+B,它所自動生成的代碼:

While循環(huán)
1. 模型
下圖就通過向導構造的,得到跟 for 循環(huán)類似的流程圖:

這里的func作為一個 事件Event ,觸發(fā)外面的 function call 子系統(tǒng) func 計算flag:

2. 數(shù)據(jù)
Stateflow 內(nèi)的數(shù)據(jù)定義如下圖,輸入端口名稱 u1,輸出端口名稱 yy2,本地變量 num_iter。flag 由外部函數(shù) func 來更新而作為輸入。另外, func 事件觸發(fā)調用外部的 func 函數(shù)。( inx 這里沒有用)

在 Base Workspace 里定義相應的數(shù)據(jù)對象。因為這個 Simulink 模型的信號線上已經(jīng)命名為 u2,所以定義的數(shù)據(jù)對象名稱要跟信號線的名字一致: u2,yy2,flag。
并設置 flag 的初始值為 true。將數(shù)據(jù)對象與 Simulink 信號線關聯(lián)。

3. 生成代碼
Ctrl+B,生成的代碼如下圖所示。設置了 func()子系統(tǒng)的屬性,把它變成一個子函數(shù)來調用。沒有截圖顯示,但是func() 函數(shù)里修改了全局變量 flag 的值。

代碼正常生成,但此時會得到如下的警告:

也就是說,我們之前對數(shù)據(jù)對象 flag 所設置的初始值是沒用的,會被模型中 func 子系統(tǒng)的輸出端口 Out1 的初始值所覆蓋。
默認情況下 Out1 端口的初始值為 0 ,所以看下圖的初始化函數(shù)里, flag 被初始化為 false,我們之前所設置的初始值 true 沒有發(fā)生作用。

主程序里的 while(flag&(inx<100)) 都不會被執(zhí)行。這個問題,通過仿真也會測出來。
所以,需要雙擊 func 子系統(tǒng)的 Out1 端口,設置初始值為 true,仿真才能得到正確的結果。同時,也會最后得到下面的初始化代碼。

do while循環(huán)
使用流程圖的向導,選擇 do while 模式,把 Chart 里面的流程圖改改就行了。另外,被調用的 func 函數(shù),也可以寫在 Chart 里面。
Stateflow 有相應的流程圖向導可以直接使用,自動生成對應的流程圖結構。
-
輸出信號
+關注
關注
0文章
311瀏覽量
12730 -
初始化
+關注
關注
0文章
52瀏覽量
12372
發(fā)布評論請先 登錄
鎖相放大器的軟件實現(xiàn)與仿真分析:基于相關檢測技術的微弱信號提取
【「龍芯之光 自主可控處理器設計解析」閱讀體驗】--LoongArch邏輯綜合、芯片設計
有源邏輯探頭的具體應用
長晶科技邏輯芯片產(chǎn)品矩陣介紹
關于系統(tǒng)鏈接腳本的介紹
vivado時序分析相關經(jīng)驗
AES加解密算法邏輯實現(xiàn)及其在蜂鳥E203SoC上的應用介紹
AES和SM4算法的可重構分析
溫度循環(huán)測試后如何進行數(shù)據(jù)記錄和分析?
Stateflow模型測試典型問題分享——不可達的分支
關于Stateflow實現(xiàn)循環(huán)邏輯的相關分析和介紹
評論