MATLAB  Coder? 可以从MATLAB?代码生成独立的、可读性强、可移植的C /C++代码。MATLAB Coder 支持程序控制结构,函数和矩阵操作。它可以生成MEX函数,该函数可以加速MATLAB代码的运行速度并且验证生成代码的属性。MATLAB Coder?结合 Simulink Coder?和 Embedded Coder?可以将含有MATLAB代码的Simulink?模型生成C代码,生成的C代码可以用来:

单独执行

与其他软件集成

加速仿真MATLAB算法

实现嵌入式系统

特点:

生成符合ANSI/ISO标准的C / C++ 代码;

可以对定点和浮点数学运算生成MEX函数;

可以利用工程管理工具来确定输入点和输入数据属性以及代码生成的配置选项;

可为变大小的数据提供静态或动态内存存储位置;

代码生成支持Communications System Toolbox?, DSP System Toolbox?, 和Computer Vision System Toolbox?许多函数和系统对象;

支持一般的MATLAB语言行为,包括矩阵操作,下标操作,程序控制语句(if,switch,for,while)以及结构体。

uid-29157886-id-3977883.html?_t=t

MATLAB Coder  工程管理界面(左)和代码生成报告(右),该报告显示了生成的C代码.

强大的功能

■   可生成代码的MATLAB 语言子集

MATLAB Coder可以针对某些MATLAB 语言生成代码,这些语言一般都是设计工程师在开发大型系统的算法时经常用到的。这些支持的子集包括超过400个操作符和MATLAB中的函数。

MATLAB Coder支持对Aerospace Toolbox,Image Processing Toolbox?和Signal Processing Toolbox?中的部分函数生成代码,而且支持对Communications System Toolbox?,Computer Vision System Toolbox?和DSP System Toolbox?中的系统对象生成代码。

MATLAB Coder支持开发算法时用到的大部分MATLAB语言,包括:

矩阵和数组:比如持续变量,全局变量,矩阵操作,N维数组,下标操作和帧

类和数据类型:比如复数, 整形数据匹配,单精度双精度,定点运算,字符,结构体,数值类和变长度数据

编程结构:比如MATLAB程序控制结构(if, for, while, switch)和数学运算,逻辑关系操作符

函数:比如函数句柄,子函数和部分MATLAB函数,变长度输入和输出声明列表和子函数的调用

■MATLAB Coder的应用

MATLAB Coder的应用通过使用MATLAB Coder,设计工程师可以在MATLAB中开发算法,然后生成可读性强和可移植的C/C++代码,利用该代码可以:

将MATLAB算法生成在PC机上可以运行的可执行文件;

可以通过用自动生成的MATLAB可执行文件(MEX函数)替换MATLAB代码来加快仿真速度,MEX函数就是调用编译好的C/C++代码;

可以将MATLAB算法作为一个编译好的库集成到其他的软件中;

可以在嵌入式处理器中执行和验证MATLAB算法。

uid-29157886-id-3977883.html?_t=t

MATLAB Coder应用情况

■从MATLAB中生成代码

将MATLAB语言转换成C代码在执行过程中需要确定一定的要求,MATLAB Coder可以在MATLAB语言环境中指导你完成这个过程。由于MEX函数需要调用编译好的C代码,所以可以通过生成MEX函数,然后在MATLAB中运行该函数来确保你的算法符合代码生成规则。MATLAB    Coder 生成一个报告,这个报告中会指出在从MATLAB算法到生成代码过程中必须改正的错误。通过不断的修正错误、生成MEX函数这种迭代过程直到MATLAB算法满足代码生成的要求,这时就可以生成C/C++的源代码或者MEX函数了。

C 或者C++源代码可以用来:

将MATLAB算法生成在PC机上可以运行的可执行文件;

创建一个库;

作为嵌入式代码运行。

MEX文件可以代替MATLAB代码被调用:

可以在MATLAB中验证编译后的代码

加速执行速度

uid-29157886-id-3977883.html?_t=t通过使用MATLAB Coder从MATLAB生成代码的三步迭代流程

■MATLAB Coder 、Simulink Coder和Embedded Coder

用于仿真的MATLAB  Function模块和代码生成可以让你将MATLAB算法生成算法集成到Simulink模型中。Simulink Coder可以将这些Simulink包含MATLAB代码的模型生成代码。

uid-29157886-id-3977883.html?_t=tSimulink中的雷达跟踪模型,这个模型使用MATLAB Function模块在这个模块中有用MATLAB编写的卡尔曼滤波算法

Embedded Coder可以针对支持的嵌入式处理器、面向目标的快速控制原型板,及微处理器的需要和微处理器生成代码,它提供了配置选项和可以更好的控制生成代码的函数、文件和数据的高级优化选项,因此它扩展了MATLAB Coder和Simulink Coder。Embedded Coder 提高了代码效率,并且能很方便的集成已有代码,数据类型和产品中的标定参数。

使用Embedded Coder生成的代码,可以导出到第三方的开发环境中,可以在嵌入式系统中自动创建可执行文件。生成的代码可以在处理器上执行用来验证性能,可以通过PIL仿真和代码剖析的方法来查看代码在硬件上的运行情况。

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。

