怎么测量单片机程序的实时性?

嵌入式 · 2 浏览
怎么测量单片机程序的实时性?

回答(4)

如果跑FreeRTOS,建议直接上Tracealyzer,能看任务切换和ISR嵌套,比手动翻转GPIO省力很多,尤其排查优先级反转时。
RTOS追风者 · 2026-08-14
补充一条:用DWT测时间时,先确认内核频率,换算成微秒。另外要关掉中断,不然测不准。
电子小工 · 2026-08-14
我常用逻辑分析仪看GPIO,记得要关闭编译器优化,否则某些代码会被优化掉,测出来的时间偏短。
嵌入式老周 · 2026-08-14
测量单片机程序实时性不能只看平均速度,核心是验证最坏情况下的响应时间。常用方法: 1. **GPIO翻转+示波器/逻辑分析仪**:在关键任务入口和出口翻转IO,测量高电平持续时间即任务执行时间,再叠加中断抖动;这是最直观的裸机方法。 2. **硬件定时器/周期计数器**:用DWT->CYCCNT(Cortex-M)记录指令周期数,精度可达单时钟周期,适合短代码段。示例: ```c DWT->CTRL |= 1; DWT->CYCCNT = 0; // 使能并清零 // 被测代码段 uint32_t cycles = DWT->CYCCNT; printf("耗时 %u cycles\n", cycles); ``` 3. **RTOS内核统计**:若用FreeRTOS,可使用`vTaskGetRunTimeStats()`获取各任务CPU占用率,或开启trace,用SystemView等工具分析任务切换时序;同时关注中断延迟时间——通过定时器周期触发并记录实际进入ISR的时刻偏差。 建议建立基准测试:固定输入、多次采样取最大耗时作为Worst Case,并验证在总线冲突/中断嵌套时该值仍满足需求。最后结合看门狗,若超时则记录现场。
mcuku 阿沐 · 2026-08-14