主要内容

使用代码跟踪验证生成的代码

代码跟踪(可跟踪性)使用超链接在生成的代码行和模型中相应的元素之间导航。要查找代码行及其对应的元素,还可以在模型中的一个或多个元素上单击鼠标右键。这种双向导航是双向的可追溯性。

使用代码跟踪,您可以:

  • 验证生成的代码是否符合预期。您可以确定哪些模型元素对应于一行代码。您可以跟踪来自已审阅或未审阅的不同元素的代码。

  • 验证生成的代码是否符合设计要求。您可以将需求链接到模型元素,并使用代码跟踪来验证为模型元素生成的代码是否满足指定的需求。

当您从Simulink生成代码时金宝app®除非明确未指定,否则可追溯性信息嵌入到生成的代码中。可跟踪性信息包括用于跟踪生成的源代码和模型之间的链接。您可以通过以下任一方式查看生成的代码:

生成的代码包括支持代码跟踪的资源:金宝app

  • 代码元素超链接(当您将光标放在代码上时用下划线表示),用于将生成代码中的变量或类型跟踪到它们在头文件中的声明或定义。

  • 代码注释中的标记,用于标识模型中生成代码行的元素。

  • 行号超链接,链接到生成代码行的模型组件。

可追踪元素

Simulink块和这些状态流支持双向跟踪金宝app金宝app®元素:

  • 过渡

  • 状态转换表

  • MATLAB函数。从MATLAB函数调用的外部代码不支持可跟踪性。金宝app

  • 真值表块

  • 图形功能

  • 金宝appSimulink函数

这些状态流元素支持一个方向的可追溯性:金宝app

  • 事件(代码到模型)

    代码到模型的可跟踪性适用于显式事件,但不适用于隐式事件。在生成的代码中单击显式事件的超链接将在目录模型管理器的窗格。

  • 连接(模型到代码)

    模型到代码的可追溯性适用于至少有一个传出转换的连接。在Stateflow编辑器中右键单击这样的连接,突出显示与该连接的第一个传出转换对应的代码行。

有关详细信息,请参阅在生成的代码中跟踪Stateflow元素.

MATLAB函数直接插入Simulink模型的块也是可跟踪的。有关更多信息,请参阅金宝app在MATLAB功能块中使用可跟踪性.

生成代码的可追溯性

代码视图

  1. 打开模型rtwdemo_评论.

  2. 打开嵌入式编码器®应用程序。建立模型。上C代码选项卡,单击建筑.

    默认情况下HTML代码生成报告是打开的。要使用报告,请看代码生成报告.

  3. 在代码透视图的代码视图中查看生成的代码。

  4. 使用“代码”视图顶部的下拉列表在生成的源文件之间切换。

  5. 源代码包含可追溯性信息,如超链接注释、行号、变量和运算符。将光标放在或单击注释或行号超链接上。Simulink编辑器高亮显示模型中相应的一个或多个块。金宝app

    代码视图在模型旁边打开。光标放置在注释上,并高亮显示相应的块。

  6. 要高亮显示为模型中的块生成的代码,请选择该块。生成的块代码在代码视图中高亮显示。

  7. 要打开引用模型的生成代码,请打开引用模型并在代码视图中查看生成的代码。

