工具与软件:
您好!
我正在尝试使用 ERAD 分析一个包含一些算术运算(2个乘法、加法和除法)和一个 NOP 的函数、然后通过添加断点和使用计数事件对其进行验证。
由此获得的测量结果是 ERAD 为37个周期、计数事件后为22个周期。
为了研究这种不一致性、我在函数结束地址放置了一个反汇编断点并进行了单步执行、这提供了接近15个周期的计数。
ERAD 计数是否包含从函数(即被分析的函数的 LRETR)返回所涉及的时间?
提前感谢
Ganesh
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
我正在尝试使用 ERAD 分析一个包含一些算术运算(2个乘法、加法和除法)和一个 NOP 的函数、然后通过添加断点和使用计数事件对其进行验证。
由此获得的测量结果是 ERAD 为37个周期、计数事件后为22个周期。
为了研究这种不一致性、我在函数结束地址放置了一个反汇编断点并进行了单步执行、这提供了接近15个周期的计数。
ERAD 计数是否包含从函数(即被分析的函数的 LRETR)返回所涉及的时间?
提前感谢
Ganesh
您好、Ryan、
是的、我将比较 CCS 中的计数事件并将其与 ERAD 进行比较。 所配置的功能如下:
#pragma CODE_SECTION (profiler1、".eradFunction1")
void profiler1 (void)
{
{
REAL32_T RTB_GAIN;
RTB_GAIN = mProfilerCheckIntOsc_P Gain_Gain * mProfilerCheckIntOsc_u INPORT;
mProfilerCheckIntOsc_B. 除数=(RTB_GAIN + mProfilerCheckIntOsc_u INPORT)*
mProfilerCheckIntOsc_U. INPORT/RTB_GAIN;
mProfilerCheckIntOsc_DW。 Function4.12.R Subsystem_Subsys = 4;
}
asm (" NOP");//NOP 是为了保持汇编序列而引入的。
}
在 CCS 上使用计数事件进行性能分析时、断点被放置在
RTB_GAIN = mProfilerCheckIntOsc_P Gain_Gain * mProfilerCheckIntOsc_u INPORT;
函数的右括号中。
此外、我的 ERAD 配置如下:
ERAD_EDMA 参数1;Profile_Params
extern uint32_T function1Start、function1End;
Volatile UINT32_T cyclesCountSubsystem1 = 0;
ERAD_initModule (ERAD_owner_application);
params1.start_address =(uint32_T)&function1Start;
params1.end_address =(uint32_T)&function1End - 1U;
params1.bus_sel = ERAD_BusComp_BUS_VPC;
params1.BusComp_base1 = ERAD_HWBP1_base;
params1.BusComp_BASE2 = ERAD_HWBP2_BASE;
params1.counter_BASE = ERAD_COUNTER1_base;
ERAD_PROFILE (params1);
profiler1();
cyclesCountSubsystem1 = ERAD_getMaxCount (ERAD_COUNTER1_BASE);
关联的链接器命令文件的内容:
部分中)
{
#if boot_from_flash
#if defined (_TI_EABI__)
.eradFunction1:> FLASH_BANK0_SEC0
Load_start (函数1Start)、
LOAD_END (函数1End)
#else
.eradFunction1:> FLASH_BANK0_SEC0
load_start (_function1Start)、
load_end (_function1End)
#endif
#else
#if defined (_TI_EABI__)
.eradFunction1:> RAMLS_PROG
Load_start (函数1Start)、
LOAD_END (函数1End)
#else
.eradFunction1:> RAMLS_PROG
load_start (_function1Start)、
load_end (_function1End)
#endif
#endif
}
ERAD 配置中是否存在导致该视差的问题?
提前感谢、
Ganesh
尊敬的 Ganesh:
我从 CCS 团队那里获得信息。 CCS 不使用 ERAD 来获取时钟周期计数。 相反、它们使用:
"事实证明、CCS 性能分析时钟使用 ACUBENCHMARK_M08/ACUBENCHMARK_L32寄存器来获取40位时钟周期计数。 因此它不使用 ERAD。"
请注意、你可以在 CCS 中观察这些寄存器、但是你不会看到任何更新。 这是因为驱动程序在读取计数后重新初始化它们。
我不熟悉这些寄存器、也找不到有关这些寄存器的任何文档。 因此、我不知道它们在行为上与 ERAD 计数器相比有何差异。
我会使用 ERAD 来满足您的代码分析需求。
[报价 userid="522836" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1369677/launchxl-f280049c-does-the-erad-count-include-time-taken-to-come-out-of-function-being-profiled "]ERAD 计数是否包含从函数(即被分析的函数的 LRETR)返回所涉及的时间?
[报价]如果您使用 ISR 的 VPC 启动并使用 RET 指令的 VPC 结束来分析 ISR、那么它不会包括 RTINT 的运行环境保存/恢复。
但是、对于 INT、编译器会在 ISR 中插入指令、因此它将包括 INT 的此计数。
此致、
Ryan Ma