主要内容

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

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

使用代码跟踪,您可以:

  • 验证生成的代码是否如您所期望的那样。您可以确定与一行代码对应的模型元素。您可以跟踪来自已评审或未评审的不同元素的代码。

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

当您从Simulink生成代码时万博1manbetx®模型,可跟踪性信息嵌入到生成的代码中,除非明确指定。可跟踪性信息包括用于在生成的源代码和模型之间进行跟踪的链接。你可以通过以下方式查看生成的代码:

生成的代码包括支持代码跟踪的资源:万博1manbetx

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

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

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

可追踪的元素

Simulink块和这些statflow支持双向跟踪万博1manbetx万博1manbetx®元素:

  • 转换

  • 状态转换表

  • MATLAB函数。从MATLAB函数调用的外部代码不支持可万博1manbetx跟踪性。

  • 真值表块

  • 图形化功能

  • 万博1manbetx仿真软件的功能

这些statflow元素支持一个方向的可跟踪性:万博1manbetx

  • 事件(code-to-model)

    代码到模型的可跟踪性适用于显式事件,但不适用于隐式事件。在生成的代码中单击显式事件的超链接将突出显示该项内容窗格中的。

  • 连接(模型到代码)

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

有关更多信息,请参见<一个href="//www.tianjin-qmedu.com/help/ecoder/ug/trace-stateflow-elements-in-generated-code.html" class="a">跟踪生成代码中的状态流元素

MATLAB函数直接插入到Simulink模型中的块也是可跟踪的。万博1manbetx有关更多信息,请参见<一个href="//www.tianjin-qmedu.com/help/ecoder/ug/using-traceability-in-matlab-function-blocks.html" class="a">在MATLAB函数块中使用可追溯性

可追溯性在生成的代码

代码视图

  1. 打开模型<一个href="matlab:rtwdemo_comments" target="_blank">rtwdemo_comments

  2. 打开嵌入式编码器®建立模型。在C代码选项卡上,单击构建

    该HTML代码生成报告默认打开。要使用报告,见<一个href="//www.tianjin-qmedu.com/help/ecoder/ug/verify-generated-code-by-using-code-tracing.html" class="intrnllnk">代码生成报告

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

  4. 通过使用Code视图顶部的下拉列表在生成的源文件之间进行切换。

  5. 源代码包含可跟踪性信息,如超链接注释、行号、变量和操作符。将光标放在或单击注释或行号超链接上。Simu万博1manbetxlink Editor在模型中突出显示相应的块或块。

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

  6. 要突出显示模型中某个块生成的代码,请选择该块。代码块生成的代码在code视图中突出显示。

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

代码生成报告

  1. 打开模型<一个href="matlab:rtwdemo_comments" target="_blank">rtwdemo_comments

  2. 打开嵌入式编码器应用程序C代码选项卡上,单击设置打开配置参数对话框。选择<一个href="//www.tianjin-qmedu.com/help/rtw/ref/create-code-generation-report.html" class="a">创建代码生成报告如果尚未选中。默认情况下,<一个href="//www.tianjin-qmedu.com/help/rtw/ref/open-report-automatically.html" class="a">自动打开报告,<一个href="//www.tianjin-qmedu.com/help/ecoder/ref/code-to-model.html" class="a">Code-to-model,<一个href="//www.tianjin-qmedu.com/help/ecoder/ref/model-to-code.html" class="a">模型到代码的被选中。

  3. 如果模型包含参考模型,并要启用的参考模型的代码生成报告的可追溯性,重复每个参考模型前面的步骤。

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

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

  6. 点击评论或行号的超链接。Simu万博1manbetxlink的编辑器显示,并强调在模型中对应的块或多个块。

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

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

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

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

可追溯性标记

跟踪标记出现在生成代码的相应行上面的注释中。标签的格式为<系统> /block_name

  • 系统是下列情况之一:

    • 文本

    • 由Simulink引擎分配的唯一系统编号万博1manbetx

  • block_name源块的名称。

代码生成器在生成的头文件的注释部分记录模型的标记模型.h.例如,这个注释出现在模型的头文件中,喷火,具有子系统还有一个嵌套子系统内心的

/ *以下是此模型系统的层次结构。* * <根>:FOO * :富/外* :富/外部/内部* /

这段代码在生成的代码行上面显示了一个标记注释。在源模型的根水平的增益块生成的代码:

/*获取:'/UnDeadGain1' */ rtb_UnDeadGain1_h = dead_gain_U. txtIn1 * dead_gain_P.UnDeadGain1_Gain;

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

/*增益:'/增益' */ dead_gain_B。temp0 * = (dead_gain_P.s1_Gain_Gain);

运营商可追溯

生成的代码提供了生成代码中的操作符与Simulink块、statflow元素或MATLAB函数块之间的可跟踪性。万博1manbetx

为了验证通过使用操作者可追踪性生成的代码,在生成的代码,单击操作员超链接以高亮显示模型的源块。

支持这些操作符。万博1manbetx

符类型 运营商
算术 +-/
+=- =* =/ =% =
++-(前缀和后缀)
逻辑 &&||
相关的 ==.! =<><=> =
|>><<
& =^ =| =< < => > =
有条件的

这些运营商不支持。万博1manbetx

符类型 操作符的例子
赋值运算符
和指针操作符的成员 数组下标:一个并[b]
地址和指针解引用:*一个
成员:a.ba - b >
其他运营商 函数调用中的括号:foo (a, b)
逗号:一个b
范围解析:b::
演员:类型(a)中
新的新[]
删除删除[]

可追溯性的限制

这些限制适用于由Embedded Coder软件生成的报告:

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

    • 单引号().

    • 星号()导致名称压延歧义相对于其他的名字在模型中。此名称-压延歧义发生,如果在一个块中的名称或在块名,一个星号先于的端部或如下斜线(/).

    • 人物ychar (255)).

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

  • 你不能跟踪表示这些子系统类型的块到生成的代码:

    • 虚拟子系统

    • 戴面具的子系统

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

    如果您不能在子系统级别跟踪子系统,那么您可以跟踪子系统中的单个块。

  • 如果您在一个不同于用于生成代码的平台上打开一个模型,那么您就不能使用模型到代码和代码到模型的可跟踪性。

  • 中生成的文件无法使用内联跟踪shared_utils文件夹中。

相关话题