|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程
& @: y3 n2 v+ G( _1 T1 d1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ& v w) w8 q) h
2.测试代码
$ I" o5 f y1 y* q1 t. S9 t% L#include <stdio.h>//printf
: c0 M) q+ A- Q# L j$ v#include <unistd.h> //usleep
/ J6 j6 g7 Z- S+ s#include <sys/alt_timestamp.h>0 O4 G5 [# [3 f' H$ _6 I( F( k5 A3 f7 O
#include "system.h" |# Q* ?2 a" a" n; j) m
#include "alt_types.h"
' P3 u6 V J$ @+ _3 a% F) G$ M- J#include "altera_avalon_pio_regs.h"
% ^6 Q( i b3 I4 ^; G. {% D' H7 kint main(void), e# C* ^, J6 x% L8 E
{. q W" k! T& p7 w- F) m! F
alt_u32 cnt1 = 0;, M1 |! Y! u, \- C, H3 ` K" @
/**/
- |' P8 w2 E- ~ alt_u32 t0,t1,t2;
/ E6 E, j9 i6 `! X alt_timestamp_start();//开始时间戳服务
0 v8 F d* h8 [! x! |4 Z
! X5 e# S2 d) h) G2 o t0 = alt_timestamp();//开始测量时间8 V8 Z2 }# t9 B+ n
usleep(1000*1000);//1ms4 Z0 S- D% @9 e- e1 e6 v2 N
t1 = alt_timestamp();' _1 S/ l9 M. D# Q
//20ns*50000=1ms' V; l# B$ n) U$ z9 |
for(cnt1=0;cnt1<500000;cnt1++);//for循环延时
( h' X0 q8 K% z( V% x t2 = alt_timestamp();2 o6 g$ R0 }: r, F
2 U- y! j: m+ b( \
printf("(t1-t0)=%ld\n",(t1-t0));
, T0 X$ U) n9 m* ]& q3 N. v printf("(t2-t1)=%ld\n",(t2-t1));! q, v2 b+ U( v( w% P, M: `) Y
printf("\n");
- o1 c, a1 i& { |5 w7 ?4 N7 u! ~ printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
X/ @( A& F4 Q return 0;
( {9 o# D. h9 |. h% z% ~& t}+ W1 o1 A: O& K' c& o
3.测试结果
! f. G$ M7 S2 l, I9 r(t1-t0)=48000174
; _4 q& Z( V6 p6 q: Z(t2-t1)=37
8 n/ Z7 X! ]' Y- z$ H3 A3 b8 Z7 @# u% L
系统时钟频率是 50000000 Hz |
|