【JokerのZYNQ7020】SDK程序运行时间。

软件环境:vivado 2017.4        硬件平台:XC7Z020


好久都没更了,这次居然更个简单的,有点太不好意思了。怎么讲呢,虽然简单,但是也很实用好吧。在linux下,如果想知道一段程序、一个算法、一次通讯的时间,可以用gettimeofday(),那么就自然而然想到,如果程序裸跑在SDK下,有没有类似的函数,可以知道程序运行时间呢,然后找了找资料,也实验了下,最后在这里总结如下,工程用最简的工程就行。

主要还是在SDK这边,使用的函数是 XTime_GetTime(),使用前需包含头文件。

#include "xtime_l.h"

这里新建一个helloworld工程来说明一下使用方法。

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"

#include "sleep.h"
#include "xtime_l.h"

int main()
{
	u64 time_begin,time_end;
	long int time_dif;
	int i = 0;
	long sum = 0;
	float time_cost;

	print("Delay 2s\n");
	XTime_GetTime(&time_begin);
	sleep(2);
	XTime_GetTime(&time_end);
	time_dif = time_end - time_begin;
	printf("2s timer count is %ld,1s timer count is %d\n",time_dif,COUNTS_PER_SECOND);

	print("\n");

	print("for-circle begin\n");
	XTime_GetTime(&time_begin);
	for(i = 0;i < 1000; i++)
		sum = sum + 1;
	XTime_GetTime(&time_end);
	time_dif = time_end - time_begin;
	time_cost = (float)(time_dif)/COUNTS_PER_SECOND;
	printf("for-circle cost time count %ld,Equivalent to %f s\n",time_dif,time_cost);

	print("\n");

    init_platform();

    print("Hello World\n\r");

    cleanup_platform();
    return 0;
}

将待测程序段夹在两个XTime_GetTime()之间,分别将起始时间与待测程序运行结束时间赋给两个变量,变量值之差即为待测程序运行时间。要说明的是,这里由XTime_GetTime()得到的值为定时器的计数值,并不是实际的运行时间,实际的运行时间还需要除以1s计数值得基准值。

程序的上半部分以sleep 2s为例,得到sleep 2s的计数值,并一同输出1s计数的基准值,COUNTS_PER_SECOND中保存的就是1s计数的基准值,从结果可以看到,确实为近似2倍的关系。程序的下半部分实测了for循环求和1000次所需要的时间,这里将时间的计数值除以基准值,得到实际的运行时间,并由浮点型显示,约为14 us。


2020-07-28更新    昨天有个资料忘了贴了,今天补上。

是这样子的,从上面的结果图里可以看到,1s的计数基准值是333_333_343,这个数字有没有什么讲究呢,其实是有的,ug585手册,239页有说,定时器的频率是系统时钟频率的二分之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值