核心思路是让测量点不可被优化掉且顺序稳定。首先,把DWT->CYCCNT读取封装成__STATIC_INLINE uint32_t dwt_read(void),内部用__DSB()或__ISB()加volatile读,确保每次真正访问寄存器。其次,在中断入口和出口各放一个volatile全局变量记录时间戳,例如volatile uint32_t t_entry,t_exit,避免编译器把两次读合并或重排。第三,测量代码段用__attribute__((noinline,optimize("O0")))或加编译器屏障asm volatile("":::"memory"),防止跨屏障优化。第四,确保DWT已使能:CoreDebug->DEMCR|=CoreDebug_DEMCR_TRCENA_Msk; DWT->CTRL|=DWT_CTRL_CYCCNTENA_Msk; 并注意CYCCNT溢出,用无符号减法计算差值。最后,用示波器翻转GPIO做交叉验证,确认优化未改变时序。