代码生成报告

  1. 打开模型rtwdemo_评论.

  2. 打开嵌入式编码器应用程序。上C代码选项卡,单击设置打开“配置参数”对话框。选择创建代码生成报告如果尚未选择它。默认情况下,自动打开报表,代码到模型模型到代码被选中。

  3. 如果您的模型包含引用的模型,并且您希望为引用的模型的代码生成报告启用可跟踪性,那么对每个引用的模型重复前面的步骤。

  4. 建立模型。上C代码选项卡,单击建筑. 构建过程在MATLAB web浏览器中打开代码生成报告。

  5. 在左侧导航窗格中,选择源代码文件。右窗格中的源代码和行号包含指向模型中块的超链接。

  6. 单击注释或行号超链接。Simu金宝applink Editor显示并突出显示模型中相应的一个或多个块。

    包含model.c文件的代码生成报告窗口已打开。鼠标光标放置在注释上,该注释包含指向模型中相应块的超链接。

  7. 要高亮显示模型中块的生成代码,请在该块上单击鼠标右键,然后选择C/C++代码>导航到C/ c++代码. 然后在HTML代码生成报告中突出显示为块生成的代码。要高亮显示所选多个块的生成代码,请按住转移键,选择多个块,然后右键单击要选择的任何一个块C/C++代码>导航到C/ c++代码。生成的块代码将在HTML代码生成报告中突出显示。

  8. 如果模型中有参照模型,请在左侧导航窗格中的参考模型,单击指向参考模型的链接。参考模型的代码生成报告现在显示在MATLAB web浏览器中。

  9. 在左侧导航窗格中,您可以单击返回按钮返回上一个代码生成报告。

可追溯性标签

可追溯性标记出现在生成代码的相应行上方的注释中。标签的格式是<系统>/块名称.

  • 系统是以下内容之一:

    • 正文

    • Simulink引擎指定的唯一系统编号金宝app

  • 块名称是源块的名称。

代码生成器在生成的头文件的注释部分记录模型的标记模型. h. 例如,此注释显示在模型的头文件中,它有一个子系统外面的和嵌套子系统内部的:

/*这是这个模型的系统层次结构。* * : foo * : foo/Outer * : foo/Outer/Inner */

这段代码在生成的代码行上面显示了一个标记注释。源代码模型的根级的Gain块生成以下代码:

/*增益:'/UnDeadGain1'*/rtb\U UnDeadGain1\U h=dead\U增益In1*dead\U增益P.UnDeadGain1\U增益;

此代码在生成的代码行上方显示标记注释。源模型根级别下方一级子系统内的增益块生成此代码:

/*增益:'/Gain'*/dead\u Gain\u B.temp0*=(dead\u Gain\u P.S1\u Gain\u Gain);

运营商可追溯性

生成的代码提供生成代码中的运算符与Simulink块、Stateflow元素或MATLAB功能块之间的可跟踪性。金宝app

要通过使用操作符可追溯性来验证生成的代码,在生成的代码中,单击操作符超链接以突出显示模型中的源块。

支持这些运算符。金宝app

操作员类型 操作员
算术 +,-,*,/,%
+=,- =,*=,/ =,%=
++,--(前缀和后缀)
必然的 !,&&,||
关系 ==,!=,<,>,<=,>=
一点 ~,|,^,&,>>,<<
&=,^=,|=,<<=,>>=
有条件的 吗?

不支持这些操作符。金宝app

操作员类型 操作员示例
赋值运算符 =
和指针运算符的成员 数组下标:一个[b]
指针的地址和指针解引用:&a,*a
成员:a、 b,a->b
其他操作员 函数调用中的括号:傅(a,b)
逗号:A.,B
范围解析:a::b
演员阵容:类型(一)
,新[]
删除,删除[]

可追溯性限制

这些限制适用于嵌入式编码器软件生成的报告:

  • 在以下条件下,如果块名称包含以下内容,则块的模型到代码的可追溯性将被禁用:

    • 一句话(').

    • 星号(*),这会导致相对于模型中其他名称的名称混淆。如果在块名称中或在块名称的末尾,在斜杠(/).

    • 这个角色ÿ(字符(255)).

  • 如果块名包含换行符(\n),为块路径超链接生成的代码注释将换行符替换为一个空格,以便于阅读。

  • 无法将表示这些子系统类型的块跟踪到生成的代码:

    • 虚拟子系统

    • 屏蔽子系统

    • 由于优化而删除代码的非虚拟子系统

    如果无法在子系统级别跟踪子系统,则可以跟踪子系统中的各个块。

  • 如果在与用于生成代码的平台不同的平台上打开模型,则不能使用模型到代码和代码到模型的可跟踪性。

  • 对于在中生成的文件,内联跟踪不可用共享公用事业文件夹

相关的话题