调试你的TLC代码
tlcdebug
教程概述
摘要目的:介绍了薄层色谱调试器。您将学习如何设置断点和熟悉TLC调试器命令。
文件夹:
(开放)matlabroot
/工具箱/ rtw / rtwdemos / tlctutorial / tlcdebug
你可以导致TLC调试器被调用时调用构建过程。在本教程中,您将使用它来发现一个bug.tlc
申请一个模型simple_log
。错误导致生成的代码的输出模型的独立版本不同于其模拟输出。本教程将指导您完成以下步骤:
开始——运行模型和检查输出
从模型中生成并运行代码——比较编译结果原始输出
启动调试器并使用它的命令——你可以做的事情与调试器
调试
timesN.tlc
——找出出错了修复Bug和验证——简单的方法来修正错误并修复缺陷
开始
复制文件从
tlctutorial / tlcdebug
您的当前工作目录。在MATLAB®命令窗口,创建一个MEX-file s函数:
墨西哥人timesN.c
这避免了拿起版本附带您的模型金宝app®软件。
请注意
一个错误可能发生如果你没有之前运行
墨西哥人设置
。打开模型
simple_log
。这个模型看起来是这样的。在数据导入/导出面板的配置参数对话框,检查时间和输出。这将导致模型变量记录到MATLAB工作区。
运行模型。在模拟选项卡上,单击运行。变量
吹捧
和你
出现在你的MATLAB工作区。双击
你
在工作空间窗格的MATLAB命令窗口。变量编辑器显示6 x1数组输出simple_log
。显示是这样的:第一列包含离散脉冲输出六次步骤(3和0),收集在港口
着干活
。
接下来,生成一个独立的版本simple_log
。你执行它,比较其结果的输出仿真软件上面显示。金宝app
请注意
这个练习的目的,TLC文件提供,timesN.tlc
,包含一个错误。这个版本必须使用它与模型相同的文件夹中。
从模型中生成并运行代码
新闻Ctrl + B。
代码生成器生成、编译和链接C源代码。MATLAB命令窗口显示构建的进展,以这些信息:
# # #创建可执行:simple_log。exe # # #成功完成构建过程模型:simple_log
运行刚刚创建的独立的模型类型
simple_log !
这导致这些消息
* * * * * *创建启动模型simple_log。垫* *
检查结果将工作区中的变量。在当前文件夹面板,双击
simple_log.mat
,然后双击rt_yout
(独立版本的变量你
)工作空间窗格。比较
rt_yout
与你
。你注意到差异吗?你能猜测是什么导致值吗rt_yout
改变吗?看看生成的C代码,TLC放置在您的构建文件夹(
simple_log_grt_rtw
)有助于识别问题。编辑
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;
启动调试器并使用它的命令
你用TLC调试器来监控代码生成过程。因为它不是调用默认情况下,您需要显式地请求调试器。
建立了TLC调试环境,开始构建应用程序:
选择配置参数>代码生成窗格,然后选择选项保留.rtw文件和开始TLC调试器在生成代码。点击好吧。
构建的模型。
MATLAB命令窗口描述了构建过程。构建停在
timesN.tlc
文件和显示命令提示符:TLC-DEBUG >
类型
帮助
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 >清除所有
如果你已经尝试了TLC调试器命令,执行剩下的代码完成构建过程,然后构建
simple_log
一次。构建停在timesN.tlc
文件和显示命令提示符:TLC-DEBUG >
调试timesN.tlc
现在看看找出与代码是错误的:
在第20行设置一个断点
timesN.tlc
。TLC-DEBUG >打破timesN.tlc: 20
指导TLC调试器来推进你的断点。
TLC-DEBUG >继续
薄层色谱过程的输入,报告其进步,进步第20行
timesN.tlc
显示一行,停顿了一下。# # #加载TLC函数库……# # #首次通过模型缓存用户定义的代码。# # #缓存模型源代码。断点1 00020:%辊idx = RollRegions lcv = RollThreshold,块,“滚”,rollVars
使用
谁
命令查看当前范围的变量。TLC-DEBUG >谁内变量:< BLOCK_LOCAL >获得真正rollVars向量块解决系统解决
检查变量使用print命令(名称区分大小写)。
TLC-DEBUG >打印获得3.0 TLC-DEBUG >打印rollVars (U, Y)
执行一个步骤。
TLC-DEBUG > 00021步:% < LibBlockOutputSignal(0”“液位控制阀,idx) > = \
因为它是一个内置的函数,通过推进
下一个
命令。TLC-DEBUG >。00022:% < LibBlockInputSignal(0”“液位控制阀,idx) > * 1;
这是C声明的起源负责错误不断输出,
simple_log_B。first_output = simple_log_B。DiscretePulseGenerator * 1;
。放弃戒烟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
修复的编码错误,编辑
timesN.tlc
。这条线% < LibBlockInputSignal (0”“lcv, idx) > * 1;
% < LibBlockInputSignal (0”“lcv, idx) > * % <增加>;
保存
timesN.tlc
。构建独立的模型。完整的构建通过输入
继续
在每一个TLC-DEBUG >
提示。执行独立的模型通过输入
simple_log !
simple_log.mat
创建包含它的输出。负载
simple_log.mat
和比较工作空间变量rt_yout
与你
,就像你之前做的。第一列中的值现在应该对应。