a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 測試測量 > 設計應用 > 在MATLAB環境中調用DLL對硬件資源訪問的方法

在MATLAB環境中調用DLL對硬件資源訪問的方法

作者: 時間:2013-07-24 來源:網絡 收藏

摘要:是一款高性能的科學與工程計算軟件,具有強大的數值計算和分析能力,但其對硬件的能力較弱。在中實現對硬件資源的直接可以極大的方便對數據的處理及算法的驗證,基于這種目的提出一種擴展硬件的方法,通過MATLAB外部函數接口調用第三方器件商提供的動態鏈接庫導出函數,在MATLAB平臺下實現對一般硬件的訪問,并具體介紹了該方法在氣壓高度計原型系統設計中的應用。該方法簡化了MATLAB與硬件的數據交互,對于原型系統設計和算法的驗證提供了一種有效的手段。
關鍵詞:MATLAB;動態鏈接庫;硬件訪問;數據采集

MATLAB是美國MathWorks公司開發的高性能的科學與工程計算軟件,憑借其強大的科學計算和繪圖功能、大量穩定可靠的算法庫和簡潔高效的編程語言,被科技工作者們廣泛應用于自動控制、數學運算、信號分析、圖像處理等各行各業。盡管MATLAB本身是一個完整的、自成體系的編程和數據處理,但由于語言的特性使其訪問硬件的能力相對較差,這在一定程度上限制了它的使用。對于那些涉及復雜算法同時又需要對硬件資源進行訪問的系統,一般的做法是在一個通用的編程平臺(如Visual C++、Visual Basic、Delphi等)上實現對硬件資源的訪問,而后調用MATLAB算法對數據進行處理。這種方法優點是通用性好,程序運行效率高,適用大多數場合,但對開發人員編程能力有較高要求,開發周期較長。在一些需要快速的驗證模型和算法的場合,為充分發揮MATLAB強大的數值計算能力,以MATLAB作為主開發平臺來得更為合適。隨著模塊化的設計思想在越來越多的產品中得到體現,器件生產廠商們一般都會提供該產品的二次開發函數庫,方便了開發者們對硬件操作的同時,也使得MATLAB通過外部程序接口實現對硬件的訪問成為可能。
文中具體論述一種基于動態鏈接庫調用實現MATLAB訪問一般硬件的方法,并將該方法用于對高精度氣壓傳感器MS5803的數據采集,實現了MATLAB與硬件的無縫結合,極大的方便了數據的后續處理。

1 動態鏈接庫
在具體闡述MATLAB下調用動態鏈接庫函數訪問外部硬件之前,有必要對動態鏈接庫做簡要介紹。動態鏈接庫英文為Dynamic Linka ble Library,縮寫,最初是為了解決代碼共享的問題而提出的.通俗的理解可以把看成一種倉庫,它提供一些可以直接拿來使用的變量、函數或類。動態鏈接庫可以使用不同編程語言來編寫,只要符合標準即可。為了加深對動態鏈接庫函數調用的理解,下面以C/C++語言為例簡要介紹動態鏈接庫的編寫步驟。首先介紹兩組關鍵字:
1)_declspec(dllimport)
這組關鍵字表示從中導入函數或者數據,一般用在DLL對應的頭文件中。
2)_declspec(dllexport)
這組關鍵字表示從DLL中導出函數或者數據,一般用在DLL對應的工程文件中。
編寫動態鏈接庫函數的方法與編寫一般函數的方法基本相同,只不過要對庫中的可導出函數進行必要的申明。下面以VC環境下一個最簡單的DLL工程dll_test進行說明,工程包含dll_test.h和dll_test.cpp兩個文件。
a.jpg
編譯上述dll_test工程即可得到動態鏈接庫dll_test.dll(在Debug或Release目錄下),此動態鏈接庫實現了add和sub函數的功能。在解決一些實際問題過程中,有時會遇到只有DLL而沒有與之相對應的頭文件的情況,而MATLAB在調用DLL文件中的函數之前,必須具備頭文件中的函數聲明才行,這樣根據上述DLL的編寫規范可以很容易的編寫出與所調用的DLL相對應的頭文件。

