|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程
! O7 S, D7 o- j" R* t, C/ V1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ F- [% l/ E1 b- X
2.测试代码' `: p# x/ c. ?" D$ U
#include <stdio.h>//printf
1 S( j' t1 t9 \6 d, g#include <unistd.h> //usleep
2 M' K' j- v C$ T" p* ~6 o#include <sys/alt_timestamp.h>
2 I2 j' X/ @! c5 i! h& O#include "system.h"5 Z! o9 _) B& O
#include "alt_types.h"4 y7 ?! q6 h8 ~1 `
#include "altera_avalon_pio_regs.h"
' R6 I* y( ~' Y& `- @int main(void)% B# V6 t9 t7 ~/ W
{
: V- y s! q; S `+ b% j- I alt_u32 cnt1 = 0;
' F5 `2 K3 r ]5 _ /**/6 E2 ^8 r/ E& G p. }3 A; w& k2 ?
alt_u32 t0,t1,t2;. L+ y! Y3 f8 o
alt_timestamp_start();//开始时间戳服务
# {6 Z7 t& y' B# S0 a$ h$ X
6 B. C! b# {8 ]2 [% } t0 = alt_timestamp();//开始测量时间7 w2 d% Q0 K# y7 N6 U4 I
usleep(1000*1000);//1ms
" E, ~0 c2 I- t7 \& [* w t1 = alt_timestamp();
_; g0 r2 I; w6 `3 I' t //20ns*50000=1ms: w/ C. u6 g/ W X
for(cnt1=0;cnt1<500000;cnt1++);//for循环延时. a6 \4 ~/ O% I8 a2 R( i
t2 = alt_timestamp();( j) @! \4 c% i5 s; e2 W/ W
5 H6 T/ M9 ?/ `7 y" Q1 i8 Y
printf("(t1-t0)=%ld\n",(t1-t0));
$ Q; y( b, _, H7 ]0 d) x% P" R8 } printf("(t2-t1)=%ld\n",(t2-t1));1 _3 ^4 h6 d9 Z) ^1 x, E1 ?. M2 ^
printf("\n");
5 h( f0 @' r* M& {- J6 \ printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
' D) v( z- K8 z1 l2 m return 0;/ j( A+ Q: O$ {
}$ x" l6 g v' L( Y3 N3 `
3.测试结果
% v, a! k; Q# d5 V, j3 E(t1-t0)=48000174
1 e2 c+ X+ l' ^1 K P(t2-t1)=37$ \2 S$ ~! w) c2 O) H
0 H- u5 k2 |. [/ S+ o) t& l系统时钟频率是 50000000 Hz |
|