|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程
: I$ S1 O. K r4 z1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ$ _2 t l- O1 D1 A% f
2.测试代码
- K8 n! z. n$ D E- V5 f- O7 T( l#include <stdio.h>//printf
1 Q& E8 W I B- P9 w#include <unistd.h> //usleep0 b( v3 @' q# E$ i
#include <sys/alt_timestamp.h>8 L/ o+ ?7 W1 J- w: j- x" I
#include "system.h"
9 r& S# `$ Z8 ^" l) ^4 s#include "alt_types.h". r* [. ~" V( S& A
#include "altera_avalon_pio_regs.h"
$ N6 p2 _, m& p* fint main(void)' C- x0 Z O0 a" y: ~1 l, L
{
Z$ h- k c( ?/ _# Y% M alt_u32 cnt1 = 0;
) ^! N+ A) v A2 b. z- ~% u: v7 u. I /**/7 |4 F6 u9 n0 |7 x8 L
alt_u32 t0,t1,t2; l' v/ a& X. r& C# Z
alt_timestamp_start();//开始时间戳服务: t1 i) z8 {2 i% S. n B3 j
0 {- v1 V1 ]9 K# b) s t0 = alt_timestamp();//开始测量时间
1 d0 U9 @ Z" K( n% I usleep(1000*1000);//1ms, @& T1 H8 d2 ^0 d6 J
t1 = alt_timestamp();4 V( F, a! F; j$ a7 G
//20ns*50000=1ms
! i. Y- B9 Z) y! \% a* w for(cnt1=0;cnt1<500000;cnt1++);//for循环延时3 i6 C" N: F2 f C" A) T1 `
t2 = alt_timestamp();
8 N, ], a2 m! g9 s; a, ^) F/ _$ Q; b; ~0 t# a9 {) ^: e: M
printf("(t1-t0)=%ld\n",(t1-t0));4 o4 w; v. B# G- L( G) w& Z
printf("(t2-t1)=%ld\n",(t2-t1));
+ A2 t, z+ p. i# i. j8 I printf("\n");
8 {: g/ x- a5 r( y7 K6 t4 U* j5 \ printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());( n7 h; u4 _$ L4 @+ \
return 0;
6 j* E0 g0 c% I}3 I/ _' Q$ S- A" G) w4 U1 Z Y
3.测试结果0 R8 y6 h1 z @# [9 v2 J; K
(t1-t0)=48000174+ R% R. G! P0 |; i" J( Y
(t2-t1)=376 |$ s% J' f2 \" S4 V. R$ m1 K4 F
, J9 R( j) Q% R, `2 l6 d: k7 f系统时钟频率是 50000000 Hz |
|