我想测量单个函数在STM32上需要多长时间。我唯一能找到的是 SysTick_Handler
。但是,这是一个周期性中断,但我需要的是获取时间间隔,例如:
long t1 = mcu_clock();
sleep(20);
long t2 = mcu_clock();
long diff = (t2 - t1);
我尝试过 C clock()
,但它不起作用并且总是返回 -1
。我怎样才能做到?
最佳答案
首先,在启动时启用一次周期计数器:
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
然后,您可以访问它的值:
unsigned long t1 = DWT->CYCCNT;
/* do something */
unsigned long t2 = DWT->CYCCNT;
unsigned long diff = t2 - t1;
它计算经过的 cpu 周期,您必须将其除以 cpu 时钟频率才能得到以秒为单位的值。
由于它是一个 32 位值,因此在较高时钟频率下可以非常快地溢出,例如在 216 MHz 下需要 19.88 秒。
关于time - STM32如何获取时间间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246125/