Windows的MATLAB中用C语言写SFunction的一些坑
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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用