前言
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