91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于使用Stateflow調用外部C代碼的教程介紹

MATLAB ? 來源:djl ? 2019-09-17 08:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

無論是Simulink仿真,還是對模型做代碼生成,已有C代碼的調用都是我們經(jīng)常會遇到的情形:

如何調用現(xiàn)有的外部C代碼?

很多人首先想到的是S-Function。的確,S-Function提供了一種途徑,可以讓我們把C函數(shù)封裝成Simulink模塊在Simulink環(huán)境下運行。另外還有一種方式,叫做Legacy Code Tool,說白了也是S-Function,只是MATLAB提供了這樣的接口便于用于實現(xiàn)S-Function封裝。這兩種做法都不是我要介紹的。

我想跟大家說的是更方便的方法:

使用Stateflow調用外部C代碼。

假設有兩個文件,myfile.c和myfile.h。其中myfile.c中定義了一個全局函數(shù)和全局變量,如下:

#include "myfile.h"

double x;

double myfun(double a, double b)

{

return a +b;

}

myfile.h文件是對全局函數(shù)myfun()和全局變量x的聲明。

假如我已經(jīng)為Chart定義了兩個輸入input1和input2,一個輸出output,那么Stateflow里你就可以像下面這樣使用這個函數(shù)和變量:

關于使用Stateflow調用外部C代碼的教程介紹

除此,你不僅可以使用flowchart去調用外部C代碼,你也可以在狀態(tài)機里調用外部代碼,如下圖:

關于使用Stateflow調用外部C代碼的教程介紹

當然,如果要做到上述直接調用C代碼,需要做如下幾點設置:

把Stateflow的動作語言(Action Language)設置為C;

打開如下界面進行如圖示的配置

關于使用Stateflow調用外部C代碼的教程介紹

以上是針對新版本MATLAB的界面。

對于老版本的MATLAB,在Simulation Target下面,還有一層Custom Code,作用和新版本是一樣的。

這里我們有三個地方可以設置,Insert custom C code in generated,這下面的幾個欄,都是把右側編輯框里的文本信息插入到Stateflow生成的Source file、Header file以及Initialize function和Terminate function里面。

說到這里很多人可能會迷糊了,Stateflow要生成代碼?沒錯,Stateflow的運行不同于Simulink模塊,Simulink模塊可以事先定義好各種行為或者動作,而Stateflow chart里面的設計可能千差萬別,沒法事先定義chart的行為,所以在運行Stateflow chart的時候,首先需要把這個chart轉成S-Function格式的C代碼,然后編譯成動態(tài)鏈接庫文件(MATLAB里面擴展名是mexw32或者mexw64,32或者64取決于MATLAB的位數(shù)),而這個插入代碼就發(fā)生在從chart轉成C代碼的過程中。比如,按照上圖的設置,在生成的C代碼的頭文件中會有一行代碼 #include “myfile.h”。

另外,Additional build information里面,需要指定路徑,在Include directories里面給出要編譯的C文件的路徑,如果C文件和模型在同一路徑下,也可以不指定;在Source files里面,給出要編譯的C文件myfile.c。這部分內容,是告訴編譯器和鏈接器需要編譯的C文件在什么路徑下以及需要編譯哪些自動生成的文件之外的C文件。