使用MATLAB Coder产生代码的3个步骤:准备用于产生代码的MATLAB算法;检查MATLAB代码的兼容性(有些matlab代码语句并不能生成c/c++代码);产生最终使用的源代码或MEX。

利用MATLAB Coder生成c++代码,并在vs2008中验证:

一个简单的例子,两数相乘:

1、安装matlab2011a或者更新版本;

2、简单生成一个foo.m文件;

function c = foo(a, b)%#codegen

%This function muliplies a and b

c = a * b

其中,%#codegen可以防止出现警告错误

3、在命令窗口,输入mex -setpu,选中一个存在的编译器;

4、在命令窗口输入coder(图形界面),回车,弹出MATLAB Coder Project对话框;

5、在New选项卡Name中输入一个工程名foo.prj;点击Ok,弹出MATLAB Coder MEX Function对话框;

6、在Overview选项卡中,点击Add files,弹出对话框,选中foo.m打开;

7、单击变量a,选择Define by Example…,弹出MATLAB Coder Define by Example对话框,在MATLAB Expression中输入5,点击OK;同样变量b也进行相应操作,输入6;

8、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only;

9、点击More settings,GeneralàLanguage选择C++;Interface选项中去掉所有选项;Close;

10、点击Build,进行编译;点击View report,弹出Code Generation Report对话框,此时,变量a、b、c会显示相应的变量信息;

11、利用codeblocks建立一个控制台应用程序,将生成的相关文件foo.h、foo.cpp、rtwtypes.h、foo_types.h等文件拷到相关目录下并添加到应用程序中;

12、在foo.cpp文件中添加#include “stdafx.h”;

13、test.cpp文件中代码为:

#include "stdafx.h"

#include "foo.h"

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

double a = 0.0, b = 0.0, c = 0.0;

cin>>a>>b;

c = foo(a, b);

cout<

return 0;

}

一个复杂的例子,求一个数的n次方根:

1、  两个.m文件:

nrt.m:

function [nth_rt, iterations, hstry] = nrt(varargin)%#codegen

%This function will use a Newton Search Technique to find

%the nth root of a number, a, to the tolerance, tol.

%The square root

% nrt(10, 2), or nrt(10, 2, 1e-9)

%The "n" root

%nrt(10, n), or nrt(10, n, 1e-9)

a = varargin{1};

n = varargin{2};

if nargin ~= 3

tol = 1e-9;

else

tol = varargin{3};

end

if a < 0

nth_rt = 0;

iterations = 0;

hstry = 0;

else

[nth_rt, hstry] = newtonSearchAlgorithm(a, n, tol);

iterations = length(find(hstry ~= 0));

%iterations = sum(hstry ~= 0);

end

newtonSearchAlgorithm.m:

function [x, h] = newtonSearchAlgorithm(b, n, tol) %#codegen

%Given, "a", this function finds the nth root of a

%number by finding where: x^n-a = 0

coder.inline('never'); %使其生成一个单独的c++文件

notDone = 1;

aNew    = 0; %Refined Guess Initialization

a       = 1; %Initial Guess

cnt     = 0;

h = zeros(50, 1);

h(1)    = a;

while notDone

cnt = cnt + 1;

[curVal, slope] = f_and_df(a, b, n); %  square

yint = curVal - slope * a;

aNew = -yint / slope; %The new guess

h(cnt) = aNew;

if (abs(aNew-a) < tol) %Break if it's converged

notDone = 0;

elseif cnt > 49 %after 50 iterations, stop

notDone = 0;

aNew = 0;

else

a = aNew;

end

end

x = aNew;

function [f, df] = f_and_df(a, b, n)

%Our function is f=a^n-b and it's derivative is n*a^(n-1).

f  = a^n-b;

df = n*a^(n-1);

2、  在命令窗口输入coder(图形界面),回车,弹出MATLAB Coder Project对话框;

3、在New选项卡Name中输入一个工程名nrt.prj;点击Ok,弹出MATLAB Coder MEX Function对话框;

4、在Overview选项卡中,点击Add files,弹出对话框,选中nrt.m打开;

5、添加三个输入,分别为10、2、1e-9;两个输入也可以;

6、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only;

7、点击More settings,General-->Language选择C++;Interface选项中去掉所有选项;Close;

8、点击Build,进行编译;点击View report,弹出Code Generation Report对话框;

9、利用vs2008建立一个控制台应用程序,将生成的相关文件nrt.cpp、nrt.h、newtonSearchAlgorithm.cpp、newtonSearchAlgorithm.h、nrt_types.h、rtwtypes.h拷到相关目录下并添加到应用程序中;

10、分别在nrt.cpp、newtonSearchAlgorithm.cpp文件中添加#include “stdafx.h”;

11、test.cpp文件中代码为:

#include "stdafx.h"

#include "nrt.h"

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

double varargin_1 = 0, varargin_2 = 0, varargin_3 = 1e-9;

cin>>varargin_1>>varargin_2;

double nth_rt = 0, iterations = 0;

double hstry_data[50] = {0};

int hstry_sizes[1] = {0};

