深入拆解Simulink自动生成代码(三)——循环结构

这篇具有很好参考价值的文章主要介绍了深入拆解Simulink自动生成代码(三)——循环结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

前言

一、Simulink实现循环结构

二、自动生成C代码

三、变式1

四、变式2

五、变式3

六、变式4

总结


前言

        《深入拆解Simulink自动生成代码(一)——数据流处理》

        《深入拆解Simulink自动生成代码(二)——选择结构》

一、Simulink实现循环结构

         用Simulink实现循环结构的一个最简单编程举例如下:

simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

 simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

二、自动生成C代码

         上述循环结构的Simulink自动生成的对应C代码如下:

  int32_T s3_iter;

  /* Outputs for Iterator SubSystem: '<S2>/For Iterator Subsystem' incorporates:
   *  ForIterator: '<S3>/For Iterator'
   */
  for (s3_iter = 0; s3_iter < 5; s3_iter++) {
    /* Outputs for Iterator SubSystem: '<S2>/For Iterator Subsystem' incorporates:
     *  ForIterator: '<S3>/For Iterator'
     */
    CodeGenerate_Y.y2 = s3_iter + 1;
  }

  /* End of Outputs for SubSystem: '<S2>/For Iterator Subsystem' */

三、变式1

         基于上述举例,把for循环改成while循环,生成的对应代码如下所示:

simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

  int32_T s3_iter;

  /* Outputs for Iterator SubSystem: '<S2>/While Iterator Subsystem' incorporates:
   *  WhileIterator: '<S3>/While Iterator'
   */
  s3_iter = 1;

  /* End of Outputs for SubSystem: '<S2>/While Iterator Subsystem' */
  do {
    CodeGenerate_Y.y2 = s3_iter;
    s3_iter++;
  } while (s3_iter <= 5);

四、变式2

         基于上述举例,再增加一个while的退出条件,当Counter>3时退出循环,生成的对应代码如下所示:

simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

  int32_T s3_iter;
  boolean_T rtb_Compare;

  /* Outputs for Iterator SubSystem: '<S2>/While Iterator Subsystem1' incorporates:
   *  WhileIterator: '<S3>/While Iterator'
   */
  s3_iter = 1;

  /* End of Outputs for SubSystem: '<S2>/While Iterator Subsystem1' */
  do {
    CodeGenerate_Y.y2 = s3_iter;
    rtb_Compare = (CodeGenerate_DW.Output_DSTATE <= 3);
    if ((uint8_T)(CodeGenerate_DW.Output_DSTATE + 1U) > 7) {
      CodeGenerate_DW.Output_DSTATE = 0U;
    } else {
      CodeGenerate_DW.Output_DSTATE++;
    }

    s3_iter++;
  } while (rtb_Compare && (s3_iter <= 5));

五、变式3

         基于上述举例,把while的循环类型从do while改成while do,生成的对应代码如下所示:

simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

  int32_T s3_iter;
  boolean_T loopCond;

  /* Outputs for Iterator SubSystem: '<S2>/While Iterator Subsystem2' incorporates:
   *  WhileIterator: '<S3>/While Iterator'
   */
  s3_iter = 1;

  /* Constant: '<S2>/Constant' */
  loopCond = true;
  while (loopCond && (s3_iter <= 5)) {
    /* Outputs for Iterator SubSystem: '<S2>/While Iterator Subsystem2' incorporates:
     *  WhileIterator: '<S3>/While Iterator'
     */
    CodeGenerate_B.WhileIterator = s3_iter;

    /* RelationalOperator: '<S4>/Compare' incorporates:
     *  Constant: '<S4>/Constant'
     *  UnitDelay: '<S5>/Output'
     */
    loopCond = (CodeGenerate_DW.Output_DSTATE <= 3);

    /* Switch: '<S7>/FixPt Switch' incorporates:
     *  Constant: '<S6>/FixPt Constant'
     *  Constant: '<S7>/Constant'
     *  Sum: '<S6>/FixPt Sum1'
     *  UnitDelay: '<S5>/Output'
     */
    if ((uint8_T)(CodeGenerate_DW.Output_DSTATE + 1U) > 7) {
      CodeGenerate_DW.Output_DSTATE = 0U;
    } else {
      CodeGenerate_DW.Output_DSTATE++;
    }

    /* End of Switch: '<S7>/FixPt Switch' */
    s3_iter++;
  }

  /* End of Outputs for SubSystem: '<S2>/While Iterator Subsystem2' */

  /* Outport: '<Root>/y2' incorporates:
   *  MATLAB Function: '<Root>/MATLAB Function3'
   */
  CodeGenerate_Y.y2 = CodeGenerate_B.WhileIterator;

六、变式4

         基于上述举例,把while循环体的执行内容,从每次退出循环再进入时保持前一次的状态,变成每次退出循环再进入时置初始状态,也即Start状态从Held改成Reset,生成的对应代码如下所示:

