对不起,这是一个基本问题。 我正在从事一个嵌入式项目。在项目中某些驱动程序文件中的某个位置,有一个名为_time returnTime()的函数,据说该函数以10微秒的分辨率返回mcu时间。我猜它读取了MCU计时器模块的寄存器并将其返回,该计时器的分辨率为10微秒。
我还有一个用户定义的功能。我想测试执行此功能需要花费多少。 因此,我决定为此使用returnTime函数,方法是在函数的第一条指令和最后一条指令之后调用它。
在我要测试执行时间的函数中,我执行以下操作:
source my_env/bin/activate
当我执行此功能时,time_elapsed的值为5,有时为4。由于myFunction()
{
time1 = returnTime();
...
time2 = returnTime();
time_elapsed = time2 - time1;
}
函数返回的时间分辨率为10微秒,因此time_elapsed也不应为10的倍数(例如0、10、20等)
答案 0 :(得分:0)
计时器的分辨率可能为10微秒,但是returnTime()
返回的值的单位是什么?也许returnTime()
返回一个以“滴答”为单位的值,其中一个滴答等于10微秒。 (硬件计时器模块通常以一勾来计数。)
让我们假设您的函数执行需要42微秒。如果函数在计时器的下一个滴答声开始之前的 一毫秒开始执行,则计时器将在功能结束之前滴答五次。但是,如果函数在计时器滴答声后的 一秒内开始计时,则计时器将在函数执行期间滴答四次。因此,有时returnTime()
会返回5,有时会返回4。
以上是最简单的解释。同样,硬件定时器模块可能会因MCU时钟速度而设置不正确。另外,如果启用了中断,则在函数执行期间可能会发生中断,从而使函数执行时间似乎有所不同。