主要内容

调试你的TLC代码

tlcdebug教程概述

摘要目的:介绍了薄层色谱调试器。您将学习如何设置断点和熟悉TLC调试器命令。

文件夹:matlabroot/工具箱/ rtw / rtwdemos / tlctutorial / tlcdebug(开放)

你可以导致TLC调试器被调用时调用构建过程。在本教程中,您将使用它来发现一个bug.tlc申请一个模型simple_log。错误导致生成的代码的输出模型的独立版本不同于其模拟输出。本教程将指导您完成以下步骤:

  1. 开始——运行模型和检查输出

  2. 从模型中生成并运行代码——比较编译结果原始输出

  3. 启动调试器并使用它的命令——你可以做的事情与调试器

  4. 调试timesN.tlc——找出出错了

  5. 修复Bug和验证——简单的方法来修正错误并修复缺陷

开始

  1. 复制文件从tlctutorial / tlcdebug您的当前工作目录。

  2. 在MATLAB®命令窗口,创建一个MEX-file s函数:

    墨西哥人timesN.c

    这避免了拿起版本附带您的模型金宝app®软件。

    请注意

    一个错误可能发生如果你没有之前运行墨西哥人设置

  3. 打开模型simple_log。这个模型看起来是这样的。

  4. 数据导入/导出面板的配置参数对话框,检查时间输出。这将导致模型变量记录到MATLAB工作区。

  5. 运行模型。在模拟选项卡上,单击运行。变量吹捧出现在你的MATLAB工作区。

  6. 双击工作空间窗格的MATLAB命令窗口。变量编辑器显示6 x1数组输出simple_log。显示是这样的:

    第一列包含离散脉冲输出六次步骤(3和0),收集在港口着干活

接下来,生成一个独立的版本simple_log。你执行它,比较其结果的输出仿真软件上面显示。金宝app

请注意

这个练习的目的,TLC文件提供,timesN.tlc,包含一个错误。这个版本必须使用它与模型相同的文件夹中。

从模型中生成并运行代码

  1. 新闻Ctrl + B

    代码生成器生成、编译和链接C源代码。MATLAB命令窗口显示构建的进展,以这些信息:

    # # #创建可执行:simple_log。exe # # #成功完成构建过程模型:simple_log
  2. 运行刚刚创建的独立的模型类型

    simple_log !

    这导致这些消息

    * * * * * *创建启动模型simple_log。垫* *
  3. 检查结果将工作区中的变量。在当前文件夹面板,双击simple_log.mat,然后双击rt_yout(独立版本的变量)工作空间窗格。

    比较rt_yout。你注意到差异吗?你能猜测是什么导致值吗rt_yout改变吗?

    看看生成的C代码,TLC放置在您的构建文件夹(simple_log_grt_rtw)有助于识别问题。

  4. 编辑simple_log.c看看它的MdlOutputs函数,它应该如下所示:

    / *模型输出函数* /静态孔隙simple_log_output (void) {/ * DiscretePulseGenerator:“< Root > /离散脉冲发生器”* / simple_log_B。DiscretePulseGenerator = (simple_log_DW。clockTickCounter < 1.0) & & (simple_log_DW。clockTickCounter > = 0) ?1.0:0.0;如果(simple_log_DW。{simple_log_DW clockTickCounter > = 2.0 - 1.0)。clockTickCounter = 0;其他}{simple_log_DW.clockTickCounter + +;}/ * DiscretePulseGenerator结束:“< Root > /离散脉冲发生器”* / / * s函数(timesN):“< Root > / Gain1st”包含:*外港:< Root > /着干活的* / / *功能块:< Root > / Gain1st * / / * * / simple_log_Y输入乘以3.0。着干活= simple_log_B。DiscretePulseGenerator * 1;}

注意线接近尾声:

simple_log_B。first_output = simple_log_B。DiscretePulseGenerator * 1;
不正确的产品怎么分配到输出时应该接受一个变量,在3.0和0.0之间交替进行?使用调试器来找到答案。

启动调试器并使用它的命令

