用DWT周期计数器测中断延迟时,编译器优化(如-O2/-Os)可能重排指令、消除空循环或把变量放寄存器,导致测量偏差。修正方法:1)在中断入口和DWT读取点之间插入__DSB()和__ISB(),防止乱序;2)用volatile修饰时间戳变量,并加编译器屏障__asm volatile("" ::: "memory");3)关键测量段用__attribute__((noinline, optimize("O0")))或#pragma GCC push_options隔离优化;4)DWT->CYCCNT读取前后加__DSB()确保计数同步;5)多次采样取中位数,剔除异常值。注意DWT需先使能CYCCNT(CoreDebug->DEMCR |= TRCENA; DWT->CTRL |= CYCCNTENA),并考虑计数器回绕。建议在-O2下对比-O0结果,偏差应小于几个周期。