这个例子展示了如何在MATLAB之间跟踪®源代码和生成的C/ c++代码。跟踪源代码和生成代码之间的关系可以帮助您:
了解代码生成器如何实现算法。
调试生成的代码中的问题。
评估生成代码的质量。
如果你有嵌入式编码器®并使生成的代码报告具有可追溯性,可以查看MATLAB源代码和生成的C/ c++代码相邻。当您将指针移动到代码上时,您可以沿着高亮显示的跟踪到相应的生成代码或MATLAB源代码。
为了说明交互式可跟踪性,这个示例生成了一个用于生成MATLAB函数的C静态库的报告lpsolve
这解决了线性规划:
使y = c*x最大化
服从于A*x <= b
其中x >= 0, b >= 0
该示例还使用了一个测试函数lpsolve_test
调用lpsolve
具有代表性的输入值。
复制lpsolve.m
和lpsolve_test.m
到一个可写文件夹。
拷贝文件(fullfile (docroot,“工具箱”,“是”,“例子”,“lpsolve.m”)复制文件(fullfile (docroot,“工具箱”,“是”,“例子”,“lpsolve_test.m”))
在生成C/ c++代码之前,最好的做法是对MATLAB代码进行筛选,以确定代码生成准备情况。
coder.screener (“lpsolve”)
代码生成准备就绪报告指出lpsolve
适用于代码生成。
通过生成和测试MEX函数来检查运行时问题也是一种最佳实践。
要指定输入参数的类型,请将有代表性的输入值传递给codegen
arg游戏
选择。或者,因为您有一个测试函数,您可以使用coder.getArgTypes
来确定类型。
要生成和测试MEX函数,请使用以及
选择。
C = [2 3 1 1];A = [2 3 1 -1;1 0 2 1;0 2 1 1];b =(27日、9日、18);codegenlpsolvearg游戏c {b}以及lpsolve_test
运行测试文件:'lpsolve_test'和MEX函数'lpsolve_mex'。X = 5 7 0 4 y = 35
codegen
成功生成并运行MEX函数。
要生成具有交互跟踪性的报告:
创建一个编码器。EmbeddedCodeConfig
对象。的EnableTraceability
属性控制的可追溯性。默认情况下,EnableTraceability
属性是真正的
.
属性指定输入参数的类型,将有代表性的输入值传递给arg游戏
选择。
使用报告
选择。
cfg = coder.config (“自由”,“是”,真正的);codegen配置cfglpsolvearg游戏c {b}报告
要打开代码生成报告,单击查看报告.
在代码窗格中,可以看到lpsolve.m
.
要启用跟踪,请在报告选项卡上,单击跟踪代码.
您可以看到MATLAB源代码和生成的C代码彼此相邻。
您可以从MATLAB代码跟踪到C代码,或者从C代码跟踪到MATLAB代码。可跟踪代码在您要跟踪的那一边用蓝色标记,在您要跟踪的那一边用橙色标记。当您将指针移动到可跟踪代码上时,代码会用紫色突出显示,您可以在另一侧看到相应代码的跟踪。当您通过单击突出显示的代码时,代码会变成黄色,即使您将指针从所选区域移开,也可以看到跟踪。在您按下之前,代码将保持选中状态Esc或者选择不同的代码。若要更改跟踪所在的那一边,请选择另一边的代码。
在示例报告中探索跟踪。
在MATLAB代码中,指向而
-循环,从第38行开始向下滚动,直到整个而
-loop在视图中。
可以看到这个符号,它告诉您高亮显示的MATLAB代码有一个不在视图中的跟踪。
您可以在C代码窗格的单独窗口中看到相应的C代码。
在C代码窗格中,向下滚动,直到看到对应于而
循环。
在MATLAB代码中,将指针移动到而
循环。突出显示变量、表达式和代码块。
当您将指针移动到属于较大表达式的一部分的表达式上时,不同颜色的紫色将帮助您在相应的C代码中找到相关的表达式。例如,在第43行,暂停我
.
在MATLAB代码中,将指针移回而
-loop从第38行开始。当整个循环用紫色突出显示时,通过单击选择它。当您将指针移到跟踪之外时,黄色突出显示标识所选跟踪。
清除选择,按Esc或者选择不同的代码。
当代码跟踪到相应源代码或生成代码中的多个位置时:
如果您在正在跟踪的代码上暂停,在代码窗格的顶部,您将看到跟踪的数量。
如果一些轨迹不在视图中,您将看到一个符号,该符号告诉您有多少轨迹不在视图中。
在代码窗格中,如果您选择要跟踪的代码,则可以在代码窗格的顶部选择要查看的跟踪。
在报告中lpsolve
,查看多个轨迹。
暂停/线36
.
在代码窗格的顶部,您可以看到这一行36
有两个痕迹。
选择一行36
.
在代码窗格的顶部,您可以看到第一个跟踪的位置。
若要列出所有轨迹,请单击轨迹右侧的箭头。
的代码生成报告lpsolve
,从MATLAB代码到一个C文件的所有跟踪lpsolve.c
.如果MATLAB代码跟踪到多个C文件,在C代码上面,您会看到一个符号,例如它提供可以在其中找到跟踪的附加文件的数量。如果单击符号,可以选择要查看的文件。如果您选择MATLAB代码,那么您可以选择您想要看到的跟踪。
同样,上面的MATLAB源代码中,有一个符号如表示突出显示的C代码跟踪到多个MATLAB文件。
查看lpsolve.c
在代码窗格左侧的生成文件列表中,单击lpsolve.c
.
要查看代码窗格左侧的MATLAB代码,请单击MATLAB函数,例如:lpsolve
.
当您不在跟踪模式时:
在MATLAB代码中,如果您指向一个变量或表达式,工具提示将提供诸如类型之类的信息。
在C代码中,链接指向代码的其他部分,比如类型或函数定义。
当您处于跟踪模式时,要启用MATLAB代码工具提示和C代码链接,请长按Ctrl.MATLAB代码工具提示仅对选定的MATLAB函数可用。
在报告中lpsolve
,查看变量的类型信息。
在MATLAB源窗格中,选择主
.
在代码窗格中,按住Ctrl并在输入参数上暂停我
.
请注意
在一个麦金塔电脑平台,使用命令关键不是Ctrl.
要生成不包含可跟踪性的代码生成报告:
在一个编码器。EmbeddedCodeConfig
对象,设置EnableTraceability
财产假
.
在MATLAB编码器™应用程序,使代码可追溯性来没有
.