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

代码优化综述

使用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进行评估,这块的详细使用方法待补充
在这里插入图片描述
上述各种选项,总结如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值