用DWT周期计数器测函数耗时,核心是使能DWT->CYCCNT并保证计数与CPU同频。步骤:1) 使能调试跟踪:CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;2) 清零并启动:DWT->CYCCNT=0; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;3) 测量前读一次CYCCNT记为t0,调用目标函数,再读t1,耗时=(t1-t0)/SystemCoreClock,注意无符号减法处理32位回绕。常见误差来源:中断抢占使测量包含ISR时间;编译器优化把被测函数内联或删除,需用volatile函数指针或__attribute__((noinline));DWT计数在低功耗睡眠或调试器暂停时行为异常;Flash等待周期和流水线使短函数测量抖动大;SystemCoreClock与实际主频不一致导致换算偏差。建议多次测量取最小/中位数,测量区间关中断或统计中断开销,并确认DWT在目标芯片上可用。
mcuku 阿沐 · 2026-10-22