MATLAB Coder从入门到放弃

news/发布时间2024/5/15 3:16:12

一、MATLAB Coder入门

1 MATLAB Coder是什么

从 MATLAB 代码生成 C 和 C++ 代码

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

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

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

2 配置准备

设置 C 或 C++ 编译器

MATLAB® Coder™ 将自动查找并使用支持的已安装编译器。有关受支持编译器的当前列表,请参阅 MathWorks® 网站上的支持和兼容的编译器。

可以使用 mex -setup 更改默认编译器。请参阅更改默认编译器。如果您生成 C++ 代码,请参阅选择 C++ 编译器。

参考链接:更改默认编译器 - MATLAB & Simulink - MathWorks 中国

Windows系统下在 MATLAB 命令提示符下键入:mex -setup

在这里插入图片描述

3 生成代码的三种方式

  • 使用 MATLAB Coder App 生成 C 代码

    使用 MATLAB Coder App 从 MATLAB 代码生成 C/C++ 代码。

  • 通过命令行生成 C 代码

    使用 codegen 命令从 MATLAB 代码生成 C/C++ 代码。

  • 通过生成 MEX 函数加快 MATLAB 算法的执行速度

    通过使用 codegen 命令从 MATLAB 函数生成 MEX 函数。

3.1 使用 MATLAB Coder App 生成 C 代码

例子中euclidean的例子非常具有代表性:

  • 多输入多输出
  • 有数据文件mat
  • 有读取文件

其中的注意点:

  • 代码生成器筛查
    在函数声明后面添加 %#codegen 指令:
    function [y,idx,distance] = euclidean(x,cb) %#codegen

    %#codegen指令提示代码分析器识别特定于代码生成的警告和错误。

    代码分析器消息指示标记变为红色,表示它检测到代码生成问题。

    等代码分析器消息指示标记再次变为绿色,表示它没有再检测到任何代码生成问题。

  • 该 App 将使用默认名称 euclidean.prj在当前文件夹中创建一个工程。

  • C/C++ 代码生成支持的某些 MATLAB 内置函数和工具箱函数、类以及 System object 有特定的代码生成限制。这些限制和相关使用说明列在其对应参考页的扩展功能部分。有关详细信息,请参阅 C/C++ 代码生成支持的函数和对象

  • 要查看行执行计数,请点击 View MATLAB line execution counts。

  • 检验:
    在从您的 MATLAB 代码生成独立的 C/C++ 代码之前,请生成 MEX 函数。运行生成的 MEX 函数,并确保它具有与您的 MATLAB 函数相同的运行时行为。如果生成的 MEX 函数的执行结果不同于 MATLAB 的结果,或者出错,您必须先修复这些问题,然后生成独立的代码。否则,您生成的独立代码可能不可靠并且具有未定义的行为。

  • 代码比较

    在这里插入图片描述

  • 如果您想为可变大小输入生成 C 代码

    在这里插入图片描述

3.2 通过命令行生成 C 代码

过程要点:

  • 使用 codegen 命令生成 MEX 函数:codegen sobel

    在生成 C 代码之前,应首先在 MATLAB 中测试 MEX 函数,以确保它在功能上等同于原始 MATLAB 代码,并且不会出现任何运行时错误。默认情况下,codegen 在当前文件夹中生成名为 sobel_mex 的 MEX 函数。这允许您测试 MATLAB 代码和 MEX 函数,并将结果进行比较。

  • 生成独立 C 代码:codegen -config coder.config('lib') sobel

    将 codegen 与 -config coder.config(‘lib’) 选项结合使用生成独立 C 库。默认情况下,为库生成的代码位于文件夹 codegen/lib/sobel/ 中。

3.3 通过生成 MEX 函数加快 MATLAB 算法的执行速度

4 一些注意点

4.1 代码生成工作流

在这里插入图片描述

4.2 代码生成的输入类型设定

在这里插入图片描述

介绍了3种典型数据类型的设定方式。

4.3 生成代码和 MATLAB 代码的形式差异

5 官方Examples

平均值滤波器 - MATLAB & Simulink - MathWorks 中国

生成 C 代码:codegen -config coder.config('lib') averaging_filter -args {x}

二、进阶注意事项

1 用于代码生成的 MATLAB 编程

MATLAB Coder™ 支持大多数 MATLAB 语言以及您在 MATLAB 算法中使用的许多工具箱函数和 System object。要生成 C/C++ 代码,请遵循代码生成的编程要求和最佳做法。

