溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MATLAB中MEX文件的示例分析

發(fā)布時間:2021-12-30 17:32:22 來源:億速云 閱讀:181 作者:小新 欄目:互聯(lián)網(wǎng)科技

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

正文:

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

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

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

//mex源文件的結(jié)構(gòu),標準寫法
#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ù)的操作都是通過指針的方式進行的。

指向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)境)中進行調(diào)試。注:
我自己使用的是VS2017,下文指的vs即默認是vs2017,其他版本使用上稍有差異而已。

舉個例子,步驟如下:

1)編寫我們的測試文件

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

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

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

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

MATLAB中MEX文件的示例分析

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

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

5)在matlab的命令行窗口,運行mex 文件。
運行結(jié)果,會如我們所設(shè)置的那樣,在斷點處暫停,因此可以 采用這種方法進行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)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI