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,点个按钮之外,再考虑下数据管理、代码结构、文件结构......

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

    关注

    5068

    文章

    19014

    浏览量

    303144
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14286
收藏 人收藏

    评论

    相关推荐

    探索设计稿自动生成Flutter代码的技术方案

    的工具和方法,最后尝试大模型生成flutter代码在项目中的实践。 一、美团的探索 美团在2021年3月25日发表了一篇关于设计稿自动
    的头像 发表于 11-08 10:09 805次阅读
    探索设计稿<b class='flag-5'>自动</b><b class='flag-5'>生成</b>Flutter<b class='flag-5'>代码</b>的技术方案

    如何自动生成verilog代码

    介绍几种自动生成verilog代码的方法。
    的头像 发表于 11-05 11:45 197次阅读
    如何<b class='flag-5'>自动</b><b class='flag-5'>生成</b>verilog<b class='flag-5'>代码</b>

    Matlab/Simulink/Stateflow建模开发及仿真测试

    matlab 模拟仿真 熟悉Matlab/Simulink/Stateflow建模开发及仿真测试,熟悉V模型开发流程。 熟悉自动代码生成,能
    发表于 10-24 17:23

    新的 MathWorks 硬件支持包支持从 MATLAB 和 Simulink 模型到高通 Hexagon 神经处理单元架构的自动代码生成

    ® 和 Simulink® 模型自动代码生成流程。在提高数据准确度和标准合规性的同时,也提升开发人员的工作流效率。使用 MathWork
    的头像 发表于 09-23 11:59 211次阅读

    ISEDA首发!大语言模型生成代码到底好不好使

    在大模型席卷一切、赋能百业的浪潮里,“码农”也没能独善其身。各种代码自动生成的大模型,似乎描绘了一个人人都能像资深工程师一样写
    发表于 05-16 13:41 295次阅读
    ISEDA首发!大语言<b class='flag-5'>模型</b><b class='flag-5'>生成</b>的<b class='flag-5'>代码</b>到底好不好使

    【大语言模型:原理与工程实践】揭开大语言模型的面纱

    大语言模型(LLM)是人工智能领域的尖端技术,凭借庞大的参数量和卓越的语言理解能力赢得了广泛关注。它基于深度学习,利用神经网络框架来理解和生成自然语言文本。这些模型通过训练海量的文本数
    发表于 05-04 23:55

    Vivado 使用Simulink设计FIR滤波器

    的Add source中可选择Add or Create DSP Sources,直接将模型文件(.mdl或.slx)添加至工程中,综合的时候,系统将自动调用matlab分析模型文件,
    发表于 04-17 17:29

    Simulink自动生成代码现阶段的学习笔记

    在车载控制器的软件开发中,simulink的身影几乎随处可见,主要是在控制算法和控制逻辑的实现。平时看同事点点点就生成代码了,看起来很简单,但是实际操作起来确各种磕磕绊绊。 下面记录了一下步骤作为现阶段的学习笔记吧。
    的头像 发表于 04-17 10:56 3685次阅读
    <b class='flag-5'>Simulink</b><b class='flag-5'>自动</b><b class='flag-5'>生成</b><b class='flag-5'>代码</b>现阶段的学习笔记

    在做simulink+tasking自动代码生成时,编译找不到底层文件是为什么?

    在做simulink+tasking自动代码生成时,编译找不到底层文件,将文件添加进去后,会出现RT或NRT等重复定义
    发表于 02-20 08:06

    Meta推出最新版AI代码生成模型Code Llama70B

    Meta近日宣布了其最新版本的AI代码生成模型Code Llama70B,并称其为“目前最大、最优秀的模型”。这一更新标志着Meta在AI代码
    的头像 发表于 01-30 18:21 1385次阅读

    DC2100B/A能不能支持MATLAB/simulink自动代码生成

    1、硬件方面,微控制器是主要有几种,计算能力如何,可以支持类似MPC的算法吗?能不能扩展DSP的控制器? 2、软件方面,能不能支持MATLAB/simulink自动代码生成
    发表于 01-11 06:56

    单片机代码自动生成器程序

    单片机代码自动生成器是一种能够帮助开发人员快速生成单片机代码的工具。它利用了现代计算机技术和算法
    的头像 发表于 01-08 14:12 2901次阅读

    LabVIEW进行癌症预测模型研究

    效果。 LabVIEW在此研究中的应用展示了其在处理复杂医学数据和开发高效预测模型方面的独特优势,特别是在癌症早期诊断和治疗策略的研究中。通过使用LabVIEW,研究人员可以更快、更准
    发表于 12-13 19:04

    代码生成:基于 AI 大模型的挑战与前景

    使用AI通用模型来完成代码生成这类非常具体的任务可能会带来问题。人工智能生成代码就像是陌生人的代码
    的头像 发表于 11-26 08:05 715次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>生成</b>:基于 AI 大<b class='flag-5'>模型</b>的挑战与前景

    从HumanEval到CoderEval: 你的代码生成模型真的work吗?

    本文主要介绍了一个名为CoderEval的代码生成模型评估基准,并对三个代码生成模型(Code
    的头像 发表于 11-25 15:55 1649次阅读
    从HumanEval到CoderEval: 你的<b class='flag-5'>代码</b><b class='flag-5'>生成</b><b class='flag-5'>模型</b>真的work吗?