c語言微秒
Ⅰ c語言如何精確到微秒級別,我正在測試程序的運行時間,現在已經精確到毫秒了
用sleep肯定是至少50ms。
MutliMedia Timer可以達到ms級別,但是精度沒有嚴格的保障。
timeBeginPeriod 設定精度;
timeSetEvent 來設定事件;
timerEndPeriod 還原精度;
另外還有一個精度更高的,但它不是時鍾,是脈沖 QueryPerformanceFrequency 最高精度是0.8ms
由於計算機的本身時鍾就存在著一定的誤差,而且較大,
所以用它作為高精度時鍾不太好,更高級的辦法就是利用外部的高精度信號源,通過硬體引入計算機。
但是計算機本身的一般來說足夠了。
Ⅱ c語言如獲取系統時間精確到微秒,給出函數,並舉例
#include <mmsystem.h>
LONGLONG SchGetCurTicksCunt(VOID)
{
LARGE_INTEGERlitmp;
QueryPerformanceCounter(&litmp);
return litmp.QuadPart;
}
例如多媒體時鍾
Ⅲ 求一個C語言的微秒級延時函數
c語言,微秒級延時
voidDelay_us(unsignedchartime_us)
{
unsignedlongintTM_LODAE;
TR2=0;//Stoptimer
TF2H=0;//Cleartimeroverflowflag
TM_LODAE=65535-(UINT)(SYSCLK/1000000)*(UINT)(time_us);
//TMR2=-((UINT)(SYSCLK/1000000)*(UINT)(time_us));
TMR2H=TM_LODAE>>8;
TMR2L =TM_LODAE&0x00FF;
TR2=1;//Starttimer
while(!TF2H);//Waittilltimeroverflowoccurs
TR2=0;//Stoptimer
}
程序分析:
前面一起住航分析一下該代碼,
unsignedlongintTM_LODAE;聲明一個長整型數據,
TR2=0;定時器2停止計時
TF2H=0;清除定時器2中斷標志
TM_LODAE=65535-(UINT)(SYSCLK/1000000)*(UINT)(time_us);計算定時器初值。SYSCLK是系統的晶振頻率,SYSCLK/1000000是系統1uS執行的指令。(UINT)(SYSCLK/1000000)*(UINT)(time_us)就是系統time_us執行的指令數。65535-(UINT)(SYSCLK/1000000)*(UINT)(time_us)定時器需要TM_LODAE指令周期才會溢出。
該單片機的一個指令周期就是一個時鍾周期.TMR2H=TM_LODAE>>8;TMR2L =TM_LODAE&0x00FF;置定時器寄存器的初值、
TR2=1;啟動單片機計時 while(!TF2H); 等待定時器2寄存器溢出。TR2=0;停止計時,在這段代碼注釋中已經說明了應該有50nS的誤差,這個是函數調用產生的。
Ⅳ 如何在C語言中使時間暫停幾毫秒或者微秒
使用_sleep(time)函數。
該函數是以毫秒為單位進行延時。
在某些編譯器上,已經被停止使用。
Ⅳ c語言有辦法取得當前納秒或微秒級的時間嗎
C語言獲取當前系統時間的幾種方式
C語言獲取系統時間的幾種方式
C語言中如何獲取時間?精度如何?
1 使用time_t time( time_t * timer ) 精確到秒
2 使用clock_t clock() 得到的是CPU時間精確到1/CLOCKS_PER_SEC秒
3 計算時間差使用double difftime( time_t timer1, time_t timer0 )
4 使用DWORD GetTickCount() 精確到毫秒
5 如果使用MFC的CTime類,可以用CTime::GetCurrentTime() 精確到秒
6 要獲取高精度時間,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)
獲取系統的計數器的頻率
BOOL QueryPerformanceCounter(LARGE_INTEGER
*lpPerformanceCount)
獲取計數器的值
然後用兩次計數器的差除以Frequency就得到時間。
7 Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
Ⅵ 怎麼用C語言設計一個延時10萬微秒子程序
#include "windows.h"//卻要包含這處頭文件
void Mydelay(void){
Sleep(100);
}
Ⅶ 如何用C語言得到精確到微秒
timeval這個struct當中可以精確到微秒。
LINUX中示例:
#include<stdio.h>//forprintf()
#include<sys/time.h>//forgettimeofday()
#include<unistd.h>//forsleep()
intmain()
{
structtimevalstart,end;
gettimeofday(&start,NULL);
printf("start:%d.%d ",start.tv_sec,start.tv_usec);
sleep(1);
gettimeofday(&end,NULL);
printf("end:%d.%d ",end.tv_sec,end.tv_usec);
return0;
}
運行結果:
start:1418118324.633128
end:1418118325.634616
Ⅷ 單片機C語言中怎麼實現微秒級延時
大致的原理 就是根據CPU的指標 得到CPU執行一條指令的時間t
然後通過循環一定次數 即執行一定條數的指令N
t*N就是時間了
僅適用於單線程的單片機
對於有線程或者是有中斷的情況下會不準確
Ⅸ 用C語言將微秒轉換成年月日十分秒,求代碼
#include"stdio.h"
intyears(intday,int*year)
{
if(day<365)returnday;
if(*year%4==0&&*year%100!=0||*year%400==0)
{if(day>365)
day-=366;
(*year)++;
}
else
{
day-=365;
(*year)++;
}
day=years(day,year);
returnday;
}
voidmonth(int*mon,int*day,intyear)
{
switch(*mon)
{
case1:case3:case5:case7:case8:
case10:case12:
{
if((*day)>31)
{
(*mon)++;
*day=*day-31;
}
elsereturn;
}break;
case4:case6:case9:case11:
{
if((*day)>30)
{
(*mon)++;
*day=*day-30;
}elsereturn;
}break;
case2:{
if(year%4==0&&year%100!=0||year%400==0)
{
if((*day)>29)
{
(*mon)++;
*day=*day-29;
}elsereturn;
}
else
{
if((*day)>28)
{
(*mon)++;
*day=*day-28;
}elsereturn;
}
}break;
default:break;
}
month(mon,day,year);
}
main()
{
floatn,sec;intday,min,hour,mon=1,y;
intyear;floati;intd;
n=13014961214352750.0;
year=1601;
sec=n/1000000;
day=(int)(sec/3600/24);
i=day*24.0*3600;
sec-=i;
d=sec;
min=d/60%60;
hour=d/3600;
i=hour*3600+min*60;
sec-=i;
d=sec;
day=years(day,&year);
month(&mon,&day,year);
printf("thetimeis %d/%2d/%2d%2d:%2d:%2.0f ",year,mon,day,hour,min,sec);
}
新手,笑納