据我所知,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将在两个或更多个周期内完成。
我如何获得“周期”?
答案 0 :(得分:1)
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递增一次全局计数器(从中断开始)并观察与启动时存储的值的差异;)