simulink循环模块,Matlab/Simulink,汽车,mcu,开发语言,matlab,算法

  int32_T s3_iter;
  uint8_T Output_DSTATE;
  boolean_T loopCond;

  /* Outputs for Iterator SubSystem: '<S2>/While Iterator Subsystem3' incorporates:
   *  WhileIterator: '<S3>/While Iterator'
   */
  s3_iter = 1;

  /* InitializeConditions for UnitDelay: '<S5>/Output' */
  Output_DSTATE = 0U;

  /* Constant: '<S2>/Constant1' */
  loopCond = true;
  while (loopCond && (s3_iter <= 5)) {
    /* Outputs for Iterator SubSystem: '<S2>/While Iterator Subsystem3' incorporates:
     *  WhileIterator: '<S3>/While Iterator'
     */
    CodeGenerate_B.WhileIterator = s3_iter;

    /* RelationalOperator: '<S4>/Compare' incorporates:
     *  Constant: '<S4>/Constant'
     *  UnitDelay: '<S5>/Output'
     */
    loopCond = (Output_DSTATE <= 3);

    /* Switch: '<S7>/FixPt Switch' incorporates:
     *  Constant: '<S6>/FixPt Constant'
     *  Constant: '<S7>/Constant'
     *  Sum: '<S6>/FixPt Sum1'
     *  UnitDelay: '<S5>/Output'
     */
    if ((uint8_T)(Output_DSTATE + 1U) > 7) {
      Output_DSTATE = 0U;
    } else {
      Output_DSTATE++;
    }

    /* End of Switch: '<S7>/FixPt Switch' */
    s3_iter++;
  }

  /* End of Outputs for SubSystem: '<S2>/While Iterator Subsystem3' */

  /* Outport: '<Root>/y2' incorporates:
   *  MATLAB Function: '<Root>/MATLAB Function3'
   */
  CodeGenerate_Y.y2 = CodeGenerate_B.WhileIterator;

总结

         以上就是本人拆解Simulink模块自动生成代码时,讲解的第三部分。主要针对Simulink的循环模块,展示了这类模块的使用方法,并对比了相应的C代码。

         后续还会更新Simulink其他的几种模块,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成为笔者持续分享的动力。

         另外,上述例程使用的Demo工程可以到笔者的主页查找和下载。


         版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!文章来源地址https://www.toymoban.com/news/detail-529704.html

到了这里,关于深入拆解Simulink自动生成代码(三)——循环结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB/ SIMULINK模型在环MIL测试工具,自动化模型测试工具,自动生成测试报告

    MATLAB/ SIMULINK模型在环MIL测试工具,自动化模型测试工具,自动生成测试报告。 软件纯自己编写,经过长时间测试,包教会。 使用简单,可以参考如下截图。 ID:972000 677200256038 悦潮风尚

    2024年02月16日
    浏览(28)
  • 深度学习-循环神经网络-RNN实现股价预测-LSTM自动生成文本

    基于文本内容及其前后信息进行预测 基于目标不同时刻状态进行预测 基于数据历史信息进行预测 序列模型:输入或者输出中包含有序列数据的模型 突出数据的前后序列关系 两大特点: 输入(输出)元素之间是具有顺序关系。不同的顺序,得到的结果应该是不同的,比如“

    2024年01月24日
    浏览(24)
  • AIGC for code(AIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

    AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直接在你的编辑器中,为你提供代码片段或者整个函数的建议,以帮助你更快地编写和完成代码。这个工具

    2024年02月17日
    浏览(27)
  • 源生成器:根据需要自动生成机械重复代码

    本文概述了利用.NET Compiler Platform(“Roslyn”)SDK 附带的 源生成器 (Source Generator)自动生成机械重复的代码。关于这部分的基础入门知识可以在MSDN [1] 学到。 本文 默认 已经有一个解决方案,包含两个项目。一个是普通C#项目,依赖于另一个源生成器项目。 此处以 Dependenc

    2024年02月01日
    浏览(38)
  • AI自动生成代码工具

    AI自动生成代码工具是一种利用人工智能技术来辅助或自动化软件开发过程中的编码任务的工具。这些工具使用机器学习和自然语言处理等技术,根据开发者的需求生成相应的源代码。以下是一些常见的AI自动生成代码工具,希望对大家有所帮助。北京木奇移动技术有限公司,

    2024年02月04日
    浏览(22)
  • AIGC for code(text-to-codeAIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

    AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直接在你的编辑器中,为你提供代码片段或者整个函数的建议,以帮助你更快地编写和完成代码。这个工具

    2024年02月15日
    浏览(33)
  • 代码自动生成工具——TableGo(实例演示)

            在SpringBoot项目开发中,为了提高开发效率,我们经常需要使用代码自动生成工具来生成一些重复性的代码,比如实体类、DAO、Service、Controller等等。下面介绍几个常用的代码自动生成工具: ①、MyBatis Generator         MyBatis Generator是由MyBatis官方提供的一个代码

    2024年02月07日
    浏览(18)
  • 13.若依代码自动生成功能详解

    基于若依的目录结构,若依本身提供了代码生成功能,可以根据数据库表的内容,生成一些基本的CRUD的前后端的功能。本文将生成过程中的一些注意事项,进行了整理和说明 注意:在使用代码生成功能之前,一定要注意数据库字段,不能是,要不使用的时候,一堆问

    2024年01月25日
    浏览(17)
  • 工具—IDEA代码自动生成插件EasyCode

    官网简介 基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。 只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。 支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,

    2024年02月09日
    浏览(18)
  • 帝国CMS自动生成缩略图和自动分页功能代码

    自动生成缩略图代码 \\\'; 无论你手工发布,还是采集而来,免不了要进行手工操作弄缩略图,不然标题图片没有,挺烦人的 只需一次设定,就可以在文章编辑框里自动勾选上分页和生成缩略图,免除你次次进行操作的麻烦,好了,废话不多说,上菜“ 先到 系统管理数据表 后

    2024年02月03日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包