0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于利用Simulink模型自动生成C代码的相关研究和分析

MATLAB 来源:djl 2019-09-17 16:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Simulink 模型的自动代码生成?

简单来说,在我们的 “大” 项目中,需要实现很多算法,其中比如 myfilter。

关于利用Simulink模型自动生成C代码的相关研究和分析

现在不手写C了,而是搭建Simulink框图。对那些算法比C语法熟悉的人来说,这是个福音。

算法实现方便,测试方便

关于利用Simulink模型自动生成C代码的相关研究和分析

Simulink 模型的测试验证非常重要,然而这里不讨论。

总之,算法没问题之后,通过自定代码生成工具Coder“翻译”成C代码,跟手写的一样.c.h,还可以控制函数原型、数据定义、文件结构、甚至注释......

关于利用Simulink模型自动生成C代码的相关研究和分析

把自动生成的源文件集成到原来的项目文件中。

关于利用Simulink模型自动生成C代码的相关研究和分析

由各种编译器,把它们编译成不同的可执行文件,最后运行在不同的环境。

比如这里就是通过 VS 编译成 exe,很简单吧。

关于利用Simulink模型自动生成C代码的相关研究和分析

所以

对于代码生成的任务来说

重点在如何生成自己想要的C代码

但经常会有人问,Coder支持哪些板子?

看下面这张嵌入式软件的伪代码的简单示意图。

Simulink 算法模型通过 Coder 生成的是蓝色部分,标准C;跟硬件打交道的底层驱动黑色部分,是手写代码。

既然叫Coder,所以本质上,它的本职工作就是Simulink模型到C代码这个步骤,就结束了。至于C要通过什么编译器跑到什么硬件上,跟Coder没多大关系。

关于利用Simulink模型自动生成C代码的相关研究和分析

那么

为什么会有人问这个问题呢?

Build Process

Coder除了把模型翻译成代码的本职工作以外,还额外张罗了一些Build的任务,把C代码变成可执行文件。

为什么说张罗,而不说完成呢,因为Coder本身并没有编译的功能,它会后台调用你安装了的编译器来实现 ,看下图。

关于利用Simulink模型自动生成C代码的相关研究和分析

比如默认下,Coder会调用VC,使用它内置的相应的main文件模板,然后编译。这就是为什么每次生成代码,在当前目录下就会 “莫名其妙” 的生成一个exe程序。如果你不喜欢,那也可以 “Generate code only”。

如果是上面没列的编译器,自己也可以把它集成进来,比如构造个Template makefile,描述怎么编译链接变成可执行文件。

关于利用Simulink模型自动生成C代码的相关研究和分析

好像还是没解释所谓硬件支持的问题?

I/O Drive blocks

刚才说的是后台可以调用编译器,构造main文件,生成了可执行文件,下载到硬件。

在很久很久以前,代码生成工具为一些板卡提供了I/O驱动模块库,TIC2000/5000/6000,等等。

然后可以做什么?

看下面这张图,两端的In/Out就换成图中的硬件驱动模块。举例的板卡的驱动库我没装,暂时拿Arduino的库示意一下,提供了很多下图中红框类似的模块。

关于利用Simulink模型自动生成C代码的相关研究和分析

那么,中间用Simulink/Stateflow搭好算法,两头的输入输出端口连接上这些硬件驱动模块,后台又做好了编译工具链的支持,就可以实现传说中的支持某款硬件:一键下载到硬件上运行了。

如果使用这种方式来开发产品,这样看上去感觉真的很美好~

但是,目测,要做的额外的工作也非常多,所有的要用到的驱动都需要包裹成Simulink Block的形式,要自动生成所需要的main文件,等等,这也是不小的工作量。

做产品开发,使用哪种 “集成” 方式,仁者见仁。

现在就Coder工具来说,这部分 “对硬件的支持” 从Coder里剥离了,变成了免费的Hardware Support Package下载。用来做做算法的原型测试也不错。

关于利用Simulink模型自动生成C代码的相关研究和分析

另一个经常会问的问题:

代码生成工具的效率怎么样?

虽然Coder习惯叫代码生成工具,但它实际上是个代码翻译工具,把Simulink模型“翻译”成C代码。

其实就跟金山词霸,谷歌翻译一样,基于你写的中文翻译成英文。

“今日天朗气清,看似极好的日子,私心想若能约上三五好友,结伴出游,陶冶性情,便是再好不过了。”

再厉害的谷歌翻译,也翻译不出这句人话:“今天不想上班。”

所以对于Coder来说,也是一样,它的目标是C代码如实的反映出你搭建的Simulink模型结构所表达的信息。在考虑生成的C代码效率如何时,也不能忽略Simulink模型搭建的效率如何?

关于利用Simulink模型自动生成C代码的相关研究和分析

Simulink Coder生成的C代码主要用于加速桌面仿真、快速原型、以及HIL测试(被控对象模型也要生成C代码)。Embedded Coder提供了更多的自定义的途径,生成高效率的嵌入式C代码。

但其实,对于我们用户来说,这些Coder都是 “看不见” 的,没有所谓打开Embedded Coder工具箱的说法。

我们只需要关心选择哪一个系统目标文件(System tareget file)。罢了,下图。“无责任瞎猜一句”,为什么这些后缀名是.tlc呢?因为Coder里面干翻译这个活的叫TargetLanguageCompiler。

红框外的.tlc只是针对各自不同的目标稍作了些修改,完成一些额外的事。比如ert_shrlib.tlc,多做了一个工作,把生成的.c.h变成.dll。

