在Simulink中指定的示例时间金宝app®模型定义了在硬件上执行生成的代码的计划。如果硬件有足够的计算能力,则代码根据指定执行。
Profiler功能生成措施测量算法代码执行性能的代码。您可以在PIL模拟或独立执行中使用此功能。如果代码在多核硬件上运行,则分析器功能还可以分析生成的代码如何使用不同的核心。
分析代码根据插入生成代码的分析指令获得的数据计算执行时间。这些指令依赖于特定于硬件的分析函数来获取硬件上的当前时间。如果受支持的硬金宝app件有多个核心,那么这个分析函数可以存储代码正在执行的核心的ID。如果需要的话,目标必须提供分析函数和代码来配置相关的计时器。
请注意
这是一个示例工作流,用于激活目标的分析器特性。您必须创建特定于硬件的函数,以成功地完成分析器特性。
创建和添加一个新的分析器
目的,教授
,你的目标
目的,tgt
,通过呼叫AddNewProfiler.
使用分析器的名称,例如,'我的新探查器'
.
= addNewProfiler教授(tgt,'我的新探查器');
不要删除分析器
来自matlab的对象®保存目标之前的工作区。
确认分析器'我的新探查器'
添加到您的目标。
显示(TGT);
My ARM Cortex A Board Display Name My ARM Cortex A Board My New Deployer 1 Linux 1我的新PIL我的以太网接口我的新外部模式我的以太网接口我的新Profiler 0
分析器'我的新探查器'
被添加到目标。但是,0表示剖析器不用于硬件'我的手臂皮质董事会'
.
映射到分析器
目的,教授
,硬件
目的,hw
.
地图(TGT,HW,PRO);
确认分析器'我的新探查器'
用于硬件'我的手臂皮质董事会'
.
显示(TGT);
My ARM Cortex A Board Display Name My ARM Cortex A Board My New Deployer 1 Linux 1我的新PIL我的以太网接口我的新外部模式我的以太网接口我的新Profiler 1
分析器'我的新探查器'
用于硬件'我的手臂皮质董事会'
如图所示1
在硬件的相应位置。
视图的属性分析器
对象。
教授
PROM = Profiler具有属性:名称:'我的新探查器'timerReadfcn:'sourcefile:''IncludeFile:''timerdatatype:'uint32'timertickspersecond:1.0000e + 09 timerupcounting:1 storecoreid:1 printdata:1打印'profilingdata'数据长期:400 getDatafcn:''
指定一个返回硬件运行时间的函数,也称为分析功能,通过设置timerreadfcn.
财产的财产分析器
例如,对象,“profileReadTimer”
.
prof.TimerReadFcn =“profileReadTimer”;
请注意
该函数不考虑参数并将当前时间返回为整数。
通过设置设置源文件源文件
财产的财产分析器
对象。例如:
prof.SourceFile =“$ (ARM_CORTEX_A_ROOT_DIR) / src / profile_timer.c”;
属性指定包含分析函数声明的头文件包括
财产的财产分析器
对象。例如:
PROM.INCLUDEFILE ='$(arm_cortex_a_root_dir)/include/profile_timer.h';
属性指定分析函数返回的值的数据类型timerdatatype.
财产的财产分析器
对象。例如:
prof.TimerDataType ='uint32';
属性指定分析函数返回的值的分辨率(单位为每秒滴答数)TimerTicksPerSecond
财产的财产分析器
对象。例如:
Prof.TimertickSperseCond = 100000000;
指定分析功能返回的值是否正在增加或减少,即通过设置来计算或倒计时。TimerUpcounting
财产的财产分析器
对象。例如,如果分析函数计数,则设置TimerUpcounting
到1
.
prof.TimerUpcounting = 1;
如果分析函数倒计时,则将此属性设置为0。
指定分析功能是否还收集有关通过设置执行生成的代码的处理器内核的信息storecoreid.
财产的财产分析器
对象。例如,如果分析函数在执行生成代码的处理器核心上收集信息,则设置storecoreid.
到1
.
PROF.STORECOREID = 1;
如果您的硬件具有单个核心,或者分析功能不会收集执行生成代码的处理器内核的信息,请设置storecoreid.
到0。
属性指定分析函数是否应该打印分析数据printdata.
财产的财产分析器
对象。例如:
prof.PrintData = 1;
如果不想打印分析数据,请设置printdata.
为1。只能在使用文件系统的硬件上打印数据,例如运行Linux的硬件®.
通过设置代码运行时,请指定分析数据是否立即打印打印
财产的财产分析器
例如,对象,0
.
prof.PrintInstantly = 0;
请注意
当你设置时打印
到0
,只有当生成的代码停止执行时,才会打印数据。数据被打印并保存到指定的文件中modelname
.txt,在哪里modelname
是Simulink模型的名称。金宝app
通过设置设置GetDataFcn
财产的财产分析器
对象。例如:
prof.GetDataFcn ='codertarget.arm_cortex_a.internal.getprofiledata';
在生成的代码中设置缓冲区的名称,通过设置来存储分析数据buffername.
财产的财产分析器
对象。例如:
Prof.buffername =“profilingData”;
设置通过设置存储分析数据的缓冲区的大小DataLength
财产的财产分析器
对象。例如:
Prof.Datalength = 400;
请注意
除非您立即指定数据打印,否则从代码执行开始,直到缓冲区填满,从代码执行开始。
如果您使用的是参考目标的分析功能,请继续执行本节步骤22。否则,创建一个空文件,该文件将包含分析功能。文件名和位置必须与指定的名称相同源文件
例如,财产$(arm_cortex_a_root_dir)/src/profile_timer.c
.
将下面显示的配置文件模板添加到您创建的文件中。
#include extern uint32_t profilereadtimer(void);/ * _tmwrunningcoreid符号仅为独立执行profiler * / #ifdef mw_stentalone_execution_profiler_on extern unsigned int _tmwrunningcoreid;#endif uint32_t profilereadtimer(void){uint32_t ret =(uint32_t)ctorticfcn();/ * _tmwrunningcoreid符号仅为独立执行profiler * / #ifdef mw_standalone_execution_profiler_on _tmwrunningcoreid = coredfcn();#endif返回(RET);}
根据需要修改分析功能模板,使:
函数的名称,profilereadtimer.
,比赛timerreadfcn.
财产。
代替counterfcn
使用返回硬件的定时器值的函数。
代替coreidfcn.
使用函数返回硬件的核心ID。
代替uint32_t.
中指定的数据类型的C/ c++等价于timerdatatype.
财产。
创建名为的文件'myprofile_timer.h'
其中包含函数的定义,该函数在目标根目录文件夹的Include文件夹中获取时间。
#define _profiler_timer_h_ #ifdef __cplusplus extern“c”{#endif extern uint32_t profilereadtimer(void);#ifdef __cplusplus} #endif
将描述目标的信息保存到其框架中。
Savetarget(TGT);
测试Profiler正确工作。
testTarget (tgt,'profiler');
完成测试后,将显示摘要结果。
创建一个名为的空白simuli金宝appnk模型测试
.
在模型中,选择造型>模型设置.
在“配置参数”对话框中,选择求解器
窗格。
从类型列表中,选择固定步
.从求解器列表中,选择汽车
.
在“配置参数”对话框中,单击硬件实现窗格中,设置硬件板例如,您注册的硬件,'我的手臂皮质董事会'
.
在模型配置参数对话框,选择代码生成>确认.
选择高级参数>创建块并将它设置为公益诉讼
.
使能够代码执行时间分析>测量任务执行时间和集合度量函数执行时间到粗(仅引用的模型和子系统)
.
设定保存选择所有的数据
.验证名称Workspace变量:ExecutionProfile.点击好的.
打开Simulin金宝appk库浏览器,并从中打开来源图书馆,添加常数块到您的模型。
从数学运营图书馆,添加获得块到您的模型。连接常数和获得块。
从数学运营图书馆,添加减去块到您的模型。
连接获得块和第一个输入端口减去块。
右键单击获得块并选择从选择构建子系统.
右键单击子系统块并选择C / C ++代码>构建此子系统.点击构建在打开的对话框中。
包含该库PIL子系统创建块。这个块是将在硬件上运行的生成代码的网关。
复制PIL子系统块到您的模型并将其连接到常数和减去块。
从汇图书馆,添加范围块到您的模型。连接减去和范围块。
打开Scope块并运行模型。
PIL仿真完成后,executionprofile.
变量出现在MATLAB工作区中。
获取分析报告并分析不同的周转和执行时间。
报告(executionProfile)
创建一个名为的空白simuli金宝appnk模型测试
.
在模型中,选择造型>模型设置.
在“配置参数”对话框中,选择求解器
窗格。
从类型列表中,选择固定步
.从求解器列表中,选择汽车
.
在“配置参数”对话框中,单击硬件实现
,设置硬件板例如,您注册的硬件,'我的手臂皮质董事会'
.
在这方面求解器窗格,启用将每个离散率视为单独的任务和停止时间5。
在这方面优化窗格中,清晰的块减少.
在这方面代码生成>接口窗格,检查MAT-file日志.
使能够代码执行时间分析>测量任务执行时间和集合度量函数执行时间到粗(仅引用的模型和子系统)
.
设定保存选择所有的数据
.点击好的.
打开Simulin金宝appk库浏览器,并从源库中添加,添加常数块到模型。双击常数阻塞并设置采样时间到0.01
.
添加此副本常数块到模型。在副本中,设置采样时间到0.02
和恒定价值到2
.
从汇图书馆,添加两个到工作空间块到你的模型。
连接各自常数块到A.到工作空间块。
在您的模型中,单击构建模型.构建完成后,应用程序在硬件上运行5秒,然后停止。
将分析数据归入MATLAB工作区。
codertarget.profile.getData ('测试')
获取分析报告并分析不同的周转和执行时间。
报告(executionProfile)
获取不同任务的执行时间表。
时间轴(ExecutionProfile)