1. 设置Trace时的工作频率(就是当前的系统时钟,如stm32f103,f107为72MHz,f407为168M,f429为180M):
2. 进入调试状态,在一条语句前设置断点执行到此,再执行到另外的语句处,下面的Sec就是执行时间
3. 还有一种变通办法,更加精确。因为使用的平台是嵌入式,都支持GPIO,如点灯LED的管脚,在被测量的一条语句前将一个管脚的GPIO拉低,测量完毕后,将该GPIO拉高,用示波器测量该GPIO的电平转换时间。
我在工作上,就是经常用这种方法,查看一段语句的执行时间,非常有用。
4. 如果在x86+windows平台上,直接用“查看CPU的工作频率”方法来获取,下面是一段示例程序:
#include <windows.h> #include <stdio.h> void main() { LARGE_INTEGER freq; LARGE_INTEGER c1, c2, c; //查询该机器本身的工作频率,并检查是否支持 BOOL b = QueryPerformanceFrequency(&freq); if(b) printf("频率 = %I64d\n", freq.QuadPart); else printf("QueryPerformanceFrequency 失败\n"); //查询该机器本身的工作频率,并检查是否支持 b = QueryPerformanceCounter(&c1); if(!b) printf("QueryPerformanceCounter 失败\n"); //下面检验Sleep(1)的精度 int i; for (i=0; i<10; i++) { QueryPerformanceCounter(&c1); c.QuadPart = c1.QuadPart - c2.QuadPart; printf("%I64d, %.5fs\n", c.QuadPart, //计数器差 c.QuadPart/(double)freq.QuadPart //周期值,单位:秒 ); c2 = c1; Sleep(1); } getchar(); }