这一个小节说人话就是:选择ert.tlc。

关于利用Simulink模型自动生成C代码的相关研究和分析

如果对于一些小算法你有什么高效率的实现,也可以添加进来。比如说查表,比说说针对某个特殊器件的四则运算,到时候Coder就会替换你的实现方式。

关于利用Simulink模型自动生成C代码的相关研究和分析

当然,一些通用的提高代码效率的方法,还是可以试试。让 Coder 基于它的 “经验”,给你一些通用的建议:

关于利用Simulink模型自动生成C代码的相关研究和分析

所以,对于代码生成的任务来说,除了选择ert.tlc,点个按钮之外,再考虑下数据管理、代码结构、文件结构......

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20156

    浏览量

    328977
  • C代码
    +关注

    关注

    1

    文章

    90

    浏览量

    15097
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MXAM常见问题解答:从配置到报告生成#simulink模型测试 #simulink

    Simulink
    北汇信息POLELINK
    发布于 :2025年11月14日 11:48:38

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成
    发表于 10-22 06:48

    汽车HIL测试系统,欧美标充电模型Simulink模型,开发,有偿

    提供一个欧美标充电模型,交付物为白盒Simulink模型
    发表于 09-04 16:23

    HarmonyOS AI辅助编程工具(CodeGenie)代码续写

    利用AI大模型分析并理解开发者在代码编辑区的上下文信息或自然语言描述信息,智能生成符合上下文的ArkTS或
    发表于 07-15 16:15

    无刷直流电机双闭环串级控制系统仿真研究

    Madlab进行BLDC建模仿真的方法,并且也提出了很多的建模仿真方案。例如有研究人员提出采用节点电流法对电机控制系统进行分析,通过列写m函数,建立BLDC控制系统真模型,这种方法实质上是一种整体建模
    发表于 07-07 18:36

    模型自适应控制在永磁同步电机转速中的仿真研究

    估计动态系统非线性函数和控制律;基于系统输出误差提出三个控制规则生成恰当信号控制电机转速。在 Simulink 环境下建立控制器和永磁同步电机转速仿真系统,仿真分析结果验证了提出方法控制电机转速
    发表于 06-25 13:01

    十字形多自由度超声电机接触分析模型研究

    摘 要:十字形多自由度超声电机其动子绕X、Y轴旋转与绕Z轴旋转的驱动机理是不同的,根据弹性接触理论,对其进行了分别考虑,并建立了电机摩擦接触分析模型利用建立的模型,对多自由度电机机械
    发表于 06-17 09:04

    如何实现MC33774IC在Simulink环境中使用基于模型的设计?

    我想熟悉如何实现MC33774IC 在 Simulink 环境中使用基于模型的设计。 尽管 MATLAB 提供了一些示例文件,但它们似乎是最终版本。要更深入地了解如何配置MC33774,我正在寻找一个教程,该教程解释了如何从头开始在 S
    发表于 04-10 08:05

    使用 QWQ:32B 模型搭配 VSCode 的 Cline 插件实现自动代码编程!

    作者:算力魔方创始人/英特尔创新大使刘力 一,概述 随着人工智能技术的快速发展,自动化编程工具逐渐成为开发者的得力助手。QWQ:32B 模型是一种先进的自然语言处理模型,能够理解并生成
    的头像 发表于 03-21 18:12 1084次阅读
    使用 QWQ:32B <b class='flag-5'>模型</b>搭配 VSCode 的 Cline 插件实现<b class='flag-5'>自动</b>化<b class='flag-5'>代码</b>编程!

    STM32CubeMX用于STM32配置和初始化C代码生成

    电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载
    发表于 02-26 17:32 678次下载

    借助谷歌Gemini和Imagen模型生成高质量图像

    在快速发展的生成式 AI 领域,结合不同模型的优势可以带来显著的成果。通过利用谷歌的 Gemini 模型来制作详细且富有创意的提示,然后使用 Imagen 3
    的头像 发表于 01-03 10:38 1351次阅读
    借助谷歌Gemini和Imagen<b class='flag-5'>模型</b><b class='flag-5'>生成</b>高质量图像

    Simulink与 Simscape的结合使用

    。用户可以利用 Simulink 进行系统建模、仿真、测试和验证,以及生成代码。 Simscape 简介 Simscape 是一个用于创建基于物理的
    的头像 发表于 12-12 09:31 2705次阅读

    Simulink与 MATLAB 的结合使用 Simulink中的信号处理方法

    在工程和科学研究中,信号处理是一个重要的领域,涉及到信号的采集、分析、处理和生成。MATLAB 提供了丰富的信号处理工具箱,而 Simulink 提供了一个直观的图形界面,使得复杂的信
    的头像 发表于 12-12 09:25 2208次阅读

    Simulink模型仿真与分析技巧

    1. 模型构建基础 1.1 理解系统需求 在开始构建模型之前,明确系统的需求和目标是至关重要的。这包括了解系统的动态特性、输入输出关系以及预期的性能指标。 1.2 选择合适的模块 Simulink
    的头像 发表于 12-12 09:23 3382次阅读

    Simulink自定义模块开发教程 Simulink 在控制系统中的应用

    在控制系统的设计和分析中,Simulink 提供了一个强大的工具集,允许工程师通过图形化界面快速构建和测试复杂的系统模型。然而,Simulink 的标准库可能不包含所有特定的功能,这时
    的头像 发表于 12-12 09:21 3127次阅读