MATLAB Coder的简单使用及心得

前言

MATLAB® Coder™ 可从 MATLAB 代码生成适用于各种硬件平台(从桌面计算机系统到嵌入式硬件)的 C 和 C++ 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作为源代码、静态库或动态库集成到您的工程中。生成的代码是可读且可移植的。您可以将它与现有 C 和 C++ 代码及库的关键部分结合使用。您还可以将生成的代码打包为 MEX 函数以在 MATLAB 中使用。

与 Embedded Coder® 结合使用时,MATLAB Coder 可提供代码自定义、特定于目标的优化、代码可追溯性以及软件在环 (SIL) 和处理器在环 (PIL) 验证。

要将 MATLAB 程序部署为独立应用程序,请使用 MATLAB Compiler™。要生成与其他编程语言集成的软件组件,请使用 MATLAB Compiler SDK™。

以下将陈述我使用MATLAB Coder将 .m 文件转化成 .c 文件的过程

首先,我是新手,我的学习过程是:

1.查看帮助:前三个都是应用程序索引,您可以通过他们查找到关于你想使用的APP的功能介绍及注意。第四个是视频网站,可以选择中文语言观看相关APP使用。
2.借助视频网站:哔哩哔哩是一个不错的大学软件doge,其次如果您的英语水平不错,我这里推荐一个国外的视频网站:https://yarpiz.com/ (高质量MATLAB网站)。
3.浏览论坛:CSDN、知乎、评论区等等…(https://www.ilovematlab.cn/forum.php?mod=home ,这是MATLAB中文站)

OK呀,现在开始:

第一步:准备好软件和编译器

首先,中转站MATLAB Coder肯定要准备好;其次,请在命令窗口输入mex -setup,查看是否MATLAB编译器选择正确(你所要最终转换的C/C++等编译器环境),一般MATLAB默认应该是C语言(自带),如果未安装编译器可以点击“安装 MinGW-w64 编译器”,跳转到安装教程(我这是没有账号,下载不了,这里有一种方法,可以直接到它官网下载:MinGW-w64,然后重启MATLAB应该就行了)

注意:版本高低问题,可能会导致无法编译或转换

第二步:准备好MATLAB程序

新建一个函数,编译好你所需的程序,我这里就简单选择加法运算了。编好保存,形成 .m文件

在这里插入图片描述

第三步:使用MATLAB Coder

Select:找到 .m文件 选上

在这里插入图片描述

Define Input Types:定义你的输入变量类型

这里开始可能就会出现一些问题了,这里也有一个文件选择。
方案一:编译一个调试文件(调试你之前编译的.m文件程序)
方案二:将你的 .m文件复制到 MATLAB / 你的MATLAB版本号 / toolbox / dsp / dsp 路径下
这个路径里面应该是存放的MATLAB函数库,也有许多 .m 文件。复制完后,你会发现你在命令行窗口可以运行你编译的 .m 文件了(我感觉这也是调试文件,但只能调试1次)
这两个方案都可以自动定义你的输入变量类型。
方案三:手动定义输入变量类型
其实,自动定义完,你也要检查变量类型
如果,您想了解更多:https://ww2.mathworks.cn/help/coder/ug/autofilling-input-typestitle.html

在这里插入图片描述

Check for Run-Time Issues:检查运行时间段的问题

这里如果上一步未选择文件就不能检查了(其实可以不检查,只要你的Function没编错),也就是你选择了方案三。
在这里插入图片描述

检查完毕,无报错,若有报错可根据错误来解决。

在这里插入图片描述
运行结果正确
在这里插入图片描述

Generate Code:生成代码

由于我没下载编译器,就默认C语言了
这里More Settings可以根据需要取消一些选项,可以减少文件生成。
可以参照这位前辈:https://www.cnblogs.com/noah0532/p/9491195.html
在这里插入图片描述
代码生成成功
在这里插入图片描述
MATLAB Coder使用结束
在这里插入图片描述

第四步:修改代码

由于,我编写的程序简单,不需要将所有文件都选入,我就将函数名文件的 .c 和 .h 选入(已经包含了我的加法功能)。这里可以看到一些无用的头文件引用,我将他们剔除。
在这里插入图片描述

/*
 * File: addition.c
 *
 * MATLAB Coder version            : 3.1
 * C/C++ source code generated on  : 07-Apr-2024 22:03:10
 */

/* Include Files */
#include "rt_nonfinite.h"
#include "addition.h"

/* Function Definitions */

/*
 * ADDITION 对两个数字进行加法运算
 *    SUM = ADDITION(NUM1, NUM2) 对NUM1和NUM2进行加法运算,返回它们的和
 * Arguments    : double num1
 *                double num2
 * Return Type  : double
 */
double addition(double num1, double num2)
{
  double sum;
  sum = num1 + num2;

  /*  执行加法运算 */
  return sum;
}

/*
 * File trailer for addition.c
 *
 * [EOF]
 */

在这里插入图片描述

/*
 * File: addition.h
 *
 * MATLAB Coder version            : 3.1
 * C/C++ source code generated on  : 07-Apr-2024 22:03:10
 */

#ifndef ADDITION_H
#define ADDITION_H

/* Include Files */
#include <stddef.h>
#include <stdlib.h>
#include "rtwtypes.h"
#include "addition_types.h"

/* Function Declarations */
extern double addition(double num1, double num2);

#endif

/*
 * File trailer for addition.h
 *
 * [EOF]
 */

第五步:完善程序代码

这里要注意,MATLAB Coder只是将MATLAB中的函数转化成了C语言代码,并没有可执行性。因此,我们需要另外编写程序入口。

在这里插入图片描述
这是.h修改后

/*
 * File: addition.h
 *
 * MATLAB Coder version            : 3.1
 * C/C++ source code generated on  : 07-Apr-2024 22:03:10
 */

#ifndef ADDITION_H
#define ADDITION_H

/* Include Files */
#include <stddef.h>
#include <stdlib.h>


/* Function Declarations */
extern double addition(double num1, double num2);

#endif

/*
 * File trailer for addition.h
 *
 * [EOF]
 */

这是.c修改后

#define _CRT_SECURE_NO_WARNINGS 1
/*
 * File: addition.c
 *
 * MATLAB Coder version            : 3.1
 * C/C++ source code generated on  : 07-Apr-2024 22:03:10
 */

/* Include Files */

#include "addition.h"
#include<stdio.h>
int main()
{
	double num1 = 1.0;
	double num2 = 1.0;
	double sum = 0.0;
	scanf("%lf %lf", &num1, &num2);
	
	sum = addition(num1, num2);
	printf("%f", sum);
	
}

/* Function Definitions */

/*
 * ADDITION 对两个数字进行加法运算
 *    SUM = ADDITION(NUM1, NUM2) 对NUM1和NUM2进行加法运算,返回它们的和
 * Arguments    : double num1
 *                double num2
 * Return Type  : double
 */
double addition(double num1, double num2)
{
  double sum;
  sum = num1 + num2;

  /*  执行加法运算 */
  return sum;
}

/*
 * File trailer for addition.c
 *
 * [EOF]
 */

程序运行成功,加法功能成功实现。
在这里插入图片描述
以上便是我简单使用了。
接下来,简单谈谈我的心得:对于陌生事物的学习,我们要尽可能的去直视问题,不能逃避。比如,当您在查看相关资料时,可能因为语言障碍,无法读懂全英文。你会感到无力,连入门都不行。但当你冷静下来,寻找解决方案,你会发现,不一定要你能读懂,我们可以借助第三方软件。这里,我的方法是右键此文件保存到桌面,我是win10系统,在桌面打开后进入Edge浏览器,自动翻译成中文。

遇事冷静 沉着思考 解法自出

这里还找出来一些网站:
https://ww2.mathworks.cn/help/coder/ug/matlab-language-features-supported-for-code-generation.html
支持 C/C++ 代码生成的 MATLAB 语言功能

https://ww2.mathworks.cn/help/coder/ug/functions-and-objects-supported-for-cc-code-generation.html
C/C++ 代码生成支持的函数和对象

https://ww2.mathworks.cn/help/coder/index.html?s_tid=CRUX_lftnav
MATLAB Coder 功能介绍(官网全套含视频讲解)以上两点为节选

中文视频地址:https://ww2.mathworks.cn/videos/generating-cc-code-from-matlab-using-matlab-coder-82536.html?elqsid=1534701215344&potential_use=Home

  • 38
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值