前言:

上一篇文章详细学习了如何通过Simulink建立系统模型,进而生成嵌入式代码。本文通过实例进一步加深对代码自动生成的理解和应用。

一、建立系统框图

为了方便起见,在这里我们实现一个的简单算法,我们在simulink中建立系统框图如下所示:

在生成代码之前,给k输入一个数,在命令行输入k=3,如下所示:

然后配置一些参数,ctrl+E调出Configuration  Parameters,首先设置Solver标签页,如下所示:

然后设置Code Generation标签页,如下所示:

然后在Report子标签页,配置允许生成报告,如下所示:

再按ok,如下:

二、代码生成

当参数配置完成以后,我们就可以利用ctrl+B快捷键生成代码:

不巧,产生错误了,这个只需要更改一下文件保存路径就好了,我们将红框中的路径更改为要保存文件的地址,我就放在桌面,如下所示:

重新进入simulink,ctrl+B编译模型,可以看到算法的基本代码已经生成了,如下所示:

但是可以看到,上面生成的代码比较复杂,无法直接使用到嵌入式系统中去,接下来我们使用Embedded Coder来生成接近我们使用的嵌入式代码。

三、代码优化

我们再次打开代码配置管理器(ctrl+E),按下图配置,将系统目标文件更改为ert.tlc,如下所示:

再次生成的代码如下所示,可以看到代码文件数量明显减少,算法也慢慢接近我们想看到的:

但是,生成的代码名称都是结构体,看起来略显复杂,能不能简单化呢?

接下来将使用“数据对象”进行数据管理,让代码看起来更简单化。

便于管理,首先将模型文件中所有模块选中,然后生成子模块,如下所示:

子系统的建立,有两种方法,一种是将模型文件中所有模块选中,按ctrl+G快捷键;一种是将模型文件中所有模块选中,选择Diagram->Subsystem & Model Reference ->Create Subsystem from Selection,如下所示:

在各个信号线上双击,添加信号名,x,y和z,如下:

然后进入Model Explorer:

添加信号对象和信号名关联起来,添加MPT Signal的信号对象x,y,z,步骤如下:

如此重复三遍即可添加MPT Signal的信号对象x,y,z,如下所示:

添加x,y,z信号对象后,需要关联信号名,关联信号名,在信号线上右键,点击Signal Properties…,点击Signal Properties…后,按下图勾选Signal name must resolve to Simulink signal object ,让信号名解析到信号对象上去 ,x,y,z都按如下设置,设置之后图变为右边所示,保存。

我们再按下ctrl+B快捷键,生成的代码如下:

注意,在MATLAB关闭后,工作空间里的东西就没了,为此我们必须保存workspace里的环境,在命令窗口输入save(‘my_dat_data.mat’),这样我们的工作空间就保存为了my_dat_data.mat文件,下次运行该模型之前,可以先load(‘my_dat_data.mat’)加载工作空间,恢复环境。还可以使用Simulink.saveVars(‘my_m_data.m’)保存,需要的时候,拖拽进命令行,则直接打开工作空间,如下:

我们生成的算法,也许在很多地方被调用,这是就需要把我们的算法模块单独出来作为一个子系统,可以把算法单独放在一个文件中,首先选中算法子模块,在菜单栏点击Diagram->Block Parameter (Subsystem ):

弹出如下菜单,设置我们需要的子模块名称及文件名称:

再按下ctrl+B快捷键,子模块及其功能代码就生成了,如下:

转发自:https://blog.csdn.net/weixin_41695564/article/details/80761795

MATLAB/Simulink自动代码生成(二)相关推荐

  1. Matlab/Simulink 自动代码生成 基于模型设计学习教程(1)---- 环境配置

    在接触不断开发深入STM32的时候,我经常在直接用C语言编写一个很发杂的算法,比如PID控制,傅里叶变换,卡尔曼滤波之类的基本需要的算法,然而对于一个初学者来说,编写这样的算法,费时费劲,甚至不一定能 ...

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

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

  3. MATLAB/Simulink自动代码生成(一)

    Simulink自带了种类繁多.功能强大的模块库,在基于模型设计的开发流程下,Simulink不仅通过仿真可以进行早期设计的验证,还可以生成C/C++.PLC等代码直接应用于PC.MCU.DSP等平台 ...

  4. Matlab/Simulink 自动代码生成 基于模型设计学习教程(2)---- 闪烁灯实验

    首先我们来搭建我们第一个模型 将选中的模块拖到左边的模型当中 我们再来看一下原理图,可以看见PC13是我们的指示灯 我们来设置 Digital Output模块,选中PC13,并将Sample tim ...

  5. Simulink自动代码生成:生成代码的基本设置

      Simulink自动代码生成也被称作基于模型开发(BMD),相比于传统的手写代码方式能够尽量减少人为错误.模型本身可以用于仿真,单元测试等,更便于提前发现逻辑错误.同时只要约定好模型接口,就可以多 ...

  6. Simulink自动代码生成:数据字典的建立及代码优化

      在上一节<Simulink自动代码生成:生成代码的基本设置>的基础上,我们来对模型进行优化,使得生成的代码更能满足实际的需求,没看过我上一篇文章的可以点开如下链接:   Simulin ...

  7. 一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b)

    一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b) 写在前面 1.stm32cub ...

  8. Simulink自动代码生成

    Simulink学习笔记(二)--Simulink自动代码生成(一) Simulink学习笔记(三)--Simulink自动代码生成(二)

  9. Matlab/Simulink自动生成STM32代码_基于模型的开发_环境搭建

    目录 前言 官方简介 Matlab R2018b安装 STM32-MAT/TARGET 安装 STM32CubeMX 安装 STM32CubeIDE, Keil安装 ST-Link驱动安装 微信公众号 ...

最新文章

  1. LeetCode-链表-19. 删除链表的倒数第 N 个结点
  2. kylin如何支持flink_大数据集群运维(28) Kylin 配置使用 flink 构建 Cube
  3. 英语人机考试计算机算分吗,英语人机对话考试技巧
  4. 聊聊内卷之下,直博和读完硕士再读博该怎么选择?
  5. 自然语言处理之基于biLSTM的pytorch立场检测实现
  6. android110 jni01
  7. mac地址修改_【电脑知识】在纯DOS下更改BIOS中网卡MAC地址教程
  8. 矩池云python2.7镜像安装opendr
  9. bigru参数计算_用飞桨做命名实体识别,手把手教你实现经典模型 BiGRU + CRF
  10. UVA 1590 IP Networks
  11. Android 输入法问题 解决三星s5830i或华为低端机输入法崩溃问题
  12. 软件可行性研究报告模板
  13. 使用vscode作为golang开发环境,无法跳转代码定义
  14. Python Turtle绘图基础(一)——Turtle简介、绘图窗体与绘图区域
  15. mac添加应用程序到启动台_如何在Mac上启动应用程序
  16. ftp连接21端口出现的问题的解决方案
  17. STM32和ROS串口通信常见问题汇总答疑
  18. 送给SQL开发者的一份新年礼物!麦聪软件发布一款纯Web化SQL开发工具,免安装还免费!
  19. 业务+IT一体化就是BPO?
  20. 如何在USGS下载Landsat 8-9影像(2022年版)

热门文章

  1. opencv心得体会_opencv学习心得第一章
  2. 项目一 : 学优在线项目(海南憧憬互联网教育有限公司)
  3. v-for的键值key
  4. python 标准正态分布函数_Python数据可视化实现正态分布(高斯分布)
  5. idea中Field injection is not recommended提示
  6. 推荐三款高级可视化工具,解决90%的数据可视化大屏需求
  7. prm-dul oracle,PRM-DULOracle数据库恢复工具
  8. soot基础 -- 解析java文件
  9. 伯努利分布的最大似然估计与贝叶斯估计
  10. 第一批做「单细胞测序」的人,已经上云了