实时应用程序的执行分析
此示例演示了如何对在目标计算机上运行的实时应用程序进行任务执行时间和函数执行时间的性能分析。利用这些信息,您便可以优化其性能。
如果将实时应用程序配置为利用目标计算机上的多核处理器,性能分析将特别有用。对实时应用程序进行分析:
在模型的配置参数对话框中,启用在执行期间收集函数执行时间数据的功能。
构建、下载并执行模型。
启动和停止探查器。
显示探查器数据。
执行分析器和 SLRT Overload Options 模块采用不同的机制来测量 TET,因此生成的 TET 值并不相同。
注意:您也可以使用 Simulink® 日程编辑器对模型进行分区。在 Simulink 编辑器中,点击建模选项卡,然后选择设计 > 进度编辑器。有关详细信息,请参阅Create Partitions from a Rate-Based Model。
配置实时应用程序以执行函数性能分析
该模型为 slrt_ex_mds_and_tasks。要打开此模型,请先打开子系统模型:
slrt_ex_mds_subsystem1slrt_ex_mds_subsystem2slrt_ex_mds_and_tasks
1.打开模型 slrt_ex_mds_and_tasks。
2.在顶层模型中,打开配置参数对话框。选择代码生成 >> 验证。
3.对于测量函数执行时间,请选择粗略(仅限参考模型和子系统)。测量任务执行时间复选框已被选中并锁定。或者,在 MATLAB 命令行窗口中输入:
set_param('slrt_ex_mds_and_tasks','CodeProfilingInstrumentation','Coarse');
4.点击 OK。将模型 slrt_ex_mds_and_tasks 保存到本地文件夹中。
生成实时应用程序执行配置文件
在多核目标计算机上为模型 slrt_ex_mds_and_tasks 生成配置文件数据。
您必须事先配置目标计算机以充分利用多核处理器,并为模型配置任务和函数执行探查。
1.打开、构建并下载模型。
tg = slrealtime; connect(tg); model = 'slrt_ex_mds_and_tasks'; open_system(model); modelSTF = getSTFName(tg); set_param(model,"SystemTargetFile",modelSTF); open_system('slrt_ex_mds_subsystem1'); set_param('slrt_ex_mds_subsystem1',"SystemTargetFile",modelSTF); open_system('slrt_ex_mds_subsystem2'); set_param('slrt_ex_mds_subsystem2',"SystemTargetFile",modelSTF); evalc('slbuild(model)'); load(tg,model); setStopTime(tg,20);



当包含探查时,代码生成报告将默认生成。它包含指向生成的 C 代码和头文件的链接。通过点击这些链接,您可以查看生成的代码并解读代码执行概况报告。

2.启动实时应用程序,然后启动探查器。
startProfiler(tg); start(tg); pause(5); stopProfiler(tg); stop(tg);
3.显示探查器数据。
while 1 tmp = strcmp(tg.ProfilerStatus,'DataAvailable'); if tmp == true break end end profiler_data = getProfilerData(tg); plot(profiler_data); report(profiler_data);
Processing data on target computer ... Transferring data from target computer ... Processing data on host computer ...
执行配置文件的调度显示在仿真数据检查器中,展示了实时仿真中调度如何生成。创建 executionProfile 对象后,使用 executionProfile.schedule() 函数在仿真数据检查器中打开日程表显示。

代码执行分析报告显示了每个任务的模型执行分析结果。
要显示模型某部分的剖面数据,请在剖面列中,点击任务旁边的膜按钮。
要在仿真数据检查器中显示该区段的 TET 数据,请点击绘制时间序列数据按钮。
要在 Simulink 编辑器中查看该部分,请点击展开树状结构按钮旁边的链接。
要查看与该部分对应的生成的代码行,请点击展开树状结构按钮,然后点击查看源代码按钮。

bdclose(model); bdclose('slrt_ex_mds_subsystem1'); bdclose('slrt_ex_mds_subsystem2');
另请参阅
schedule (Embedded Coder) | report | plot | ProfilerData | stopProfiler | startProfiler | resetProfiler | getProfilerData | getAvailableProfile | deleteProfilerData
主题
- Simulink Real-Time 上的并发执行
- 代码探查分析器 (Embedded Coder)