|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程
$ v' D' y4 C' s2 B1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ
3 q7 F; G! |( [4 W2.测试代码
1 O5 t* r! j+ B1 S+ n#include <stdio.h>//printf
: n. y3 t- ]1 W0 }/ s/ G#include <unistd.h> //usleep8 r, x0 ~# U0 \1 V! v
#include <sys/alt_timestamp.h>" n0 }% V8 K3 Z6 Y \7 P6 D. W
#include "system.h"3 h! R7 S( L: f' g4 V0 E. `+ Z
#include "alt_types.h" q2 X# a R- Y' r4 E
#include "altera_avalon_pio_regs.h"
' z1 y* N; g, rint main(void)4 v( a" P* W x0 X
{5 l+ S. Y Q/ Q6 w( }" f
alt_u32 cnt1 = 0;; M8 d# D' k3 c( }. [. L4 e( _) V
/**/
, f; |1 W- w% B# f alt_u32 t0,t1,t2;
( [; p- a2 s0 W. w K3 I% s alt_timestamp_start();//开始时间戳服务
& ]# Q* @ e; ~7 d6 C: Z3 {: g) f# i' C2 E" p% D1 d
t0 = alt_timestamp();//开始测量时间
/ d; x; D, _- u3 s0 A usleep(1000*1000);//1ms
& b, b! n5 l0 s t1 = alt_timestamp();
% }9 @4 E2 k( O5 r. d: ? //20ns*50000=1ms
0 H9 b1 I3 z& @- B& s" z for(cnt1=0;cnt1<500000;cnt1++);//for循环延时
' B# @ U4 ?7 T/ x* a$ d% R t2 = alt_timestamp();6 g0 N5 ^( n7 K3 m; w
0 _3 }$ J+ P* V7 F+ @
printf("(t1-t0)=%ld\n",(t1-t0));
9 c1 ?4 _' P# t printf("(t2-t1)=%ld\n",(t2-t1)); s4 M4 E9 w+ M7 u
printf("\n");1 }& M3 C( B! Y6 I3 I
printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
8 L" b1 Y7 p: N/ C return 0;
- L4 z6 m# |/ w" O}6 \. r& T0 K( X/ k o# D0 p7 g
3.测试结果7 Y( I6 |! U( V3 i4 A& P: L
(t1-t0)=48000174
; B, I! W1 P% c(t2-t1)=37
- t& b/ c( @- Y" R! z5 ?" G( X1 _9 o$ @: m1 t# v
系统时钟频率是 50000000 Hz |
|