生成代碼
我們拿下面這個模型作為一個例子。它有一個 Bias 和一個 Unit Delay 模塊,每 0.001s 運行一次,另外有一個 Math Function 模塊,每 0.01s 運行一次。
就像你們知道的那樣,Embedded Coder 可以把 Simulink 模型生成 C 代碼。這里使用 Embedded 默認的系統目標文件配置(tlc文件),所生成的代碼像下面這樣:
如你所見,代碼里有一個 Initialize 函數以及一個 Step 函數。Step 函數將以模型的基礎采樣率調用,在這里是 0.001s。最好是把這個代碼放在單任務環境里運行。
如果你需要的話,也可以讓 Simulink 把每個離散采樣率歸到一個單獨的任務。
在這所生成的代碼里,每一個采樣時間的部分都單獨生成一個函數。這樣,你就可以用你實現的調度器,來任意調用各個采樣率的部分。
導出函數
各個采樣率的部分都能生成一個單獨的函數還挺有用的,但是,如果你想更隨心所欲的控制代碼的執行,該怎么做呢?比如說,把某個采樣率的部分拆成若干個任務,然后指定每個任務不同的優先級。
為此,Embedded Coder 提供了導出函數(export functions)的功能。這個功能可以直接控制某個部分單獨生成函數,另外還可以仿真它們的調度和優先級。
為了匹配導出函數這個目的,你的模型必須以特定的方式來搭建。需要導出的函數頂層必須只包含 Function Call 子系統,輸入以及輸出端口。這樣的話,每一個子系統會生成一個函數。
比如,我們剛才那個模型,重新按照下面這個方式來實現:
對于仿真來說,不同任務的調度必須顯示指定出來,比如像上圖那樣,使用 Stateflow 來實現。要生成代碼的時候,你可以在這個子系統上右鍵,然后導出這個函數。
得到的代碼就像下面這樣:
你就可以把這些代碼集成到你手寫的調度器里去了。就像我之前提到的,通過這種方式,你可以將一個速率的部分拆分成多個函數或者任務。
導出函數模型
對于更大型的項目,你也可以將導出函數構造為單獨的模型(Export Function Models)。
在這里,頂層的模型只是用于仿真,被引用子模型要生成代碼。 Simulink 會自動識別這個模型是用于導出函數的,它所生成的代碼也會跟上面的那個子系統類似。
-
函數
+關注
關注
3文章
4379瀏覽量
64678 -
代碼
+關注
關注
30文章
4895瀏覽量
70553
發布評論請先 登錄
Allegro Skill封裝功能-導出device文件介紹與演示

解鎖TSMaster fifo函數:報文讀取的高效方法

VirtualLab Fusion應用:參數掃描結果的導出
如何導出交換機的配置文件
函數信號分析儀的原理和應用場景
零基礎教程!TSMaster的圖形數據導出CSV功能

機智云歷史數據導出與排查指南

評論