|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程
: F4 z1 I" A( ^8 M+ B8 C! M1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ0 P4 E0 S1 ^3 T; x
2.测试代码
3 X/ Z8 w0 `' @2 a7 {#include <stdio.h>//printf8 g/ [% |- W/ a8 h/ p$ N9 u
#include <unistd.h> //usleep
+ C9 Q4 y" O- G z* S) U#include <sys/alt_timestamp.h>( k9 J7 g* R# r1 N
#include "system.h"
# {2 \ G. q6 X# H1 b) d; C) f/ e#include "alt_types.h"8 J. W( K& z& o0 Y& W
#include "altera_avalon_pio_regs.h"0 n5 [% j, Q9 F9 j
int main(void)
$ T" X/ ?8 Q# g{
; g3 ]: O: Z% M a: _ alt_u32 cnt1 = 0;
m1 t- R6 H, E/ t: h \" h /**/" e1 t6 h6 M2 w( \* l5 k* _
alt_u32 t0,t1,t2;! q/ i5 q- e4 C* z& i7 U, m
alt_timestamp_start();//开始时间戳服务9 `! W; l4 e. `/ J& H
- L5 Y( b Q. p4 N, R! E, {
t0 = alt_timestamp();//开始测量时间0 l9 l9 i( w# }1 k7 k1 u5 U4 G4 c
usleep(1000*1000);//1ms
3 D; Z- U) N2 J0 i; N. m2 } t1 = alt_timestamp();
1 G( F6 {) ]8 X+ ~' ? //20ns*50000=1ms
/ I* A$ E- H" }$ r for(cnt1=0;cnt1<500000;cnt1++);//for循环延时# T j! o, z- v" O0 g
t2 = alt_timestamp();
3 Y6 W5 b: u+ t( Q1 E9 w0 _ ]$ J: ? Y( B( l- y2 k5 J
printf("(t1-t0)=%ld\n",(t1-t0));5 q) b- Z* @# O+ s# [) J
printf("(t2-t1)=%ld\n",(t2-t1));' _8 w3 {0 b4 N" A5 R
printf("\n");. R7 |" v5 e8 B7 n- j r' z( D1 m$ r: p
printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
) s- i2 H5 v8 r# w, L! h) w; ~ return 0;( u; Z: L' }6 j! W* f5 ^/ q/ q* ?' n
}
8 X4 i) R1 b) j1 h/ z3.测试结果
3 x$ W1 ^+ R4 o' v2 G(t1-t0)=480001743 ]4 Q: ]! z$ N) i* E
(t2-t1)=37& _- c7 P0 c- J! _: j; B9 E. n' K
: @ E9 ^6 \! K* H0 G! R7 N系统时钟频率是 50000000 Hz |
|