|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程: l( ~3 J. A. o4 W) j
1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ: n( _5 `. D' N# Y* E
2.测试代码
% U5 q% y; ^3 D! |& b6 e0 S/ L1 U#include <stdio.h>//printf) S7 r; G6 N+ @8 _2 O; J$ o
#include <unistd.h> //usleep( F& ]% ^9 u, J9 S& P' p% i" h- c
#include <sys/alt_timestamp.h>( ` W r3 n2 e, v x4 q
#include "system.h"9 l4 z3 |) Y# T+ x# a9 u
#include "alt_types.h"5 `& Q/ m: d/ X: F; ~( P0 Z/ \8 R% h
#include "altera_avalon_pio_regs.h"6 N5 S3 ^) o* h2 V4 \! l2 @( d, \
int main(void)7 c: ~; S+ W. x
{1 v; J# \1 C# N1 h+ v
alt_u32 cnt1 = 0;
- \# F+ |0 ]4 h2 q( F, x /**// k5 B4 X& L0 }+ `/ {) w
alt_u32 t0,t1,t2;
' H% ^$ p1 @& o- p* q alt_timestamp_start();//开始时间戳服务5 O! r8 b& P. y
7 w0 u) b0 A4 x1 C
t0 = alt_timestamp();//开始测量时间 _3 c1 k2 V% u: P) w% ]
usleep(1000*1000);//1ms: l0 K1 g$ j9 R B
t1 = alt_timestamp();
5 c8 K: |* g# o+ {5 ]6 M //20ns*50000=1ms
0 U- M& v1 [% Q! c' b for(cnt1=0;cnt1<500000;cnt1++);//for循环延时7 G6 k6 `* X& Y3 W: X8 v
t2 = alt_timestamp(); p% ^1 V* t6 Y+ S
, d) \2 O) H: t, ]3 a3 w% ] printf("(t1-t0)=%ld\n",(t1-t0));
% w$ {: o/ g n! v: l$ A: z/ i printf("(t2-t1)=%ld\n",(t2-t1));6 G; C4 b8 X7 J% m2 J
printf("\n");! E- t, E0 ]7 d8 J, V# F
printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
7 ^$ R# w7 o4 Y4 P: N) a% e return 0;
o/ w3 {; Z0 Y/ Y, ?}- U& l1 u* n) g: s2 S
3.测试结果2 ]! s) a8 a$ D0 o+ y$ a m/ ?
(t1-t0)=480001748 v$ @# p. F# ?- A( r
(t2-t1)=37
/ ^2 D9 @' n* z7 t! {3 B
5 O/ X) N2 }# U8 @4 a, L系统时钟频率是 50000000 Hz |
|