⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ztimer.c

📁 linux下的BOOT程序原码,有需要的可以来下,保证好用
💻 C
字号:
/******************************************************************************                         Ultra Long Period Timer**  ========================================================================**    The contents of this file are subject to the SciTech MGL Public*    License Version 1.0 (the "License"); you may not use this file*    except in compliance with the License. You may obtain a copy of*    the License at http://www.scitechsoft.com/mgl-license.txt**    Software distributed under the License is distributed on an*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or*    implied. See the License for the specific language governing*    rights and limitations under the License.**    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.**    The Initial Developer of the Original Code is SciTech Software, Inc.*    All Rights Reserved.**  ========================================================================** Language:     ANSI C* Environment:  RTTarget-32** Description:  OS specific implementation for the Zen Timer functions.*****************************************************************************//*---------------------------- Global variables ---------------------------*/static CPU_largeInteger countFreq;static ibool            havePerformanceCounter;static ulong            start,finish;/*----------------------------- Implementation ----------------------------*//****************************************************************************REMARKS:Initialise the Zen Timer module internals.****************************************************************************/void __ZTimerInit(void){#ifdef  NO_ASSEMBLER    havePerformanceCounter = false;#else    havePerformanceCounter = QueryPerformanceFrequency((LARGE_INTEGER*)&countFreq);#endif}/****************************************************************************REMARKS:Start the Zen Timer counting.****************************************************************************/static void __LZTimerOn(    LZTimerObject *tm){    if (havePerformanceCounter)	QueryPerformanceCounter((LARGE_INTEGER*)&tm->start);    else	tm->start.low = timeGetTime();}/****************************************************************************REMARKS:Compute the lap time since the timer was started.****************************************************************************/static ulong __LZTimerLap(    LZTimerObject *tm){    CPU_largeInteger    tmLap,tmCount;    if (havePerformanceCounter) {	QueryPerformanceCounter((LARGE_INTEGER*)&tmLap);	_CPU_diffTime64(&tm->start,&tmLap,&tmCount);	return _CPU_calcMicroSec(&tmCount,countFreq.low);	}    else {	tmLap.low = timeGetTime();	return (tmLap.low - tm->start.low) * 1000L;	}}/****************************************************************************REMARKS:Stop the Zen Timer counting.****************************************************************************/static void __LZTimerOff(    LZTimerObject *tm){    if (havePerformanceCounter)	QueryPerformanceCounter((LARGE_INTEGER*)&tm->end);    else	tm->end.low = timeGetTime();}/****************************************************************************REMARKS:Compute the elapsed time in microseconds between start and end timings.****************************************************************************/static ulong __LZTimerCount(    LZTimerObject *tm){    CPU_largeInteger    tmCount;    if (havePerformanceCounter) {	_CPU_diffTime64(&tm->start,&tm->end,&tmCount);	return _CPU_calcMicroSec(&tmCount,countFreq.low);	}    else	return (tm->end.low - tm->start.low) * 1000L;}/****************************************************************************REMARKS:Define the resolution of the long period timer as microseconds per timer tick.****************************************************************************/#define ULZTIMER_RESOLUTION     1000/****************************************************************************REMARKS:Read the Long Period timer from the OS****************************************************************************/static ulong __ULZReadTime(void){ return timeGetTime(); }/****************************************************************************REMARKS:Compute the elapsed time from the BIOS timer tick. Note that we check to seewhether a midnight boundary has passed, and if so adjust the finish time toaccount for this. We cannot detect if more that one midnight boundary haspassed, so if this happens we will be generating erronous results.****************************************************************************/ulong __ULZElapsedTime(ulong start,ulong finish){ return finish - start; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -