在上一节《Simulink自动代码生成:生成代码的基本设置》的基础上,我们来对模型进行优化,使得生成的代码更能满足实际的需求,没看过我上一篇文章的可以点开如下链接:
  Simulink自动代码生成:生成代码的基本设置
  本节我们我们首先来学习如何建立数据字典,然后通过所建立的数据字典对模型进行优化。

目录

  • 一. 未优化的代码
  • 二. 数据字典的建立
  • 三. 数据字典与模型的关联
  • 四. 配置信号属性
  • 五. 优化后的代码
  • 六. 总结

一. 未优化的代码

  在上一节生成的代码中,打开Calculation.c和Calculation.h文件可以发现在不经过处理的情况下,输入输出变量是以结构体的方式进行定义的。如图所示,在Calculation.h文件中对输入输出结构体进行了声明,在Calculation.c文件中对结构体进行了调用。


  但是在实际的开发当中,模型的输入可能来自于其它模块的输出,模型的输出也可能是其它模块的输入,仅仅是一个中间变量,并不需要定义成结构体的形式,因此就要对其进行优化,以满足我们的实际需求。

二. 数据字典的建立

  为了对输入输出变量进行优化,我们首先要建立一个数据字典。通过数据字典的名字我们也可以联想到它的用途,类似于编程中对变量进行声明,未经声明的变量是不能使用的,数据字典也是如此,它的作用也就相当于对变量进行声明,使MATLAB在使用时就像我们查汉语字典时能够找到变量的定义。接下来我们就来学习如何建立数据字典。
  (1)打开Model Explorer—File—New—Data Dictionary。

  (2)执行完第一步后将会弹出以下对话框,将文件名命名为Calculation(命名不是固定的)并进行保存。


  (3)完成后将看到左侧多出一个Calculation选项,工具栏标红的4个工具分别是MATLAB变量、Simulink参数、Simulink查表和Simulink信号。


  (4)接下来添加4个Simulink信号,双击信号名并修改成我们想要的名字,选择数据类型并对存储类别进行修改,输入信号的Storage Class选择为ImportedExtend,输出信号的Storage Class选择为ExportedGlobal,如图所示。


  (5)在完成以上步骤后对数据字典进行保存,选中Calculation,右键选择保存。

三. 数据字典与模型的关联

  在建立了数据字典后,要将数据字典与模型进行关联,使得模型在使用数据字典中的变量时能够找到其定义。
  (1)首先在模型空白处点右键,在弹出的对话框中选择模型属性。

  (2)选择External Data—Browse—选择我们刚刚建立的数据字典—选择OK完成关联设置。

四. 配置信号属性

  (1)单机选中信号线,信号线会变成蓝色,然后右键鼠标,在弹出的对话框中选择属性。

  (2)将信号名字与我们数据字典中定义的名字一一对应起来。

  (3)所有信号线设置完成后如图所示,信号线上会出现信号的名字和一个小叉子,这下终于可以吃饭了。

五. 优化后的代码

  在执行完以上所有步骤后,重新生成代码(Ctrl+B),可以看到,输入信号的声明不再是在Calculation.h中,也不再是以结构体的方式出现,而是以extern的方式出现。

  输入变量依然在Calculation.h中声明,在Calculation.c中调用,但它不在是以结构体的形式出现,而是普通变量,并且变量名和我们设置的相同。

六. 总结

  本节内容对模型的输入输出变量进行了优化,并介绍了数据字典的生成方式,当然数据字典的生成方式不止一种,还有脚本+Excel的方式,在后续文章中将进行介绍。模型的优化也不仅仅是对输入输出变量的优化,包括函数形式,函数名,注释等等都需要进行优化。后续将一一进行介绍并编写一些有趣的脚本,以辅助自动代码生成。

Simulink自动代码生成:数据字典的建立及代码优化相关推荐

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

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

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

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

  3. Simulink自动代码生成

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

  4. Simulink自动代码生成3——优化生成的代码(optimizing generated code)

    代码优化综述 使用simulink代码生成之后,如果需要进一步对执行效率或者内存优化,可以看下面提到的方法.具体可从以下几个方面考虑: remove initialization code remov ...

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

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

  6. MATLAB/Simulink自动代码生成(二)

    前言: 上一篇文章详细学习了如何通过Simulink建立系统模型,进而生成嵌入式代码.本文通过实例进一步加深对代码自动生成的理解和应用. 一.建立系统框图 为了方便起见,在这里我们实现一个的简单算法, ...

  7. Simulink自动代码生成:原子子系统(Atomic Subsystem)

      在前两节的基础上我们继续来学习代码的优化,没看过我前两篇文章的可以先去看一下,否则可能觉得模型出现的很突兀.这一节我们来学习原子子系统,废话不多说,我们直接开始学习,看完了这一篇你就会明白什么是原 ...

  8. Simulink自动代码生成(一)

      一个simulink模型能够生成代码首先要满足的条件: 1:确保模型仿真的正确性2:将需要的输入和输出改成input和output模块3:离散化模型,设置求解器为离散,固定步长 满足上面条件后,接 ...

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

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

最新文章

  1. 8500WN流畅高速上网高端卡 12核心不锁倍频
  2. 访问控制 - C++快速入门18
  3. 在C#中利用DirectX实现声音播放(winForm)
  4. Docker入门 一 安装Docker
  5. Windows7 Home高级 64 中文版 + TortoiseSVN 64 英文版 + SVN Server 32 英文版安装过程
  6. android设置输入框输入字符限制,Android里限制EditText控件可以输入字符内容的范围的方法...
  7. idea改成c盘_解决IDEA占用C盘空间过大的问题
  8. Python之Python3本地安装教程
  9. 服务器有无线网卡么,全面认识服务器网卡:理论篇
  10. 计算机组成原理课程设计-logisim仿真补码一位乘
  11. 识人 用人 激人 留人 斩人
  12. 直播平台开发过程中关于谷歌fcm推送介绍
  13. 华为设备VRRP多VLAN负载分担
  14. GOTC 2023全球开源技术峰会
  15. 网站动态背景线条跟随鼠标移动,吸附鼠标效果
  16. 【深度学习】隐马尔科夫
  17. DHCP协议详解,报文内容,如何查看报文,为什么offer报文会以广播的形式进行发送
  18. html显示宇宙星星,如何利用JS/CSS实现根据数值显示星星?
  19. codefroces 841B Godsend
  20. 物流智能机器人—结合WMS系统进行通讯的海格里斯(HEGERLS)单轨环形RGV穿梭车

热门文章

  1. 两台服务器双向同步文件,远程同步文件 两台服务器上
  2. linux查看设备的uuid,设备的UUID详解 - 笑遍世界的测试技术 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  3. 智能家居:让家庭生活更便捷的智能科技
  4. 【大作业】基于MATLAB的PRM算法的路径规划设计(随机地图+GUI+源码+报告)
  5. Node.js与PHP:一场针对开发人员思想共享的史诗般的战斗
  6. 回忆童年-教你用python做出童年经典的动漫人物
  7. iview 的常见用法
  8. Spring的JdbcTemplate的基本操作
  9. freemarker 详细介绍
  10. c 语言将单引号赋给字符变量,C之单引号和双引号(十三)(示例代码)