主要内容

跟踪生成的C/ c++代码马铃薯草源代码

跟踪生成的C/ c++代码到原始的MATLAB®源代码帮助您:

  • 理解生成的代码如何实现算法。

  • 评估生成代码的质量。

您可以使用以下方法之一跟踪:

  • 配置MATLAB编码器™生成包含MATLAB源代码作为注释的代码。在评论中,可追溯性标签在源代码的每一行之前。可追溯性标签提供有关源代码位置的详细信息。如果您有嵌入式编码器®,在代码生成报告,追溯标签链接到相应的MATLAB源代码。

  • 使用Embedded Coder,生成包含交互式可跟踪性的代码生成报告。报告中的交互式跟踪帮助您可视化MATLAB源代码和生成的C/ c++代码之间的映射。看到交互式跟踪MATLAB代码和生成的C/ c++代码(嵌入式编码)

生成可追溯性标签

要在生成的代码中生成跟踪标签,可以将MATLAB源代码作为注释生成。

  • 在里面MATLAB编码器应用程序,MATLAB源代码作为注释是的

  • 在代码生成配置对象中,设置Matlabsourcecomment.真的

可追溯标签的格式

在生成的代码中,跟踪标记出现在注释中MATLAB源代码的前面。标签的格式为:

例如,这个注释表明代码X = r * cos;出现在线4源码文件直线..M.

/ *'直线:4'X = r * cos;*/

生成代码中注释的位置

生成的注释中包含源代码和可跟踪性标记,如下所示。

直线的源代码

在直线源代码没有如果尽管或者转变语句,包含源代码的注释位于实现源代码语句的生成代码之前。此注释出现在生成代码之前的用户注释之后。

例如,在以下代码中,用户注释,/*将极坐标转换为笛卡尔坐标*/,出现在生成的注释之前,该注释包含源代码的第一行,以及它的跟踪标记,
/* '直线:4' x = r * cos(theta);*/

MATLAB代码

功能[x, y] =直线r,% # codegen%转换到笛卡尔岛X = r * cos;Y = r * sin;

评论C代码

void直线(双r,双theta,双*x,双*y){/*将极坐标转换为笛卡尔坐标*/ /* '直线:4' x = r * cos(theta);*/ *x = r * cos();/* '直线:5' y = r * sin(theta);*/ *y = r * sin(theta);}

如果是陈述

关于如果语句紧跟在实现该语句的代码前面。此注释出现在生成代码之前的用户注释之后。关于elseif别的子句出现在实现子句的代码之后,并且出现在为子句中的语句生成的代码之前。

MATLAB代码

功能y = ifstmt(u,v)% # codegen如果u> v y = v + 10;elseifU == v y = U * 2;别的Y = V  -  10;结束

评论C代码

Double ifstmt(Double u, Double v) {Double y;/ * ifstmt: 3 '如果u > v * / (u > v){/ *”ifstmt: 4“y = v + 10;*/ y = v + 10.0;} elseif (u == v) {/* 'ifstmt:5' elseif u == v */ /* 'ifstmt:6' y = u * 2;*/ y = u * 2.0;} else {/* 'ifstmt:7' else */ /* 'ifstmt:8' y = v - 10;*/ y = v - 10.0;}返回y;}

对于陈述

关于语句头紧跟在实现该头的生成代码的前面。此注释出现在生成代码之前的用户注释之后。

MATLAB代码

功能y = forstmt (u)% # codegeny = 0;我= 1:你= y + 1;结束

评论C代码

双福尔斯(双U){双y;INT I;/ *'forstmt:3'y = 0;* / y = 0.0;/ *'forstmt:4'对于i = 1:u * / for(i = 0; i <(int)u; i ++){/ *'forstmt:5'y = y + 1;* / y ++;}返回y;}

虽然陈述

关于尽管语句头紧跟在生成的实现语句头的代码的前面。此注释出现在生成代码之前的用户注释之后。

MATLAB代码

功能Y = subfcn(Y) code .inline(“永远”);尽管Y <100 Y = Y + 1;结束

评论C代码

void subfcn(double * y){/ *'子汇总:2'coder.inline('从不');* / / *'子流:3',而y <100 * / while(* y <100.0){/ *'子汇总:4'y = y + 1;* /(* y)++;}}

切换陈述

关于转变语句头紧跟在生成的实现语句头的代码的前面。此注释出现在生成代码之前的用户注释之后。关于案件除此以外子句立即出现在实现子句的生成代码之后,以及为子句中的语句生成的代码之前。

MATLAB代码

功能y = switchstmt(u)% # codegeny = 0;转变u案件1 y = y + 1;案件3 y = y + 2;除此以外Y = Y - 1;结束

评论C代码

双switchstmt(双U){双y;/ *''switchstmt:3'y = 0;* / / *'switchstmt:4'开关U * /开关((int)u){案例1:/ *'switchstmt:5'案例1 * // *'switchstmt:6'y = y + 1;* / y = 1.0;休息;案例3:/ *'switchStmt:7'案例3 * // *'switchstmt:8'y = y + 2;* / y = 2.0;休息;默认值:/ *'switchstmt:9'否则* / / *'switchstmt:10'y = y  -  1;* / y = -1.0; break; } return y; }

可追溯性标记的局限性

  • 你不能包括MATLAB源代码作为注释:

    • MathWorks®工具箱功能

    • p代码

  • 评论的出现或位置可以不同:

    • 即使消除了实现代码,例如,由于常量折叠,注释仍然可以出现在生成的代码中。

    • 如果消除了完整的函数或代码块,则可以从生成的代码中消除注释。

    • 对于某些优化,可以将注释与生成的代码分开。

    • 即使您不选择在生成的代码中包含源代码注释,即使生成的代码也包括来自MATLAB源代码的法律上必需的评论。

相关话题