昨天参加了Mathworks公司在东南大学举办的关于MATLAB的培训,内容是关于MATLAB/SIMULINK的嵌入式代码生成以及物理建模,在这里把代码生成的步骤及一些相关内容总结一下。


嵌入式代码生成

嵌入式代码生成主要利用的是MATLAB中自带的MATLAB Coder模块,MATLAB Coder可以从MATLABcode产生可读且可移植的C/C++程序,支持多数MATLAB语言和工具箱,可以将产生的程序作为源程序、静态库或动态库集成到项目中,可在MATLAB环境中使用产生的程序来加快MATLAB代码的执行速度。

接下来就以一个非常简单的例子来举例说明嵌入式代码生成的步骤。

1.创建模型

这个模型很简单,输出Out1等两个输入信号Input1和Input2之和再乘以增益k(这里先用2代替),即:

z=(x+y)*k

其中,x和y在其他模块中定义,z和k在本模块中定义(这个影响后面数据管理中各个参数的属性,后面再说,现在不管)。

2.更改设置

上文提到代码生成利用的是MATLAB自带的MATLAB Coder模块,打开SIMULINK中的Configuraton Parameters模块

或者Ctrl+E可行。打开之后,

第一步:更改求解器设置

因为我们生成的代码是需要下载到单片机中的,而单片机中的计时是按照它的频率严格进行的,因此求解器中的求解步长要与单片机的步长一致,否则就会出错,所以这里将求解器类型改为定步长,离散,步长时间设置为0.01s(即10ms)。

第二步:Code Generation设置

将System target file一栏中默认的grt.tlc改为ert.lic,更改方式:可以直接将g改为e,也可以点击后面的Browse,然后选中ert.tlc(Embedded Coder),这一设置的目的在于生成的代码是嵌入式C代码,与grt.tlc相比,代码量小了很多,这一点对于单片机原本就不大的内存空间很有意义,有兴趣的可以自行比较一下。

这一步的目的在于可以在代码生成之后自动显示出来,不勾选的话无法直接看到代码。

第三步:代码生成

单击Build Model模块,或者Ctrl+B也行。

然后就可以看到生成的代码了。

红色方框圈出的就是我们想要实现的效果,但是可以看到这个公式和我们想要的还有一些距离,对,接下来要做的就是关键部分了。

3.数据管理

数据管理的方式有好几种,SIMULINK中使用的方法是:使用数据对象管理数据

在面向对象的编程模式下,有一个很重要的概念——,类是一种抽象,抽象出具有某一类事物具有共同属性的操作;还有一个概念——包,包可以把相关的类打包到一起,以便于管理;最后,就是对象,对象和类是对应存在的,对象是类的实体,而类是对象的抽象。

SIMULINK在进行数据管理的时候,提供了两个包供我们使用,分别是Simulink Package和Mpt Package,而我们要使用的就是Simulink Package。下面以Simulink Package简单介绍包、类、对象及对象的属性。

如上图所示,Simulink包中有Signal和Parameter两个类,Signal有Data Type、Data Storage Class、Dimensions等属性,而Parameter则有Data Type、Data Storage Class等属性。下图所示的即为Signal的属性图。

数据管理简单来说就是对上图中的各种属性进行管理,其中,最重要的就是数据类型(Data Type)和存储类(Storage Class)。数据类型很简单,而存储类比较麻烦,是影响数据存储的重要因素。模型中的信号,我们可能定义为全局变量,也可能定义为全局变量;模型中的参数,我们可以定义为常数型变量,也可以定义为宏定义。所有这些,都是通过对存储类进行管理进行实现的。

说了那么多,接下来就看看具体如何进行数据管理。

使用信号对象管理信号

第一步

在信号线上定义信号名。鼠标双击信号线,出现编辑框之后,写上信号线的名字x、y、z;

第二步

在Data Dictionary或Base Workspace里定义同名的信号对象(这里推荐使用Data Dictionary,因为数据字典会使用一个专门的文件进行信号的管理,下同)。在Model Explorer里,选中Data Dictionary或Base Workspace,然后添加三个Simulink Signal,并改名为x、y、z,设置x、y的Storage Class为ImportedExtern,将z 设置为ExportedGlobal;

然后点击左下角出现的方框

第三步

将信号对象和信号线关联起来。鼠标右键信号线,选择Properties,然后选中Singal name must resolve to Simulink signal,成功设置字之后信号名前面会出现一个蓝色的“E”。

使用参数对象管理参数

第一步

定义参数。双击增益模块gain,更改参数值为k;

第二步

定义参数对象。在Model Explorer里,选中Data Dictionary或Base Workspace,添加Simulink Parameter,改名为k,定义k的初始值为2,设置Storage Class为const Volatile。

