|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程
7 V2 Y% \: h& H) y6 M1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ- v$ p- c6 D7 I U
2.测试代码
; N& }$ B; e0 `#include <stdio.h>//printf
1 N% \5 o1 W- b% c7 }" p#include <unistd.h> //usleep
- }+ q8 I* H# X+ Q3 e. Y. ^& Z#include <sys/alt_timestamp.h>
2 Z% j/ ?& y+ h! Q. ~#include "system.h"! S2 H+ O0 ~% d
#include "alt_types.h"* p# ^) C: |% G+ `- f' r
#include "altera_avalon_pio_regs.h"
7 y( }' W' o7 ~1 }! U7 hint main(void)& @" i1 {5 b7 i
{6 W" R/ R: @" a3 \
alt_u32 cnt1 = 0;% m* v! d( R) }; g" F" p
/**/4 _1 N! k0 J+ u: k% T" {/ B; M: ^
alt_u32 t0,t1,t2;
5 @, o. {6 a/ {4 X4 G8 E4 m( t alt_timestamp_start();//开始时间戳服务
% k) h' u) _' [& L* V4 r* v2 t
6 b6 r( o' M3 X. L9 k8 b* F t0 = alt_timestamp();//开始测量时间2 x' a+ J! `3 k) F' l9 V
usleep(1000*1000);//1ms! J, K0 g$ i9 i3 x- ]
t1 = alt_timestamp();
2 T G9 }6 m- ]1 m4 @! c //20ns*50000=1ms
F& l" m% f9 }' W) @* i6 E6 {6 ~ for(cnt1=0;cnt1<500000;cnt1++);//for循环延时
3 J' T4 } w9 g; Y t2 = alt_timestamp();
* G6 X+ X" @) z
! l+ E4 M& Y% N- \ printf("(t1-t0)=%ld\n",(t1-t0));& [3 u, i0 D# C2 b
printf("(t2-t1)=%ld\n",(t2-t1));6 q9 o7 [5 P$ P' ^ N: {
printf("\n");- r! t. M" o- F" N
printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());8 \1 M# G) @& C1 E/ S
return 0;0 x; R2 `# B2 c1 c0 R7 K) T: @
}( b- k, t/ @3 O, W7 \7 D
3.测试结果
& }+ {& z6 K* U7 b8 B1 W(t1-t0)=480001749 Q! I. \: v5 b5 Z; K
(t2-t1)=37
- k4 Q5 f$ e" g
7 L ^2 i$ A* S9 ]% g系统时钟频率是 50000000 Hz |
|