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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值