主要有以下几点组成:

  • ~~有关代码生成的编程注意事项
    有关代码生成的 MATLAB 编程注意事项;生成的代码的行为~~
  • ~~语言、函数和对象支持
    支持 C 和 C++ 代码生成的 MATLAB 语言功能、函数、类和 System object~~
  • 数据定义
    针对代码生成的数据定义方式与 MATLAB 有何不同
  • 函数定义
    为代码生成定义和调用函数

主要留意函数定义部分的3个函数:[coder.ignoreConst](https://ww2.mathworks.cn/help/releases/R2020b/coder/ref/coder.ignoreconst.html) [coder.ignoreSize](https://ww2.mathworks.cn/help/releases/R2020b/coder/ref/coder.ignoresize.html) [coder.extrinsic](https://ww2.mathworks.cn/help/releases/R2020b/coder/ref/coder.extrinsic.html)

2 代码生成

C/C++ 代码生成是 MATLAB® Coder™ 的核心功能。您可以使用 coder 函数打开 App 以生成代码,也可以使用 codegen 函数从命令行生成代码。

2.1 重点函数列表

  • **coder.target **

例子如下:

function y = callmyabsval(y)  
%#codegen
% Check the target. Do not use coder.ceval if callmyabsval is
% executing in MATLAB
if coder.target('MATLAB')    %这里指的是直接调用此函数% Executing in MATLAB, call function myabsvaly = myabsval(y);
else %并非在matlab中调用此函数% add the required include statements to generated function codecoder.updateBuildInfo('addIncludePaths','$(START_DIR)\codegen\lib\myabsval');coder.cinclude('myabsval_initialize.h');coder.cinclude('myabsval.h');coder.cinclude('myabsval_terminate.h');% Executing in the generated code. % Call the initialize function before calling the % C function for the first timecoder.ceval('myabsval_initialize');% Call the generated C library function myabsvaly = coder.ceval('myabsval',y);% Call the terminate function after% calling the C function for the last timecoder.ceval('myabsval_terminate');
end

在这个案例中着重一并介绍了使用 coder.ceval调用生成的 C 库函数,以及一些外部代码集成的应用比如[coder.cinclude](https://ww2.mathworks.cn/help/releases/R2020b/coder/ref/coder.cinclude.html)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/CdrY/3036.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【前端素材】推荐优质后台管理系统Minia平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

springboot+vue项目基础开发(13)vue的注册页面

1创建页面 在view下面创建Login.vue 编写login.vue的代码 <script setup> import {User,Lock} from @element-plus/icons-vue import {ref } from vue&#

亿道丨三防平板电脑厂商哪家好丨麒麟系统三防平板PAD

随着科技的飞速发展&#xff0c;人们对于移动设备的需求越来越高。然而&#xff0c;在不同的行业应用场景下&#xff0c;常规的智能平板往往无法满足特殊的工作要求。&#xff0c;亿道三防平板&#xff0c;将高可靠性与卓越性能高度结合&#xff0c;为各行各业提供卓越的移动解…

Python爬虫实战入门:爬取360模拟翻译(仅实验)

文章目录 需求所需第三方库requests 实战教程打开网站抓包添加请求头等信息发送请求&#xff0c;解析数据修改翻译内容以及实现中英互译 完整代码 需求 目标网站&#xff1a;https://fanyi.so.com/# 要求&#xff1a;爬取360翻译数据包&#xff0c;实现翻译功能 所需第三方库 …

Android14 InputManager-InputReader的处理

IMS启动时会调用InputReader.start()方法 InputReader.cpp status_t InputReader::start() {if (mThread) {return ALREADY_EXISTS;}mThread std::make_unique<InputThread>("InputReader", [this]() { loopOnce(); }, [this]() { mEventHub->wake(); });…

Linux:Jenkins用户权限和管理

1.下载插件 由于Jenkins的默认权限管理并不是很精细所以我们安装一个插件进行权限的一个管理 插件名称为&#xff1a;Role-based Authorization Strategy 安装完插件我们再去配置一下 进入全局安全配置 选择这个Role-Based Strategy策略然后保存 2.创建角色 我们这里主要使…

了解JSON的作用及其方法

什么是json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式采用完全独立编程语言的文本格式存储和表示数据&#xff08;就是字符串&#xff09;。它基于JavaScript语法&#xff0c;但可以被多种编程语言使用和解析。JSON以键值对的形式存…

12 个顶级音频转换器软件(免费)

当涉及不受支持的音乐文件时&#xff0c;音频文件转换器软件总是会派上用场。当您希望缩小大量大型音乐文件的大小以节省设备存储空间时&#xff0c;它也很有帮助。您在寻找传输音频的软件吗&#xff1f;好吧&#xff0c;请仔细选择音频转换器&#xff0c;因为最好的音乐转换器…

SpringBoot整合ActiveMQ

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

vue上传文件到阿里云oss方法 结合element-ui 中的 el-upload

阿里官方文档 1、安装依赖 cnpm install ali-oss --save2、新建oss.js文件&#xff0c;进行封装 const OSS require(ali-oss) import { getOssInfo } from /api/oss;//获取oss上传的相关密钥接口 export default {/*** 阿里云oss sdk文件上传dir 上传到的文件位置* param {*…

Microsoft的PromptBench可以做啥?

目录 PromptBench简介 PromptBench的快速模型性能评估 PromptBench数据集介绍 PromptBench模型介绍 PromptBench模型加载遇到的问题 第一次在M1 Mac上加载模型 vicuna和llama系列模型 PromptBench各个模型加载情况总结 PromptBench的Prompt快速工程 chain of thought…

无人机数据链技术,无人机数据链路系统技术详解,无人机数传技术

早期的无人机更多的为军事应用服务&#xff0c;如军事任务侦查等&#xff0c;随着技术和社会的发展&#xff0c;工业级无人机和民用无人机得到快速的发展&#xff0c;工业级无人机用于农业植保、地理测绘、电力巡检、救灾援助等&#xff1b;民用无人机用于航拍、物流等等领域。…

蓝桥杯备赛系列——倒计时50天!

蓝桥杯备赛系列 倒计时50天&#xff01; 前缀和和差分 知识点 **前缀和数组&#xff1a;**假设原数组用a[i]表示&#xff0c;前缀和数组用sum[i]表示&#xff0c;那么sum[i]表示的是原数组前i项之和&#xff0c;注意一般用前缀和数组时&#xff0c;原数组a[i]的有效下标是从…

Radware Alteon负载均衡-基于域名的七层负载均衡

Radware Alteon作为一款高性能的负载均衡器&#xff0c;其基于域名的七层负载均衡功能为众多企业提供了灵活、高效的解决方案。 该案例实现如下需求&#xff1a;客户端访问服务器&#xff0c;当访问域名为www.iisstart.com时&#xff0c;默认访问Server1&#xff0c;当配置七层…

c语言---数组(超级详细)

数组 一.数组的概念二. 一维数组的创建和初始化2.1数组的创建2.2数组的初始化错误的初始化 2.3 数组的类型 三. 一维数组的使用3.1数组的下标3.2数组元素的打印3.2数组元素的输入 四. 一维数组在内存中的存储五. 二维数组的创建5.1二维数组的概念5.2如何创建二维数组 六.二维数…

nginx安装配置

一、目录 1 linux 下安装nginx 2. nginx 配置 3. nginx 常用命令 4. 安装报错 二、实现 1 linux 下安装nginx 1. 安装 openssl 、zlib 、 gcc 、pcre依赖 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre pcre-devel安装 nginx a 官网下载n…

基于springboot财务管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

STM32面试相关问题

总结以下之前面试时遇到的一些问题&#xff0c;以便回顾起来学习&#xff01; 技术面试一般都是看项目提问的&#xff0c;可能会问&#xff1a; STM32的内核型号有哪些&#xff1f; 回答&#xff1a;ARM Cortex-M0&#xff0c;M0&#xff0c;M3, M4和M7内核&#xff0…

Java Swing游戏开发学习2

跟随大佬教程继续&#xff0c;图片资源&#xff0c;视频简介有下载链接。 这个文章是看视频教程写的&#xff0c;不算原创。有条件的可以去油管搜索RyiSnow&#xff0c;是一个游戏开发视频制作up主&#xff0c;讲解的非常基础&#xff0c;可以边看边实践&#xff0c;增加对Java…

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中&#xff0c;实时通讯已经变得至关重要。无论是在线游戏的即时交流&#xff0c;还是团队协作中的实时消息传递&#xff0c;都需要强大的实时通讯功能来支持。而在前端开发中&#xff0c;利用Socket.io这一强大的工具库&#xff0c;实现实时通讯功…
推荐文章