c语言stand(time),void XTime_SetTime(XTime Xtime)和void XTime_GetTime(XTime *Xtime)的使用

voidXTime_SetTime(XTime Xtime)和voidXTime_GetTime(XTime *Xtime)的使用

这两个函数是standalone_v1_00_a提供的,可以在standalone_v1_00_a->xtime_l.c中找到这两个函数。

使用这两个函数可以测出程序使用的时钟周期数,对于我们分析程序的性能很有帮助。

下面是函数的源码。

/****************************************************************************

*

* Set the time in the Time Base Register

*

* @param    Value to be written to the Time Base Register

*

* @return   None.

*

* @note    None.

*

*

****************************************************************************/

voidXTime_SetTime(XTime Xtime)

{

mtspr(XREG_SPR_TBL_WRITE, 0);/* set TBL to 0 to avoid ripple */

mtspr(XREG_SPR_TBU_WRITE, (unsignedint) (Xtime >> 32));/* set TBU */

mtspr(XREG_SPR_TBL_WRITE, (unsignedint) Xtime);/* set TBL */

}

/****************************************************************************

*

* Get the time from the Time Base Register

*

* @param    Pointer to the location to be updated with the time

*

* @return   None.

*

* @note    None.

*

*

****************************************************************************/

voidXTime_GetTime(XTime *Xtime)

{

unsignedinthigh;

unsignedintlow;

/* loop until we got a consistent register pair */

do

{

high = mfspr(XREG_SPR_TBU_READ);

low = mfspr(XREG_SPR_TBL_READ);

}while(high != mfspr(XREG_SPR_TBU_READ));

*Xtime = (((XTime) high) <

}

/****************************************************************************

PPC中有一个64位的timer,其实就是一个计数器,每一个时钟计数加一。

使用之前当然是先将计数器设置为0,所以用XTime_SetTime(0),

当在某个时刻需要得到计数器的值时,就调用XTime_GetTime(XTime *Xtime),其实这个函数从源码来看很好理解。主要是XTime这个数据类型是怎样的。

在xtime_l.h中,typedefunsignedlonglongXTime;

也就是说在SDK中unsigned long long就是64位的。

刚开始我还以为long就是64位的,结果发现还是32位的。

但是我写了如下程序:

XTime tmp_time;

tmp_time=0x1100110011001100;

编译之后出现警告,integer constant is too large for 'long'。

但是下载调试查看变量发现是没问题的,再搜了一下,Xilinx的论坛上那些人说这个warning没问题,可以不管。

但是问题来了,我要怎么printf这个XTime类型的值?

试了一下,用printf(“%llu”,tmp_time);可以做到。

写一个完整的小程序:

#include"xtime_l.h"

#include"stdio.h"

intmain()

{ XTime tmp_time;

XTime *n_clk;

XTime_SetTime(0);

;

;

;

XTime_GetTime(n_clk);

tmp_time = *n_clk;

printf("%llu",tmp_time);

return0;

}

EDK\doc\usenglish\oslib_rm.pdf里面有很多函数的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值