2 MATLAB調用C/C++動態鏈接庫
從Matlab6.5(R13)起,Matlab提供了對動態連接庫DLL文件的接口。利用這個接口,可以在Matlab中調用動態連接庫導出的函數。MAT LAB加載和使用動態鏈接庫函數僅通過7~8個函數就可以實現,只要掌握這些函數的使用方法,就掌握了加載和應用動態鏈接的基本方法,從而可以在MATLAB平臺下輕松實現對硬件的訪問。
利用MATLAB共享庫接口實現對外部DLL庫的調用主要有以下幾個步驟。
1)加栽動態鏈接庫文件
在使用動態鏈接庫之前,必須將所需的動態鏈接庫加載到MATLAB工作空間中,之后MATLAB才能調用動態庫中的函數。函數lodalibrary用于加載動態鏈接庫,其使用語法如下:
loadlibrary(‘shdib’,‘hfile’)
loadlibrary函數有兩個輸入參數,參數shrlib表示庫文件的名稱,參數hfile為對應庫的C語言頭文件,C語言的頭文件用于向MATLAB提供基本的函數說明。下面以一示例說明loadlibrary的用法,在命令提示窗口中輸入如下命令:
>>loadlibrary(‘dll_test’,‘dll_test.h’) (1)
通過以上命令即將dll_test.dll加載到MATLAB工作空間中。
2)瀏覽動態庫中的函數
成功加載動態鏈接庫后便可調用庫中提供的函數。與函數使用類似,在調用函數之前首先要明確函數各輸入輸出參數的含義及數據類型。一般情況下動態庫編寫者會提供相應函數的幫助文檔,以便用戶理解函數的含義并對其進行調用。動態鏈接庫大多使用C或者C++語言編寫,然而標準的C或C++數據類型與MATLAB所使用的數據類型不盡相同,因此調用函數前首先要弄清被調用函數參數對應于MATLAB環境下的數據類型。使用函數libfunctions可在MATLAB環境下查看動態庫中函數的聲明,并將原C函數中參數類型以對應MATLAB參數類型顯示,之后便能正確的按照MATLAB語法規則進行調用。libfunctions用法如下:
libfunctions(‘libname’,‘-full’)
參數libname為已加載到MATLAB工作空間的動態庫文件名,-full為可選參數用于輸出函數的詳細說明。
>>libfunctions(‘dll_test’,‘-full’) (2)
輸入語句(2)后命令行中會顯示所有dll_test庫中的函數,如下:
Functions in library dll_test:
int32 add(int32,int32)
int32 sub(int32,int32)
3)調用動態庫中的導出函數
明確了動態庫中函數的參數類型后,便可利用MATLAB提供的calllib接口函數對庫中函數進行調用。calllib函數使用方法如下:
[x1,…,xN]=calllib(‘libname’,‘funcname’,arg1,…,argN)
參數libname表示被調用函數所在的庫文件名,funcname為被調用的函數名稱,arg1,…,argN為函數funename的輸入參數,x1,…,xN為函數funcname的返回值。以下為dll_test.dll中add函數的調用示例:
>>calllib(‘dll_test’,‘add’,1,2)
ans=
3
4)卸載動態鏈接庫
當不再需要對動態庫中的函數進行訪問后,應及時將動態庫從MATLAB工作空間中卸載。與加載動態庫類似MATLAB也提供對應的卸載動態庫的命令unloadlibrary,例如:
>>unloadlibrary(‘dll_test’)
通過以上4步便可實現在MATLAB環境下對動態鏈接庫導出函數的調用。在實際應用中通過調用硬件商提供的動態鏈接庫或者將其提供的API函數編譯為動態鏈接庫,便可實現在MATLAB平臺下實現對硬件資源的訪問。

c++相關文章:c++教程



上一頁 1 2 下一頁

關鍵詞: MATLAB DLL 環境 訪問

評論


相關推薦

技術專區

關閉