如何使用SYSTICK定时器获取消耗功能的精确时间?

时间:2014-08-21 00:58:45

标签: arm stm32 cortex-m

据我所知,SYSTICK Timer是一个24位递减计数器。现在,我需要知道memcpy函数的精确消耗时间。假设我设置了SysTick-> RELOAD = 511,它将结果出现两种情况,如下所述。

定义: 1.一个循环意味着必须完成511到0。 2.两个或多个周期意味着511到0,511到0,......,511到0,511到i,i在[0,511]中。

案例1:偏移量很小或正常,因此memcpy将在一个周期内完成。

案例2:抵消非常大,例如16K。因此,memcpy将在两个或更多个周期内完成。

我如何获得“周期”?

1 个答案:

答案 0 :(得分:1)

See the documentation

SysTick有24位计数器,RELOAD @ 0xE000E014和CURRENT @ 0xE000E018。没有什么比RELOAD=0x00FFFFFF; call_the_func(); unsigned diff = RELOAD-CURRENT更容易了。

启用中断并配置SysTick_Handler()以增加其他值(以获得更大的范围)(如果需要)。然后,您可以计算my_global*(RELOAD-few) + (RELOAD-CURRENT)

我使用SysTick进行10ms定时器 - 只需每10ms递增一次全局计数器(从中断开始)并观察与启动时存储的值的差异;)