|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天想测试一下for延时和usleep的区别,结果大吃一惊,发现for延时不起作用。下面贴出测试过程 s2 @5 {; L0 P7 U
1.测试环境:nios11.1,优化级别为level3,系统时钟50MHZ/ N1 P: _: s( d, j4 f% p
2.测试代码
C# O# G6 c4 z! K" e#include <stdio.h>//printf. M b% S% r3 t5 [
#include <unistd.h> //usleep
5 H& I( F l' ^6 Z( ~3 t8 @* h#include <sys/alt_timestamp.h>
' | w! K( _4 Y1 y3 W1 {#include "system.h"
- j2 \) X1 @$ Q8 R; ~1 W/ \#include "alt_types.h"
: a- r* M3 V$ T* G#include "altera_avalon_pio_regs.h"
" t( ]1 p8 K9 B) V( F. U8 nint main(void)
% h- M0 D# ? d9 {{! a& E b8 a4 l% X
alt_u32 cnt1 = 0;
: A4 e' B! j% b `) j2 j0 I* O, z; g% X /**/
& i1 q; E" O% O! _/ D0 `; i1 H& ] alt_u32 t0,t1,t2;8 E* P5 } H' F5 }% \# ?# y' M
alt_timestamp_start();//开始时间戳服务
$ B+ z* a: G% r+ a" T, G- M+ K
+ ]* }# W/ O( N4 O1 M. M7 e/ Y t0 = alt_timestamp();//开始测量时间
+ [ }: C& h+ b6 `+ D. H0 N usleep(1000*1000);//1ms3 x9 J& Z( F! c& {$ b) I
t1 = alt_timestamp();9 I( p- ]) D, z* ?) G$ O8 n
//20ns*50000=1ms
: f }6 C0 V: q$ w5 h, {% W+ w& e for(cnt1=0;cnt1<500000;cnt1++);//for循环延时& a2 D/ o* f, e8 B4 U5 h5 _6 [$ [( A
t2 = alt_timestamp();
4 U( Y( X% e% |: M, A2 O# |! ]0 v t7 F+ a
printf("(t1-t0)=%ld\n",(t1-t0));1 P- j% Y" t7 h" \4 L
printf("(t2-t1)=%ld\n",(t2-t1));
& ^ @ d$ d% q printf("\n");
, F' z9 j: ~" K# h% [: j printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
, Z: y8 A5 X7 B7 ? return 0;
" | G! u) [8 d}/ B* B( H# u! |! G( E
3.测试结果+ W6 g4 f' \* C C( |
(t1-t0)=48000174
8 k) b, ^0 Y4 S3 a, x# N(t2-t1)=37
7 [" U- H0 V2 }* J) c' N: T- ^
9 k! c( g( Q: ?, a$ N6 r% E% j系统时钟频率是 50000000 Hz |
|