MATLAB中MEX文件的示例分析

小編給大家分享一下MATLAB中MEX文件的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

杭錦后ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

正文:

1.mex文件簡介
mex是matlab executable 的縮寫,意思是在matlab中可執(zhí)行。
通過C或者Fortan語言開發(fā),經(jīng)過編譯,生成的目標(biāo)文件能夠被M語言解釋器調(diào)用執(zhí)行。

mex文件的使用和m文件類似,但是優(yōu)先m文件執(zhí)行。

2.mex源文件的結(jié)構(gòu)

//mex源文件的結(jié)構(gòu),標(biāo)準(zhǔn)寫法
#include "mex.h"//必須加
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, 
  const mxArray *prhs[])
  {
  }

MATLAB中MEX文件的示例分析

如果說C/C++語言程序設(shè)計中的main函數(shù)提供了 操作系統(tǒng)和C語言子程序之間的接口。
那么mexFunction 函數(shù)的作用就是提供了MATLAB與C/C++子程序之間的接口。
#include “mex.h”//必須加。
mexFunction不是您調(diào)用的例程。
而是mexFunction是C中每個MEX函數(shù)都需要的網(wǎng)關(guān)函數(shù)的名稱。 調(diào)用MEX函數(shù)時,MATLAB?查找并加載相同名稱的相應(yīng)MEX函數(shù)。
然后,MATLAB在MEX函數(shù)中搜索名為mexFunction的符號。 如果找到一個,它將使用mexFunction符號的地址調(diào)用MEX函數(shù)。
如果MATLAB無法在MEX函數(shù)中找到名為mexFunction的例程,則會顯示一條錯誤消息。

4個參數(shù)分別用來輸出和輸入數(shù)據(jù):
nlhs 是輸出參數(shù)個數(shù);
plhs 是輸出參數(shù)指針;
指向期望的mxArray輸出參數(shù)的指針數(shù)組;
nrhs 是輸入?yún)?shù)個數(shù);
prhs 是輸入?yún)?shù)指針,
指向mxArray輸入?yún)?shù)的指針數(shù)組。
不要修改MEX文件中的任何prhs值。,
更改這些只讀mxArrays中的數(shù)據(jù)可能會產(chǎn)生不良的副作用。
注意:
對輸出和輸入?yún)?shù)的操作都是通過指針的方式進(jìn)行的。

指向mxArray輸入?yún)?shù)的指針數(shù)組。 不要修改MEX文件中的任何prhs值。 更改這些只讀mxArrays中的數(shù)據(jù)可能會產(chǎn)生不良的副作用。

3.調(diào)試mex文件
對于比較復(fù)雜的功能,并且是通過mex文件來實現(xiàn),在MATLAB環(huán)境中調(diào)試mex文件就比較麻煩,這時候我們應(yīng)該結(jié)合使用vs(C的開發(fā)環(huán)境)中進(jìn)行調(diào)試。注:
我自己使用的是VS2017,下文指的vs即默認(rèn)是vs2017,其他版本使用上稍有差異而已。

舉個例子,步驟如下:

1)編寫我們的測試文件

// demo_mextest.c#include "mex.h"//必須加void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])//mexFunction標(biāo)準(zhǔn)寫法{
   
   
   printf("hello mex world!\n");mexPrintf("hello mex world!\n");}

2)為了可以在vs中調(diào)試mex,進(jìn)行編譯,注意此處多了“-g”

%matlab 窗口運行結(jié)果>> mex demo_mextest.c -g
使用 'Microsoft Visual C++ 2017 (C)' 編譯。
MEX 已成功完成。

3)附加進(jìn)程
MATLAB中MEX文件的示例分析

MATLAB中MEX文件的示例分析

4)在VS中,對程序中設(shè)置斷點,以便觀察過程結(jié)果。

在VS中,設(shè)置斷點的方法,在想要設(shè)置斷點的代碼處,鼠標(biāo)右鍵,選擇斷點。
MATLAB中MEX文件的示例分析

5)在matlab的命令行窗口,運行mex 文件。
運行結(jié)果,會如我們所設(shè)置的那樣,在斷點處暫停,因此可以 采用這種方法進(jìn)行mex文件程序調(diào)試。

%matlab 窗口運行結(jié)果>> demo_mextest
hello mex world!hello mex world!

MATLAB中MEX文件的示例分析
另外,值得說明的是,在調(diào)試過程中,VS和MATLAB是關(guān)聯(lián)的,待代碼繼續(xù)運行結(jié)束,才可以再操作matlab,否則,在斷點處,MATLAB界面不響應(yīng)。

以上是“MATLAB中MEX文件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享題目:MATLAB中MEX文件的示例分析
當(dāng)前地址:http://muchs.cn/article32/ijogsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)云服務(wù)器、網(wǎng)站內(nèi)鏈、微信公眾號、外貿(mào)建站、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)