至此,代码生成的步骤就结束了,再按Ctrl+B就可以生成想要得到的代码了。

MATLAB/SIMULINK生成嵌入式代码的步骤相关推荐

  1. Matlab 2019b simulink 生成C代码(一)

    一.简介 本文主要以matlab 2019b版本,主要讲解怎么用simulink生成嵌入式c代码: 1.设置生成嵌入式C代码: 2.生成自己想要变量代码: 3.生成自定义名称函数 二.具体实现方法 1 ...

  2. 基于Matlab/Simulink的嵌入式开发(一)

    Matlab/Simulink的嵌入式开发(一) 作为系列的第一篇博客,首先介绍下该系列的文章的目的:旨在记录自己使用Simulink进行嵌入式程序开发的整个过程,包括通过基于simulink的大型控 ...

  3. NXP-MPC5748G车载MCU使用(食用)方法(踩坑)实用指南(骗人教程)(三):MATLAB/SIMULINK生成代码给MPC5848G嵌入式处理器运行

    打开SIMULINK,随便加载一个地图文件(例如xiaoquanbiansu.mat),将simulink中的cmdSelector模块删除或注释,找到需要被导入到MCU的相应代码模块,右键点击该模块 ...

  4. Matlab 2019b simulink 生成C代码(二)用fixed point tool 生成定点代码

    一.简介 本文主要以matlab 2019b版本,主要讲解怎么用simulink和fixed point tool生成嵌入式定点c代码: 在嵌入式代码设计中,由于浮点运算特别占用CPU资源,我们通常使 ...

  5. Simulink自动代码生成2——生成嵌入式代码(generating embedded code)

    写在前面,一个小tips:用低版本打开高版本slx的方法如下,这个方法不是万能的,可能会引发一些错误,谨慎使用. 目录 1. 代码生成的常用界面 2. 代码基本结构 代码文件的主结构 主循环函数 生成 ...

  6. MATLAB2018a Simulink生成CCS代码教程

    一. 软件安装 网上教程多数为MATLAB2017和CCSv6以下版本的配置教程,步骤复杂需配置各种路径而且容易出错.其实MATLAB2018之后的配置已经很简化了,方便了许多.查看MATLAB支持的 ...

  7. windows下使用Caffe框架和matlab实现SRCNN官方代码的步骤

    步骤 step1 搭建caffe环境 在windows系统上搭建caffe环境,并配置matlab接口(需要下载 caffe-master.zip 以及 VS2013 ) 我的环境为:windows1 ...

  8. Matlab笔记:Matlab function生成C代码并运行

    1.Matlab函数,输入(x,y,z,roll,pitch,yaw),输出out为8×6的数组 2.点击Matlab coder 3.选择要生成的函数 4.定义输入类型,输入的六个数选择double ...

  9. Matlab/Simulink 自动代码生成详细步骤

    最近一直在忙于FCU控制器的模型搭建,空闲之余也想分享一下自己对Simulink建模过程中的一些想法,从接触simulink到应用simulink大约已经两年多了,随着接触时间,慢慢发现simulin ...

最新文章

  1. 第十周项目实践 哈夫曼树的建立哈夫曼编码
  2. 让时间倒流的保存点:用Apache Flink的保存点技术重新处理数据流
  3. RabbitMQ原理讲解
  4. kafka的简单概述及基本命令
  5. android 铃声位置
  6. k8s配置以使得pod可以运行于master上
  7. QString::section
  8. Android stdio安装
  9. GPUImage相关(转)
  10. 中国IT前线战士:蚂蚁雄兵
  11. Android 开发推荐书籍
  12. 为什么不是每个人都过着他梦想中的生活呢?
  13. python爬取携程景点_python爬取携程景点评论信息
  14. 如何注册ArcGIS教学试用版账号
  15. 市场上还有多少沈昌宇 揭秘庄家操盘手法
  16. Unity发布webgl的一些问题
  17. 由一个骂评引发的作者产品体验报告-----我要集气
  18. Animator 实现动画完成事件的一些思考
  19. 程序员需要达到什么水平才能顺利拿到 20k 无压力?
  20. 360oauth token是什么意思_技术文档

热门文章

  1. 黑体辐射出射度曲线绘制
  2. 计算机网络与多媒体试卷,西安交通大学17年9月课程考试《计算机网络与多媒体技术》作业考核试题...
  3. 学习之旅16-R数据可视化-图形处理(二)
  4. 用 HTML 元素实现自定义的滚动条
  5. mysql 构建dockerfile 镜像-centos7
  6. 配置腾讯云cdn教程
  7. FORM表单的几大属性
  8. 动态规划DP——01背包问题
  9. 考计算机软考还需要评定职称吗,软考评职称还需要年限吗
  10. 微型计算机存储器系统中的cache是(),微型计算机存储器系统中的Cache是