x86、STM32(Keil MDK)环境测量一条(段)语句的执行时间小结

来源:互联网 发布:淘宝抢购 加入购物车 编辑:程序博客网 时间:2024/06/03 21:52

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



0 0
原创粉丝点击