nrt(varargin_1, varargin_2, varargin_3, &nth_rt, &iterations, hstry_data, hstry_sizes);

cout<

cout<

cout<

for (int i=0; i<50; i++)

{

cout

cout<

return 0;

}

matlab rtw 生成c代码,MATLAB Coder ——从MATLAB代码生成C/C++代码相关推荐

  1. C++包扩展_利用 MATLAB Coder 将M代码生成C/C++代码

    利用MATLAB Coder将MATLAB代码生成C/C++代码​mp.weixin.qq.com MATLAB Coder 可以将MATLAB代码生成工程中常用的嵌入式或其他硬件平台的C或者C++代 ...

  2. 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. 使用MATLAB Coder产生代码的3个步骤:准备用于产生代码的MATLAB算法:检查MATLAB代码的 ...

  3. 基于MATLAB Coder将matlab代码转换成C代码

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码.本文基于matlab2015a编制,但是也适用于matlab 2014~2016的版本. 1. 使用MATL ...

  4. matlab compiler 与matlab coder 区别,MATLAB编译器与MATLAB编码器

    MATLAB编译器将您的MATLAB代码(保留为MATLAB .m代码)进行encryption和归档,并将其打包为一个精简的可执行文件(.exe或.dll)包装器. 这是随MATLAB编译器运行时( ...

  5. matlab中codegen是什么,从 MATLAB 代码生成 C/C++ 代码。 - MATLAB codegen - MathWorks 中国...

    -c生成 C/C++ 代码,但不调用 make 命令. -config:dll使用默认配置参数生成动态 C/C++ 库. -config:exe使用默认配置参数生成静态 C/C++ 可执行文件. -c ...

  6. matlab 生成plc程序,利用MATLABsimulink的自动代码生成工具开发PLC程序..docx

    利用MATLABsimulink的自动代码生成工具开发PLC程序. 利用MATLAB/simulink的自动代码生成工具开发PLC程序MATLAB之控制系统 2010-07-07 15:17:43 阅 ...

  7. OpenCV图像序列生成视频,MATLAB图像生成avi视频,image2video。

    讲解如何利用OpenCV合成avi格式视频. 在处理图像和视频的过程中,通常会遇到将视频转换成图像处理,或者将处理完的图像合成原视频.在基于视频的处理过程中,通常都是先将视频转换为每一帧图像,然后基于 ...

  8. MATLAB实战系列(三)- 如何将MATLAB直接转成C/C++代码

    前一段时间在工作中遇到这样一个实际问题,项目主体部分是用C++写的,但其中有一小部分算法是用MATLAB写的.于是乎,我第一想法是如何用C++把MATLAB中的代码实现出来. 这时,一位前辈语重心长地 ...

  9. 基于MATLAB的拼图游戏设计(图文详解,附完整代码)

                                                                               基于MATLAB的拼图游戏设计 内容摘要:MATL ...

  10. 论文写作:MATLAB+Visio生成不失真的PDF图像,同时解决MATLAB图像plot绘制有白边的问题

    这一周花了三天时间,才将论文中的图像生成不失真的PDF图片(我以为的),我的判断标准是将图像放大或者缩小足够倍数后依然清晰可见,以MNIST数据库中的图像为例,方法如下: 选择 "文件--导 ...

最新文章

  1. linux存储--虚拟内存详解MMU、页表(十)
  2. 性能不同的服务器可以组成云,多个服务器组成云
  3. Spring MapFactoryBean例子
  4. js实现字体和容器宽高随窗口改变
  5. 在矩池云上复现 CVPR 2018 LearningToCompare_FSL 环境
  6. DEDECMS之二 如何修改模板页
  7. Flink Forward Asia 2021 延期,线上相见
  8. sql语句如何获得当前日期
  9. Stardock Fences v3.1.0.5 桌面整理、图标分类工具
  10. 计算机建模步骤,cad建模步骤
  11. 莫比乌斯反演 平衡规划 双端栈 双端队列 等价类等
  12. empty怎么发音_empty怎么读?empty是什么意思?
  13. kmp算法严蔚敏C语言,【菜鸟福音】KMP算法简单理解(从严蔚敏老师的《数据结构》出发)...
  14. Could not inflate Behavior subclass
  15. Python期末复习
  16. 基于stm32的智能小车设计(一)
  17. js实现搜索关键字高亮
  18. LDA and QDA
  19. 儒猿秒杀季!互联网大厂的IM即时通信系统项目实战
  20. 数据结构课设——汉诺塔游戏演示

热门文章

  1. 南师大GIS考研数据库2018年第三题
  2. 企业微信开发之判断当前入口是PC端企业微信还是PC端浏览器。或者是APP端企业微信
  3. Calendar计算两个日期相差几个月
  4. html设计渐变背景,HTML网页设计之div渐变背景色
  5. kotlin学习---Field
  6. 鱼眼相机外参的计算和图像的透视变换
  7. HTML中空格怎么打出来?
  8. DWM 层 -- 访客 UV 计算
  9. MATLAB图形句柄
  10. Word2010中插入多级列表编号将默认标题样式变成多级编号