說到底,對于現(xiàn)有C代碼的調用,無論是自己編寫S-Function,還是使用Legacy Code Tool創(chuàng)建S-Function模塊,或者使用Stateflow,最終的實現(xiàn)方式都是S-Function(動態(tài)鏈接庫)相比之下,使用Stateflow會更便利、更直觀一些。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關注

    關注

    3

    文章

    4418

    瀏覽量

    67575
  • 變量
    +關注

    關注

    0

    文章

    616

    瀏覽量

    29514
  • C代碼
    +關注

    關注

    1

    文章

    90

    瀏覽量

    15192
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    關于MT6901的直線DEMO介紹

    關于MT6901的直線DEMO介紹
    的頭像 發(fā)表于 01-30 10:54 ?453次閱讀
    <b class='flag-5'>關于</b>MT6901的直線DEMO<b class='flag-5'>介紹</b>

    在Keil中進行C代碼與匯編代碼的混合編程

    1. 在 C 代碼調用匯編程序代碼C 代碼調用匯編程序中函數(shù)的方法: 第一步,在
    發(fā)表于 01-23 06:36

    c語言中的代碼優(yōu)化

    寫好的代碼嵌入到當前程序,不會產生函數(shù)調用,因此僅僅是占用了空間,在頻繁調用同 一個宏的時候,該現(xiàn)象尤為突出。 舉例以下: 方法C: #define bwMCDR2_ADDRES
    發(fā)表于 01-12 09:45

    LAT1198+通過 KEIL 制作 QSPI 接口的外部 Flash 下載算法應用筆記

    時,需要將代碼或數(shù)據(jù)燒錄到外部 Flash。如果調試工具不能夠一鍵燒錄,勢必會給調試帶來諸多的麻煩。本文以 STM32H750 芯片為例,介紹通過 KEIL制作 QSPI 接口的外部
    發(fā)表于 01-11 17:25 ?0次下載

    關于NFC鎳鋅鐵氧體片的介紹

    關于NFC鎳鋅鐵氧體片的介紹
    的頭像 發(fā)表于 12-04 10:52 ?425次閱讀
    <b class='flag-5'>關于</b>NFC鎳鋅鐵氧體片的<b class='flag-5'>介紹</b>

    控制流和函數(shù)調用的精細調整

    特性,避免不必要的計算。 函數(shù)調用涉及開銷,因為它需要保存當前執(zhí)行環(huán)境并跳轉到新的執(zhí)行環(huán)境。減少函數(shù)調用,尤其是在頻繁執(zhí)行的循環(huán)中,可以顯著提高性能。 對于簡單且頻繁調用的函數(shù),使用內聯(lián)函數(shù)特性,可以避免函數(shù)
    發(fā)表于 11-14 06:32

    求助,關于C代碼中的printf打印的疑問求解

    在使用E203 testbench執(zhí)行附帶的benchmark測試用例時候,得到如下打印信息: CPU驗證小白一枚,有個問題不是很理解:黃色框框內的字符看起來應該是C代碼中的printf語句
    發(fā)表于 11-10 07:54

    Python調用API教程

    兩個不同系統(tǒng)之間的信息交互。在這篇文章中,我們將詳細介紹Python調用API的方法和技巧。 一、用Requests庫發(fā)送HTTP請求 使用Python調用API的第一步是發(fā)送HTTP請求,通常
    的頭像 發(fā)表于 11-03 09:15 ?928次閱讀

    RVMCU課堂「12」: 手把手教你玩轉RVSTAR—外部中斷篇

    exti_key_interrupt實驗的main.c函數(shù)源碼。其中,main函數(shù)調用的“ECLIC_Register_IRQ”函數(shù)就是中斷配置函數(shù)。截取ECLIC初始化函數(shù)代碼如下:[size=0.85em]/* ECLIC
    發(fā)表于 10-31 07:39

    關于系統(tǒng)鏈接腳本的介紹

    起來后所處于的地址,程序中的相對尋址都會遵從此虛擬地址。 四、關于ITCM和DTCM(若使用FLASH下載模式) (1) 代碼段上載到ITCM,ITCM起始地址(0x80000000)存儲的代碼就是主函數(shù)的入口。 (2)
    發(fā)表于 10-30 08:26

    京東商品詳情接口實戰(zhàn)解析:從調用優(yōu)化到商業(yè)價值挖掘(附避坑代碼

    本文深入解析京東商品詳情接口jd.union.open.goods.detail.query,涵蓋核心特性、權限限制、關鍵參數(shù)及調用避坑指南。通過實戰(zhàn)代碼演示數(shù)據(jù)采集、促銷解析與商業(yè)分析,助力開發(fā)者高效獲取價格、庫存、評價等全維度數(shù)據(jù),挖掘供應鏈與定價策略價值,顯著提升對
    的頭像 發(fā)表于 10-10 09:28 ?860次閱讀
    京東商品詳情接口實戰(zhàn)解析:從<b class='flag-5'>調用</b>優(yōu)化到商業(yè)價值挖掘(附避坑<b class='flag-5'>代碼</b>)

    CW32L012實現(xiàn)外部flash下載算法

    外部flash或者內置的片上flash,都是編譯器通過調用寫好的FLM文件來實現(xiàn)下載,單片機內部的安裝pack包就會有(官方實現(xiàn)),外部flash的情況比較復雜,例如用的哪種flash,用的什么接口,都是不定的,沒有辦法寫好一個
    的頭像 發(fā)表于 10-09 17:38 ?1672次閱讀
    CW32L012實現(xiàn)<b class='flag-5'>外部</b>flash下載算法

    GCC編譯器,怎么才能實現(xiàn)c文件中未被調用的函數(shù),不會被編譯呢?

    GCC編譯器,怎么才能實現(xiàn)c文件中未被調用的函數(shù),不會被編譯?有什么編譯選項可以設置嗎? 移植代碼,有些函數(shù)沒被調用的函數(shù)想留在代碼里,但不
    發(fā)表于 09-28 12:25

    Stateflow模型測試典型問題分享——不可達的分支

    問題描述: Stateflow條件存在互斥情況,導致部分工況不可達。 造成的影響: 較多的互斥結構將無法滿足ASIL C/D等級覆蓋度要求,并存在安全隱患。
    的頭像 發(fā)表于 09-23 16:33 ?654次閱讀
    <b class='flag-5'>Stateflow</b>模型測試典型問題分享——不可達的分支

    關于LABVIEW 生成EXE后 動態(tài)調用外部VI的問題

    ADD.VI :是我需要調用的VI 應用程序.EXE :是我項目里面把 \"調用DLL.VI\" 生成的exe文件 我沒有編譯exe前去調用add.VI是沒問題的,但是我生成
    發(fā)表于 07-30 14:22