|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程
q, A* b1 L" c: q1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ
* b1 j- l% O$ z2 {& A2.测试代码
) x; W8 h% \0 ? p# W2 G#include <stdio.h>//printf, _: M; \ d* l8 ]' ?( Q
#include <unistd.h> //usleep; e' y6 l P; c: G5 [; j
#include <sys/alt_timestamp.h>
! Y4 ?+ J- A. N0 g, s#include "system.h"
+ h8 f( Q& {% k' f+ p# S#include "alt_types.h"( u1 }9 j8 R4 i
#include "altera_avalon_pio_regs.h"
# w q( J: A: v# W0 o! A+ q! t# gint main(void)
+ g9 {+ v! t- i) c( |* H% T5 _{
+ ?6 d+ Y* N% T1 ~1 w" Y alt_u32 cnt1 = 0;
1 s, v; J8 d- m3 \. `1 r( ^ /**/! Y( L- E# B$ C3 p% N& M/ X
alt_u32 t0,t1,t2;! l0 G. o% }/ m. s
alt_timestamp_start();//开始时间戳服务; ~ ]% @/ f2 A
2 J" k: X: |+ u& ?
t0 = alt_timestamp();//开始测量时间& A- G) _+ S0 b- S g$ i
usleep(1000*1000);//1ms; x' H' e/ Z. ^1 l$ X
t1 = alt_timestamp();/ _6 K8 X' I- Z
//20ns*50000=1ms# D3 g' y' b" T
for(cnt1=0;cnt1<500000;cnt1++);//for循环延时, V8 b3 P: G- {7 X; u* S
t2 = alt_timestamp();% q# J) N) d/ D; g. v
% b' E( E4 z" i2 f% K) A, O
printf("(t1-t0)=%ld\n",(t1-t0));
4 A; b9 v8 _) T, W* W printf("(t2-t1)=%ld\n",(t2-t1));
3 L0 @' P, ~. [7 K) u& o printf("\n");9 V; i4 M& A! ]8 ^: O. M7 W0 s/ W
printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());% a4 u! O2 e2 e$ ]* j- g
return 0;- y* ~. Z# z/ j8 h! g
}
, I. R( A5 m0 P$ x0 G( G) @3.测试结果8 x4 l; {% n% k1 x: i
(t1-t0)=48000174
4 k5 V/ e$ T8 @2 k3 M(t2-t1)=37
^3 b4 }0 d2 ^ j6 d. S1 W# ?5 S$ }- k+ d# v$ h( Q0 @: E
系统时钟频率是 50000000 Hz |
|