文档

静态代码度量

静态代码度量

代码生成器执行静态分析生成的C或c++代码,并在静态代码度量报告部分的HTML代码生成报告。当您将光标放在生成的代码中的函数或变量上时,您还可以看到度量。

你可以使用报告中的资料:

  • 找出每个文件中的文件数和代码行数。

  • 估计每个函数的代码行数和堆栈使用情况。

  • 比较每次更改模型或MATLAB时生成的文件、函数、变量和代码行数的差异®算法。

  • 根据全局变量的大小加上估计的堆栈大小,确定目标平台和分配给堆栈的RAM。

  • 确定可能的性能慢点,例如最大的全局变量或从堆栈使用情况来看开销最大的调用路径。

  • 查看一个函数的圈复杂度,它计算通过一个函数的线性独立路径的数量。

  • 查看函数调用树。确定最长的调用路径以估计最坏情况下的执行时间。

  • 查看所选代码替换库提供的目标函数如何在生成的代码中使用。

有关示例,请参见:

静态代码度量分析

生成代码的静态分析只在源代码上执行,而不执行程序。静态代码度量分析的结果包含在静态代码度量部分的HTML代码生成报告。如果从MATLAB代码生成MEX函数,则报告不可用。

生成的源代码文件的静态分析:

  • 使用指定的C数据类型。对于仿真金宝app软件®模型中指定这些数据类型硬件实现>生产硬件对话框中的。对于从MATLAB代码生成的代码,可以在硬件选项卡的MATLAB编码器™“项目设置”对话框或使用代码生成配置对象。实际的对象代码度量可能因特定于目标的编译器和平台设置而不同。

  • 仅在指定时包含自定义代码。对于Si金宝appmulink模型,您可以在代码生成>自定义代码窗格。对于从MATLAB代码生成的代码,您可以在调试选项卡的MATLAB编码器“项目设置”对话框或使用代码生成配置对象。如果生成的代码包含标准C运行时库中不包含的特定于平台的文件,则生成错误报告。

  • 对于Si金宝appmulink模型,包括从引用模型生成的代码。

  • 对结构的所有成员使用1字节对齐,以估计全局和局部数据结构的大小。结构的大小是通过对其所有字段的大小进行求和来计算的。这个估计表示结构的最小可能大小。

  • 计算函数的自身堆栈大小作为函数内部局部数据的大小,不包括输入参数。函数的累积堆栈大小是其自身堆栈大小加上其被调用函数的累积堆栈大小的最大值。例如,如果被调用函数的累积堆栈大小表示为accum_size1…accum_sizeN,则函数的累积堆栈大小为

    accumulated_stack_size = self_stack_size + max(accum_size1,…,accum_sizeN)

    例如,考虑这段生成的代码:

    现在考虑如下所示的代码度量:

    累积的堆栈大小是12字节,因为函数的自身堆栈大小Debug_b为12字节,且4个输入参数对累计堆栈大小的计算没有贡献。

  • 在估计函数的堆栈大小时,静态分析在递归调用的第一个实例时停止。的函数信息表指示函数调用路径中何时发生递归。代码生成仅为statflow事件广播和图形函数生成递归代码(如果它被编写为递归函数)。

  • 计算一个函数的圈复杂度为决策数加1:

    CC =决策数量+ 1
    下面的构造添加了一个决策:

    • If语句

    • else if语句

    • Switch语句(每个决定一个情况下分支机构)

    • 循环语句:While, For, Do-while

    请注意

    上述构造中的布尔运算符不会添加额外的决策。

  • 不包括ert_main.c,因为你可以选择提供自己的服务c

查看生成代码中的静态代码度量和定义

代码生成报告

当您在代码生成报告中查看代码时,要访问代码度量和定义:

  • 代码生成>报告窗格,如果选择静态代码度量复选框,则可以将光标放在代码窗口中的全局变量和函数上,以查看代码度量信息。

  • 在代码窗口中,如果单击链接的变量或函数,则会打开代码检查窗口。该窗口提供了指向变量或函数定义的链接。在代码生成>报告窗格,如果您选择静态代码度量复选框,您还可以看到变量或函数的代码度量信息。

代码视图

当您在code透视图的code视图中查看代码时,将光标放在全局变量和函数上方的省略号菜单上,以查看代码度量信息。

工具提示提供了到变量或函数定义的链接。

静态代码度量报告限制

如果模型的目标配置导致生成以下代码,则静态代码度量不可用:

  • 包含不是由模型层次结构生成的头文件,也不是系统头文件

  • 使用无法识别的宏