计时器值之间的差异不符合预期

时间:2019-12-16 11:02:55

标签: timer microcontroller

对不起,这是一个基本问题。 我正在从事一个嵌入式项目。在项目中某些驱动程序文件中的某个位置,有一个名为_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等)

1 个答案:

答案 0 :(得分:0)

计时器的分辨率可能为10微秒,但是returnTime()返回的值的单位是什么?也许returnTime()返回一个以“滴答”为单位的值,其中一个滴答等于10微秒。 (硬件计时器模块通常以一勾来计数。)

让我们假设您的函数执行需要42微秒。如果函数在计时器的下一个滴答声开始之前的 一毫秒开始执行,则计时器将在功能结束之前滴答五次。但是,如果函数在计时器滴答声后的 一秒内开始计时,则计时器将在函数执行期间滴答四次。因此,有时returnTime()会返回5,有时会返回4。

以上是最简单的解释。同样,硬件定时器模块可能会因MCU时钟速度而设置不正确。另外,如果启用了中断,则在函数执行期间可能会发生中断,从而使函数执行时间似乎有所不同。