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();
}