ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

9. Stateflow - 模型代码生成

2022-01-13 19:02:30  阅读:367  来源: 互联网

标签:代码生成 变量 模型 生成 设置 代码 Stateflow 9.3


文章目录

9. Stateflow - 模型代码生成

当模型建好、仿真调试结束,需要利用Simulink Coder工具将模型转换为C代码,集成到硬件平台运行,本章将介绍如何设置将模型生成C代码,并如何对生成的代码进行优化。

9.1 模型的解算器solver设置

  • 生成代码方法:

    • 快捷方式 : Ctrl B
    • 菜单栏:C CODE下的Generate Code
      在这里插入图片描述
  • 当未对解算器 solver 进行设置时,会提示如下错误
    在这里插入图片描述
    在解算器(Mode Settings)下对solver进行设置:

  • Simulation time:仿真开始时间和结束时间,单位为:s,stateflow中求解结束时间常设置为:inf 无限长 (对仿真有影响,代码生成无影响作用)

  • Solver selection : 求解方法,stateflow都是定步长计算,并且是离散求解,因此Type设置为Fixed-step, Solver设置为Discrete(Solver提供很多求解方法,具体根据算法需求而定)

  • Solver details :定步长设置就是模型代码运行周期,比如放在10ms任务周期下,则设置为0.01
    在这里插入图片描述

9.2 生成的系统目标文件设置

  • 当求解器设置成功后就可以生成代码,此时生成的系统目标文件是系统默认的grt.tlc文件,生成文件如下:生成了很多的模型文件
    在这里插入图片描述
  • 设置目标文件设置成:ert.tlc
  • 此外,勾选仅生成code,即不自动编译(防止对外部引用的信号报错或者没有编译环境报错)
    在这里插入图片描述
  • 此时生成的系统文件如下所示:
    在这里插入图片描述
  • 上述模型生成了4个文件,集成到硬件平台代码中还是比较麻烦,因此进行如下设置,在Code Placement 下对 Code packaging设置为:Compact, 再次生成代码就只有.c.h 文件
    在这里插入图片描述
    在这里插入图片描述

9.3 其它生成代码的设置

9.3.1 硬件平台设置

  • 代码最终是集成到指定的硬件平台去运行,因此需要根据实际项目平台,对硬件平台,型号,运算数据长度等等进行设置
    在这里插入图片描述

9.3.2 Optimization页面的设置

  • 对生成代码的参数,数据,优化目标等进行设置,提升生成代码的运行效率,所占内存
    在这里插入图片描述

9.3.3 Report 报告

  • Report 能够打开设置关于生成代码报告的页面,可以选择是否创建HTML格式的代码生成报告,并通过勾选框选择是否在模型编译结束后自动打开。
    在这里插入图片描述

9.3.4 Comments 注释

  • Comments 中包含对生成代码中注释内容的配置
    • Include comments选项的勾选决定是否在生成代码中添加Simulink自带的注释。启动此选项后,Auto Generated comments组及Custom comments组的选项便被使能,我们可以根据需要选择希望生成的注释内容。
    • 推荐启动 Include comments 选项并勾选 Simulink block Stateflow object comments 选项以生成注释,注释中带有可以从代码跳转到对应模型的超链接,方便追溯模块与代码的对应关系

在这里插入图片描述

9.3.5 Identifiers 设置

  • 设置生成代码符号 :包括数据变量和数据类型定义、常量宏、子系统方法、模块的输出变量、局部临时变量及命名的最长字符数等
  • 标示符 $R$N$M$T等,是Embedded Coder 内部使用的标示符,代表模型名、状态名、变量名等
  • 推荐使用默认设置,不要为了提高生成代码可读性轻易进行修改,以免造成不必要的错误在这里插入图片描述

9.3.6 Custom Code

  • Custom Code 主要用于添加用户自定义的或者编译模型时必需的源文件、头文件、文件夹或者库文件等
    在这里插入图片描述

9.3.7 Code Style

  • Code Style子标签页面提供了一些关于生成代码风格的选择框选项,如if else分支的完整性确保,if else与switch case语句的选用,生成括号的频度,是否保留函数声明中extern关键字
    在这里插入图片描述

9.3.8 Data Type Replacement

  • Template子标签页面内嵌入式编码器提供了一组默认的代码生成模版
    在这里插入图片描述

9.4 模型输入输出信号设置方法

9.4.1 变量数据类型设置

  • 生成代码信号的输入和输出都是通过全局变量进行不同模块进行相互间调用的,因此需要对输入输出信号的变量类型作用域进行设置,并且保证所用模块的变量类型必须一直才能编译无误
  • 在stateflow中,对于输入变量的数据类型设置为继承Simulink的变量类型,这样当数据类型需要改变时,只需要改变Simulnk的数据类型即可;对于输出变量,则应该在stateflow中定义,向外部传输时设置为继承即可
    在这里插入图片描述

9.4.2 信号线上设置作用域

  • 双击信号,出现信号线传输信号变量名,如下图:传输的变量为 : X
  • Input 端口的变量名X只是一个变量名的备注,实际上没有作用
    在这里插入图片描述
  • 选中信号线,右键,选择Properties,打开Signal Properties编辑框,如下图所示:Storage class :设置变量的作用域,对于输入信号,一般选择ImportedExtern,实质就是extern外部变量;输出变量设置为:ExportedGlobal 定义一个全局变量,并在.h文件下用extern 定义了该变量,外部使用只需要包含该文件即可。
    在这里插入图片描述

9.4.3 Base Workspace设置变量属性并绑定信号线

  • Base Workspace中添加simulink signal变量,设置数据类型,作用域
    在这里插入图片描述
  • 绑定信号线:在Signal Properties下勾线Signal name must resolve to Simulink signal Object,此时与上述设置的变量进行绑定,信号线上会出现绑定的符号;此时在Signal Properties中设置的变量Storage class无效并且无法编辑。
    在这里插入图片描述
  • 此外,可以单独新建一个数据字典的文件,相当于模型输入信号文件,新建方法如下:在Model Properites 中Data选项中点击New,新建一个Data Dictionary的文件

在这里插入图片描述

  • 新建成功后,在模型编辑界面左下角出行图标,在Model Explorer出现新建的文件,即可在该文件下添加编辑信号。
    在这里插入图片描述

感谢阅读 若有错误 敬请见谅!!!


标签:代码生成,变量,模型,生成,设置,代码,Stateflow,9.3
来源: https://blog.csdn.net/weixin_44289254/article/details/122018228

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有