评估生成的代码的性能
了解生成的代码和 RAM/ROM 数据的特性如何影响 RAM/ROM 指标。
有关本系列中示例模型和其他示例的信息,请参阅 为 C 代码生成准备控制算法模型。
代码评估
您可以基于以下两个主要指标来评估生成的代码:执行速度和内存使用情况。在某些情况下,改进某个指标意味着牺牲另一个指标。例如,您可以通过消耗更多内存来获得更快的执行速度。
内存可进一步分类为 ROM(只读内存)和 RAM(随机存取内存)。
从 RAM 访问数据比从 ROM 访问数据更快。
可执行文件和数据必须存储在 ROM 中,因为 RAM 不会在电源重启后保留数据。
此示例评估内存要求,并将内存使用情况分为函数部分和数据部分。该示例不评估执行速度。
编译器信息
此评估使用 Freescale™ CodeWarrior® 编译器。
编译器:Freescale™ CodeWarrior®
版本:5.5.1.1430
目标处理器:Power PC 565
查看代码指标
如 在 Simulink 环境之外编译集成的代码 和 测试生成的代码 中所述,生成的代码可能需要使用工具函数。工具函数会一次性消耗固定的内存成本。由于存在这种固定开销,此示例中的数据显示以下方面的内存使用情况:
算法:从 Simulink® 模块图生成的 C 代码加上数据定义函数
实用工具:作为 Simulink® Coder™ 库源的一部分的函数
完整:算法和实用工具的总和
编译选项配置
此示例中的三次评估使用相同的编译配置。Freescale™ CodeWarrior® 配置为使用最少的内存并应用所有适用的优化。
配置 1:使用双精度数据类型的可重用函数
Source files:
PCG_Eval_File_1.zip
Data Type:全部为双精度
Included Data:工程包含编译所需的所有数据(包括声明为
extern
的数据:pos_rqst
、fbk_1
和fbk_2
)Main Function:来自 在 Simulink 环境之外编译集成的代码 的
example_main
的修改版本Function Call Method:适用于 PI 控制器的可重用函数
Memory Usage
Function Data Algorithms 1172 bytes 549 bytes Utilities 592 bytes 40 bytes Full 1764 bytes 589 bytes
配置 2:使用单精度数据类型的可重用函数
在此配置中,模型数据使用单精度浮点数据类型而不是双精度。
模型配置
Source files:
PCG_Eval_File_2.zip
Data Type:全部为单精度
Included Data:工程包含编译所需的所有数据(包括声明为
extern
的数据:pos_rqst
、fbk_1
和fbk_2
)Main Function:来自 在 Simulink 环境之外编译集成的代码 的
example_main
的修改版本Function Call Method:适用于 PI 控制器的可重用函数
Memory Usage
Function Data Algorithms 800 bytes 308 bytes Utilities 592 bytes 40 bytes Full 1392 bytes 348 bytes
此配置的数据内存使用量仅为第一种配置的 56%:308 字节,而第一种配置使用了 549 字节。另外,此配置的函数内存使用量为第一种配置的 68%:800 字节,而第一种配置使用了 1172 字节。对于此系统,使用单精度而非双精度不会影响控制算法的精度,因此可以使用此配置来实现更高效的代码。
配置 3:使用单精度数据类型的不可重用函数
Source files:PCG_Eval_File_3.zip
Data Type:全部为单精度
Included Data:工程包含编译所需的所有数据(包括声明为
extern
的数据:pos_rqst
、fbk_1
和fbk_2
)Main Function:来自 在 Simulink 环境之外编译集成的代码 的
example_main
的修改版本Function Call Method:函数接口为
void void
,因此通过全局变量进行数据交换
Memory Usage
Function Data Algorithms 948 bytes 348 bytes Utilities 592 bytes 40 bytes Full 1540 bytes 388 bytes
此配置比前一个配置消耗更多的数据内存和函数内存。