Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arm 如何使用SYSTICK定时器获得消耗函数的精确时间?_Arm_Stm32_Cortex M - Fatal编程技术网

Arm 如何使用SYSTICK定时器获得消耗函数的精确时间?

Arm 如何使用SYSTICK定时器获得消耗函数的精确时间?,arm,stm32,cortex-m,Arm,Stm32,Cortex M,据我所知,SYSTICK定时器是一个24位向下计数器。现在,我需要知道memcpy函数的精确消耗时间。假设我设置SysTick->RELOAD=511,它将产生两种情况,如下所述 定义: 1.一个周期意味着511到0必须完成。 2.两个或多个循环意味着511到0,511到0,511对0511对i,i在[0511]中 情况1:偏移量很小或正常,因此memcpy将在一个周期内完成 案例2:偏移量非常大,例如16K。因此memcpy将在两个或更多周期内完成 如何获得“周期” SysTick有24位计数

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

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

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

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

如何获得“周期”

SysTick有24位计数器,RELOAD@0xE000E014及CURRENT@0xE000E018. 没有什么比重新加载=0x00FFFFFF更容易的了;调用_函数();unsigned diff=RELOAD-CURRENT

启用中断并配置
SysTick\u Handler()
,以在需要时增加一些其他值(以获得更大的范围)。然后,您可以计算
my_global*(重载少量)+(重载当前)


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

要么使用更大的重载,要么启用中断并增加其中的其他变量(不会那么精确,但如果重载足够高,您不会注意到差异…或者您可以通过新的over counter进行估计),它也会滚动,beg=current,do stuff,end=current,diff=(beg end)&0xFFFFFF,只要您保持在一个周期内(或检测滚动)@dwelch:当然,像我的计时器一样,但同时存储全局计数器和
SysTick->CURRENT
,然后计算差异(无论在什么时期,10毫秒全局计数器在一年多后滚动)当然可以。我想说的是,你可以启动计时器一次,而不必再碰它,然后通过比较差异而不是立即启动来使用它。