【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(一)
来源:互联网 发布:如何看淘宝价格曲线 编辑:程序博客网 时间:2024/05/16 20:30
1、这篇教程参考如下:
参考1:举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤
(PS:这篇参考用得是老版本的MATLAB上的Coder,步骤和我这个不同,有兴趣的可以参考)
2、这篇文章用的实例不会太简单,也不会太复杂,力求可以把问题说清楚。
3、本着尊重原创,大家转载的时候请注明出处,此教程编写不易啊~~
下面开始介绍:MATLAB R2015b的Coder工具使用实例(一)
一、背景
MATLAB的强大之处我就不多说了,语法简答,顾虑少,我们很多算法可以用MATLA来编写与验证。C++的威力我也不多说了,计算效率很高。
但是!!MATLAB计算效率低下,无法用于实际应用中,比如嵌入式系统。C++语法严格,顾虑极多,因此让许多工程人员头疼。美国MathWorks公司貌似意识到了这个问题,自MATLAB2011开始,有了一款附于MATLAB的强大神器——Coder,它的作用:可以将你的复杂的MATLAB代码近乎自动地转换成C\C++代码,完美程度达99%。至于为什么不是100%,下面的演示会体现这一点。
二、运行环境
1、win7_32位系统;(64位亦可)
2、Microsoft Visual Studio 2008;(安装路径:C:\Program Files\Microsoft Visual Studio 9.0)(其他版本亦可)
3、MATLAB R2015b。(安装路径:C:\Program Files\MATLAB\R2015b)(注意!!不推荐其他版本,就用这版!!如果以后有了新版本的MATLAB问世,那就尽量用最新版)
三、详细步骤
(1)
在MATLAB R2015b中,创建一个名为“test.m”的函数文件,代码如下
function [A,B] = test( mark,num,array )%输入参数中,mark、num是标量,array是向量a=ones(1,5);b=zeros(1,5); if mark==0 for i=1:num if i==1 A=a; B=b; else A=[A,a]; B=[B,b]; end end else for i=1:num if i==1 A=a; B=b; else A=[A,array]; B=[B,array]; end end end end代码实现的功能很清晰,我就不多说了。现在,我们来用MATLAB R2015b自带工具Coder3.0来将上面的代码转化成C++代码。
(2)新建一个脚本文件main.m,用来试运行上述代码【这一步一定要做,不能轻视】
脚本文件main.m中的代码如下
[A,B]=test( 3,4,[1 2 5 6 8] )
A =
1 至 18 列
1 1 1 1 1 1 2 5 6 8 1 2 5 6 8 1 2 5
19 至 20 列
6 8
B =
1 至 18 列
0 0 0 0 0 1 2 5 6 8 1 2 5 6 8 1 2 5
19 至 20 列
6 8
结果没有问题。接下来开始真正的转换工作。
(3)
在命令行窗口输入
mex -setup %"-"前有空格,请注意!
耐心等待,【出现】:
MEX 配置为使用 'Microsoft Visual C++ 2008 Professional (C)' 以进行 C 语言编译。警告: MATLAB C 和 Fortran API 已更改,现可支持
包含 2^32-1 个以上元素的 MATLAB 变量。不久以后,
您需要更新代码以利用
新的 API。您可以在以下网址找到相关详细信息:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。
要选择不同的 C 编译器,请从以下选项中选择一种命令:
lcc-win32 mex -setup:'D:\Program Files\MATLAB\R2015b\bin\win32\mexopts\lcc-win32.xml' C
Microsoft Visual C++ 2008 Professional (C) mex -setup:C:\Users\WangXu\AppData\Roaming\MathWorks\MATLAB\R2015b\mex_C_win32.xml C
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++
mex -setup FORTRAN
【单击】“mex -setup C++ ”
【出现】:
MEX 配置为使用 'Microsoft Visual C++ 2008 Professional' 以进行 C++ 语言编译。
警告: MATLAB C 和 Fortran API 已更改,现可支持
包含 2^32-1 个以上元素的 MATLAB 变量。不久以后,
您需要更新代码以利用
新的 API。您可以在以下网址找到相关详细信息:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。
(4)
在命令行窗口输入
coder耐心等待,【出现】如下的MATLAB Coder欢迎界面。
然后点击上图中蓝色圆圈处,选择我们建立的test.m文件,得到如下图
再点击上图蓝色圈的“Next”,得到下图
然后点击上图中蓝色圆圈处,选择我们建立的main.m文件,得到如下图
然后点击上图中蓝色圆圈处,得到如下图
上图的红色框区就是用来设置输入参数mark、num以及array的属性的。例如array可以设置为固定长度、有限可变长度以及无限可变长度。如下图
(固定长度:5)
(有限可变长度,最长为5)
(无限可变长度)
具体的设置方法也非常简单,如下图的红色框区
在这里,我们设置为有限可变长度,最长为5。
接下来点击右下角的“Next”,得到如下图
然后点击上图中蓝色圆圈处,开始自动检查问题。【你的MATLAB运行没问题,不代表往C++代码转换的时候没问题,毕竟Coder工具还不成熟】
最终,确实检查出了问题。。。如下图
如上图的错误的描述——“Variable 'A' is not fully defined on some execution paths.”说明问题出在test.m文件的变量A上。
经过分析,大致是这么个原因:
变量A或者B没有预分配大小,这在C++中是不允许的,因此,稍微修改下test.m文件的代码,最终代码如下:
function [A,B] = test( mark,num,array )%输入参数中,mark、num是标量,array是向量a=ones(1,5);b=zeros(1,5);% 为A B预分配个内存大小A=ones(1,5);B=zeros(1,5); if mark==0 for i=1:num if i==1 A=a; B=b; else A=[A,a]; B=[B,b]; end end else for i=1:num if i==1 A=a; B=b; else A=[A,array]; B=[B,array]; end end end end
修改完成后,从第(3)步开始,将上述步骤再来一遍,就发现没有问题了,如下图:
点击“Next”,出现下图,标红色框的地方进行如下图的设置
注意,还没设置完。点击上图的“More Settings”,得到如下,标红色框的地方进行如下图的设置,然后点击“Close”。
最后点击“Generate”,耐心等待,最后出现如下图,说明转换成功。
现在进入MATLAB的如下目录:
X:\XXX\codegen\lib\test
例如我的是:
E:\kuaipan\Work\CSDN\新建文件夹\codegen\lib\test
可以看到如下文件:
那么这些文件怎么运用到VS环境下呢?这是有讲究的,且看下回分解:
【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(二)!
- 【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(一)
- 【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(二)
- Matlab Coder的使用
- 如何将MATLAB程序发布为独立的不依赖MATLAB环境可执行的程序包(基于Matlab R2015b版 )
- caffe+CUDA 8.0+matlab R2015b的安装过程
- Matlab(R2015b)添加工具箱
- Matlab学习者的福音,海量Matlab经典书籍下载
- 将matlab的.m文件打包为独立可执行程序.exe —— 基于Matlab R2015b
- 使用Matlab Coder将Matlab下的pinv函数转成C/C++
- Matlab coder 踩过的那些坑
- (一)MATLAB 的安装和使用
- Matlab 无论什么工程coder报错
- CentOS x64 安装Matlab R2015b
- Ubuntu14.04 + Matlab R2015b(crack)
- Ubuntu 16.04 安装Matlab R2015b
- ubuntu14.04 安装Matlab R2015b
- Ubuntu 16.04 安装Matlab R2015b
- matlab compiler & matlab coder
- JAVA基础集合框架(一)
- 【转稿】:农村孩子为什么没有春天
- 手记NO1
- jsp自动登录设计思路(相对来说比较安全)
- ListView异步加载图片方法和滚动优化
- 【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(一)
- <Java> File文件操作
- macbook 安装win8 双系统
- linux内核网络子系统
- 多例模式【Multition Pattern 】
- 使用PHP生成数据字典
- Android onLongClick事件触发的问题
- django cache的简单使用
- CentOS7.0下安装 mysql5.6