Windows的MATLAB中用C語言寫SFunction的一些坑
阿新 • • 發佈:2018-07-09
mingw 編譯器 init 64bit -i tro ... -o env
1.測試環境:
- 操作系統:Windows 10, 64bit
- 編譯器:MinGW64
- 32位系統請下載對應的32位版本
- MATLAB2017a
- 2017a之後會略有不同
2. 配置環境與流程:
下載編譯器MinGW64,對於64位系統而言,需要下載個安裝器,可以安裝相應版本的gcc編譯器,我選擇的是gcc-4.9.4,在測試環境中可以正常運行
- 下載下來的安裝器是mingw-w64-install,安裝時註意選擇64位,同時安裝完了還有一個坑:空格。
- 改下載器默認的安裝路徑時"C:\Program Files\mingw-w64\x86_64-4.9.4-win32-seh-rt_v5-rev0\mingw64"是包含有空格的,MATLAB並不能準確識別,所以可以把mingw64移動到不含空格的路徑下,比如"C:\mingw64"。
驗證一下:
setenv(‘MW_MINGW64_LOC‘,‘C:\mingw64‘) % 先配置環境哦 mex -setup
輸入如下圖所示:
這樣MinGW編譯器就配置好了。
3. 快捷編譯:
setenv(‘MW_MINGW64_LOC‘,‘C:\mingw64‘) myFunctionName = ‘SFunctionName‘ def = legacy_code(‘initialize‘); def.SFunctionName = myFunctionName ; % 註意,輸入和輸出的變量的名稱只能是u1,u2...和y1,y2... def.OutputFcnSpec = ‘double y1 = add_2(double u1, double u2)‘; % 設置用到的頭文件或者源文件 def.HeaderFiles = {‘add_2.h‘}; def.SourceFiles = {‘add_2.c} def.InitializeConditionsFcnSpec = ‘buffer_init()‘; legacy_code(‘sfcn_cmex_generate‘, def); legacy_code(‘compile‘, def) ;
以上腳本可以在MATLAB中快捷編譯,並且生成Simulink可用的文件,在Simulink中加入S-Function模塊,並且將名字設置為"add_2"即可。
add_2.c就可以直接寫一個兩個數相加的程序驗證一下就好了; add_2.h寫個函數聲明也就可以了。
// add_2.c #include "add_2.h" double add_2(double a, double b){ return a + b ; } // add_2.h #ifndef ADD_2_H #define ADD_2_H double add_2(double a, double b); #endif
4. 參考
- Mathwors關於空格的說明
- MATLAB2017b及其之後如何設置
- 感謝印度小哥的視頻解說
Windows的MATLAB中用C語言寫SFunction的一些坑