本文研究Embedded Coder中的Optimization配置,通过一些模型示例和代码直观地比较配置对代码生成的影响。由于配置选项很多,本文会长期更新。
1 Optimization配置
Optimization配置中包含了代码生成的优化选项。在Simulink配置窗口的Code Generation下可以找到Optimization配置。
后文会研究Optimization配置中的一些常用选项。
2 Default parameter behavior
2.1 描述
该配置直译过来是“默认参数行为”,其含义是,生成代码时常量参数的形式。
该配置中包含两个选项:Tunable和Inlined。如果选Tunable,意为可调式,生成的代码就会以StorageClass中的Auto类来表现常数参数。如果选Inlined,意为内联式,会把参数“内联”到代码中,表现为直接的数值。
配置中默认为Inlined。
2.2 模型示例
打开Simulink,建立一个简单的带有Gain模块的模型。
将Gain模块的增益系数写为3.观察后续这个系数在代码中的表现方式。
2.3 生成代码
1)当Default parameter behavior选为Tunable时,生成的代码如下:
可以看出,输入变量乘以一个系数demo_P.Gain_Gain。这个变量在demo_data.c中定义。
2)当Default parameter behavior选为Inlined时,生成的代码如下:
这里可以看出,系数直接写成了3.0F这个浮点数。也就是说,把Gain参数“内联”到代码中了。
2.4 分析与思考
比较两种代码生成的方式,显然是Inlined更好。这是因为将参数生成全局变量会占据芯片的RAM资源。
在企业级项目中,每个模型都可能有数十个这种常量,广泛地存在于Constant,Gain等模块中。如果这些常量占据了大量的RAM资源,就可能会导致链接过程中出现资源溢出。