代码优化综述

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

  1. remove initialization code
  2. removing termination code
  3. removing unnecessary data support
  4. conditional input branch execution
  5. optimizing data storage
  6. inlining parameter
  7. block reduction
  8. removing wrapping code”、“exception handing”和code generation objectives等
    下面详细说明下。

代码优化选项

static code metric
用来统计生成代码的概况,如:代码行数、全局变量、入口函数等。

选择该选项后,生成代码的报告会有个统计页:

remove initialization code
用来把I/O初始化和内部变量初始化等代码优化掉。

优化前:

优化后,将I/O和内部数据的初始化优化掉了:

该优化项的影响:

removing termination code
用来把变量的中止赋值等代码优化掉:

优化前:

优化后:

该优化项的影响:

removing unnecessary data support
此处各个选项的意义大致如字面意思,详细意思和注意事项待补充

该优化的影响:

conditional input branch execution
该选项针对于switch等if判断模块,不激活时,代码会计算switch每个分支的结果,然后判断输出。激活该选项后,先进行switch判断,在输出分支结果。

如下面这个模型:

不选择该选项时,生成的代码如下,先进行分支结果计算,然后再用if-else判断输出:

勾选该项代码如下,先进行if-else进行判断要输出哪个分支,然后计算该分支的结果。这个选项有点类似于预编译,谨慎使用

该优化项的影响:

optimizing data storage
激活第一个选项后(signal storage reuse),下面几个选项会激活

这里有3个地方需要详细说一下:
1)激活“signal storage outputs”和“enable local block outputs”前:

激活“signal storage outputs”和“enable local block outputs”后如下图,生成了模型中的3个中间变量(local block outputs)


2)在上述激活“signal storage outputs”和“enable local block outputs”的基础上,再激活“reuse local block outputs”代码如下图,代码中部分中间变量被省略了。(对比上上图)

3)在上述激活“signal storage outputs”、“enable local block outputs”和“reuse local block outputs”的基础上,再激活“eliminate superfluous local variable(expression folding)”代码如下图,代码中部分中间变量进一步被省略了。(对比上图中的红字)

inlining parameter
这个是很常用的选项,但如果该模型有标定量(storage class为volatile)时慎用。

选择为tunable时:

选择为inlined且conditional input branch execution勾选后,代码如下图。

block reduction
该选项主要优化3个地方:

  1. 多余的数据类型转换模块(data type conversation)
  2. 死逻辑代码(无用代码,覆盖度问题)
  3. 单任务中的执行速率转换模块(fast-to-slow transition block in a single-tasking system)

如上图,将switch设置为inlined后,代码会被优化如下,

该选项的影响:

另外还有“removing wrapping code”、“exception handing”和code generation objectives

1)removing wrapping code是数据溢出时的操作,建议在模型测试时发现,而不是在代码生成中解决。

2)exception handing是数据类型检测,如两个uint8相除后可能会出现single,此处也应该在模型测试时发现,而不应在代码生成中解决。

3)code generation objectives是simulink自动帮助开发者优化,可以自行设置优化目标,也比较常用。

总结

可以用measuring changes in performence进行评估,这块的详细使用方法待补充

上述各种选项,总结如下:

Simulink自动代码生成3——优化生成的代码(optimizing generated code)相关推荐

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

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

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

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

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

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

  4. Simulink自动代码生成

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Python中的range和xrange区别
  2. CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
  3. 《C和指针》读书笔记第三章数据
  4. 知识图谱前沿技术课程暨学术研讨会(武汉大学站)
  5. 服务器做文件共享服务特点,服务器主机做共享文件
  6. 翻译SSD论文(Single Shot MultiBox Detector)
  7. 发行版迁移及二进制兼容性注意事项
  8. 关于delete字符串 需不需要加 [ ]
  9. es6 属性及常用新属性汇总
  10. 一名待业小生亲身调研揭秘10家大数据培训机构“内幕”
  11. android q mix3,Android Q+5G 小米MIX3流畅播放8K视频
  12. vs为什么打了断点不断_2019年丹麦羽毛球公开赛焦点对阵:林丹VS塞帕拉内斯 石宇奇 VS 马克卡尔尤B...
  13. PCB布局布线注意事项
  14. OSChina 周一乱弹 —— 程序猿到底是多有才?
  15. Aras Innovator 11 sp2安装
  16. 美团/饿了么外卖CPS联盟返利公众号小程序核心源码
  17. 真正的自由是节制欲望自律简朴地去生活
  18. Drools Accumulate 语法解析及使用
  19. WIFI性能测试二 --- wifi的ANI功能
  20. 在java中如何根据三角函数中的正弦值 余弦值 正切值求该角度值

热门文章

  1. 超模坎蒂丝身穿皮衣出镜时尚品牌“Animale”黑白广告大片
  2. windows创建影子账户
  3. 常用的前端自动化测试工具介绍 —— Karma
  4. 麦克风、直播声卡、补光灯、音箱等CE认证流程介绍
  5. 猫和老鼠汤姆看java_《猫和老鼠》最可怕的瞬间!原来看汤姆和杰瑞都会吓到孩子!...
  6. 基于js的一个日历控件,点击按钮,弹出日历,显示日期到文本框
  7. PhysX3.4文档(12) -- Geometry Queries
  8. 从零开始学WCF(14)WCF安全性概述
  9. 计算离散点曲率的方法
  10. 学历:门槛还是机会?