如何测量测量函数的执行时间?测量功能也需要一些时间才能执行

How to measure execution time of a measurement function? The measurement function also takes time to execute

提问人:user14063792468 提问时间:11/3/2023 最后编辑:user14063792468 更新时间:11/3/2023 访问量:118

问:

社区!

以伪代码为例:

start = time(...); /* I do not remember arguments. Long time no std lib usage */
end   = time(...);
actual_measurement_function_call_time = end - start;

我想测量一个函数执行所需的时间。time

如下图所示:

1,2 - is a start of "time" function
*   - some code, not optimized
!   - time value gets copied
1 ************ ! ****** 2 ************ ! ******

- 或多或少精确地测量。但我不关心装备。可能还会有所不同,你怎么看? - 我认为这部分是一样的。

我错过了什么吗?

这个想法是平均,就像很少的函数调用一样,以获得更稳定的结果。但现在,我对如何去做感到困惑。


C 算法 单片机

评论

2赞 Weather Vane 11/3/2023
“对于几个函数调用”——进行几百万次调用。可能的重复是 C 程序的执行时间
2赞 Barmar 11/3/2023
解决方案是测量一个微不足道的“无操作”操作,因此时间只是测量开销。
1赞 Barmar 11/3/2023
如果您使用的是分析库,设计人员通常会考虑所有这些因素。
1赞 0___________ 11/3/2023
在uC世界中,使用计时器等硬件功能来测量时间。那么与单个寄存器读取相关的开销就不重要了
2赞 David Grayson 11/3/2023
如果您想要一个有意义的答案,您必须提供更多详细信息并提出更具体的问题。什么微控制器?什么时钟速度?代码是干什么用的?为什么不能提前在开发板上对其进行表征,而不是在每次设备启动时对其进行表征?您实际要测量什么,您希望的精度是多少?time()

答:

1赞 the busybee 11/3/2023 #1

最简单、最直接的方法是使用输出引脚和示波器。我经常这样做,因为影响最小。您还可以“滥用”已使用的输出,例如连接到 LED。

在函数开始时或调用函数之前将引脚设置为一个级别。在通话结束时或通话后将其设置为另一个级别。如果您选择将语句放入函数中,请注意,通常 C 函数在第一个语句之前和最后一个语句之后都有一些“不可见”的开销。

要了解开销的时间,您可以在某个时间点切换图钉。作为额外的奖励,您可以通过切换脉冲的数量来标记不同的测量值。去过那里,做过那件事,有很好的洞察力。

通常,设置或复位引脚的时间开销远远小于测量时间。

请注意可能延长脉冲的中断,如果它们的 ISR 在测量函数期间执行。周期性测量期间的抖动表明了这种影响。

您不需要任何额外的库,不需要传输结果的通信通道,也不需要额外的内存。它甚至可以与最小的微控制器配合使用,但可以扩展到任何为您提供输出引脚的系统。

如果您不希望任何开销,则需要查看生成的机器代码并求和所需的时钟。对于不太复杂的微控制器来说,这也是一种可行的方法。