你用TLC调试器来监控代码生成过程。因为它不是调用默认情况下,您需要显式地请求调试器。

  1. 建立了TLC调试环境,开始构建应用程序:

    1. 选择配置参数>代码生成窗格,然后选择选项保留.rtw文件开始TLC调试器在生成代码。点击好吧

    2. 构建的模型。

      MATLAB命令窗口描述了构建过程。构建停在timesN.tlc文件和显示命令提示符:

      TLC-DEBUG >
  2. 类型帮助TLC调试器命令列表。这里有一些事情你可以在调试器中。

    • 视图和查询各种实体的TLC范围。

      TLC-DEBUG >谁CompiledModel TLC-DEBUG >打印CompiledModel。NumSystems TLC-DEBUG >打印类型(CompiledModel.NumSystems)
    • 检查当前上下文中的语句。

      TLC-DEBUG >列表TLC-DEBUG > 10, 40岁
    • 移动到下一行的代码。

      TLC-DEBUG >下
    • 进入一个函数。

      TLC-DEBUG >步骤
    • 一个常数值分配给一个变量,例如输入信号% u < >

      TLC-DEBUG >分配u = 5.0
    • 你在哪里设置断点或其他代码的一部分。

      TLC-DEBUG >打破timesN.tlc: 10
    • 执行,直到下一个断点。

      TLC-DEBUG >继续
    • 你建立了明确的断点。

      TLC-DEBUG >明确1 TLC-DEBUG >清除所有
  3. 如果你已经尝试了TLC调试器命令,执行剩下的代码完成构建过程,然后构建simple_log一次。构建停在timesN.tlc文件和显示命令提示符:

    TLC-DEBUG >

调试timesN.tlc

现在看看找出与代码是错误的:

  1. 在第20行设置一个断点timesN.tlc

    TLC-DEBUG >打破timesN.tlc: 20
  2. 指导TLC调试器来推进你的断点。

    TLC-DEBUG >继续

    薄层色谱过程的输入,报告其进步,进步第20行timesN.tlc显示一行,停顿了一下。

    # # #加载TLC函数库……# # #首次通过模型缓存用户定义的代码。# # #缓存模型源代码。断点1 00020:%辊idx = RollRegions lcv = RollThreshold,块,“滚”,rollVars
  3. 使用命令查看当前范围的变量。

    TLC-DEBUG >谁内变量:< BLOCK_LOCAL >获得真正rollVars向量块解决系统解决
  4. 检查变量使用print命令(名称区分大小写)。

    TLC-DEBUG >打印获得3.0 TLC-DEBUG >打印rollVars (U, Y)
  5. 执行一个步骤。

    TLC-DEBUG > 00021步:% < LibBlockOutputSignal(0”“液位控制阀,idx) > = \
  6. 因为它是一个内置的函数,通过推进下一个命令。

    TLC-DEBUG >。00022:% < LibBlockInputSignal(0”“液位控制阀,idx) > * 1;

    这是C声明的起源负责错误不断输出,simple_log_B。first_output = simple_log_B。DiscretePulseGenerator * 1;

  7. 放弃戒烟TLC调试器的构建。类型

    TLC-DEBUG >退出

    显示一个错误消息显示,你停止了建立利用TLC调试器辞职命令。关闭错误窗口。

修复Bug和验证

你确定的问题是由于评估一个常数在TLC函数而不是一个变量FcnEliminateUnnecessaryParams ()。这是一个典型的编码错误,很容易修好。这是你需要修复的代码。

%(块,系统)输出函数输出%分配收益= SFcnParamSettings。myGain / * % <类型>块:% <名称> * / % % / *输入乘以% <增加> * / %分配rollVars = [“U”、“Y”] %辊idx = RollRegions lcv = RollThreshold,块,“滚”,rollVars % < LibBlockOutputSignal(0”“液位控制阀,idx) > = \ % < LibBlockInputSignal(0”“液位控制阀,idx) > * 1;% endroll % endfunction % % (EOF) timesN.tlc
  1. 修复的编码错误,编辑timesN.tlc。这条线

    % < LibBlockInputSignal (0”“lcv, idx) > * 1;
    增加评估的输入1。改变行
    % < LibBlockInputSignal (0”“lcv, idx) > * % <增加>;

    保存timesN.tlc

  2. 构建独立的模型。完整的构建通过输入继续在每一个TLC-DEBUG >提示。

  3. 执行独立的模型通过输入

    simple_log !
    的新版本simple_log.mat创建包含它的输出。

  4. 负载simple_log.mat和比较工作空间变量rt_yout,就像你之前做的。第一列中的值现在应该对应。

相关的话题