亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? timer.c

?? samsung 9908DVD源代碼,
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**********************************************************************************
 * timer.c
 * coded by hspark@ce.cnu.ac.kr
 * date : 2001/06/23
 * modified by hjahn@ce.cnu.ac.kr
 * date : 2003/03/03
 **********************************************************************************/

#include "kernel\\mk_sys.h"
#include "kernel\\mk_task.h"
#include "kernel\\mk_timer.h"
#include "kernel\\mk_ddi.h"
#include "kernel\\mk_hisr.h"
#include "CalmRISC16\\irq.h"
#include "CalmRISC16\\CalmRISC16.h"

#ifdef _MK_TIMER


MK_TIMER *MK_pTimerActiveListHead;
MK_TIMER *MK_pTimerActiveListTail;
MK_TIMER *MK_pTimerListHead;
MK_TIMER *MK_pTimerListTail;
extern MK_TASK	*MK_pTaskDelayedListHead;

static STATUS MK_InsertToActiveTimerList(MK_TIMER *pTimer);
static STATUS MK_DeleteFromActiveTimerList(MK_TIMER *pTimer);
static VOID MK_TimerExpiration(VOID);

extern void 	IO_WData32(unsigned char *addr,unsigned int high,unsigned int low);
extern void    IO_WData32_EX(unsigned char *addr,unsigned int high,unsigned int low);
extern unsigned long IO_RData32_EX(unsigned char *addr);


ULONG	MK_Ticks;


VOID
MK_SystemTimerInitialize(VOID)
{
	MK_pTimerActiveListHead = MK_NULL;
	MK_pTimerActiveListTail = MK_NULL;
	MK_pTimerListHead = MK_NULL;
	MK_pTimerListTail = MK_NULL;
	MK_Ticks = 0;
}

STATUS
MK_CreateTimer(MK_TIMER *pTimer, CHAR *pName, MK_TIMER_FUNC_T Function, INT Arg1, CHAR *Arg2, 
			   ULONG InitialTime, ULONG RepeateTime, BOOLEAN Enable)
{
	INT	Flags;
    
    if( (pTimer == MK_NULL) || (pTimer->tm_Magic == MK_TIMER_MAGIC) )
		return MK_ERROR;
    	
	Flags = MK_InterruptDisable();		/* Critical Region */
	//MK_BlockCopy(pTimer->tm_pName, pName, MK_NAME_MAX-1);
	//pTimer->tm_pName[MK_NAME_MAX-1] = '\0';
	pTimer->tm_pName = pName;

	if(InitialTime > 0) {
		pTimer->tm_InitialTime = InitialTime;
		pTimer->tm_ExpireTime = InitialTime;
		pTimer->tm_Expirations = 0;
	}
	else {/*Just to report ERROR!!*/
		MK_Printf("WARNING!! I n i t i a l  T i m e  i s  0 !!\n");
		MK_InterruptRestore(Flags);
		return MK_ERROR;
	}
	
	if(RepeateTime > 0)
		pTimer->tm_RepeateTime = RepeateTime;
	else
		pTimer->tm_RepeateTime = 0;

	pTimer->tm_Arg1 = Arg1;
	pTimer->tm_Arg2 = Arg2;
	pTimer->tm_Function = Function;
	pTimer->tm_Status = MK_TIMER_DISABLE;
	pTimer->tm_pActivedNext = MK_NULL;
	pTimer->tm_pActivedPrev = MK_NULL;
	pTimer->tm_Magic = MK_TIMER_MAGIC;

	pTimer->tm_pNext = MK_NULL;
	pTimer->tm_pPrev = MK_NULL;
	if(MK_pTimerListHead == MK_NULL)
	{
		MK_pTimerListHead = pTimer;
		MK_pTimerListTail = pTimer;
	}
	else
	{
		pTimer->tm_pPrev = MK_pTimerListTail;
		MK_pTimerListTail->tm_pNext = pTimer;
		MK_pTimerListTail = pTimer;
	}

	if(Enable)
	{
		MK_InsertToActiveTimerList(pTimer);
	}

	MK_InterruptRestore(Flags);

	return MK_NO_ERROR;
}

static STATUS 
MK_InsertToActiveTimerList(MK_TIMER *pTimer)
{
	MK_TIMER *pNext;
	LONG	ExpireTime;
	INT		Flags;

//#if MK_DEBUG
	if(pTimer == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ControlTimer() - Timer doesn't exist!\n");
#endif
		return MK_RESOURCE_ERROR;
	}

	if(pTimer->tm_Magic != MK_TIMER_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_InsertToActiveTimerList() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
//#endif

	if(pTimer->tm_Status == MK_TIMER_ENABLE)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_InsertToActiveTimerList() - Active Timer is Activating one more!\n");
#endif
		return MK_ERROR;
	}

	Flags = MK_InterruptDisable();		/* Critical Region */

	ExpireTime = pTimer->tm_ExpireTime;
	if(ExpireTime <= 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_InsertActivaeTimerList() - ExpireTime must be greate than zero!\n");
#endif		
		MK_InterruptRestore(Flags);
		return MK_ERROR;
	}

	pTimer->tm_pActivedNext = MK_NULL;
	pTimer->tm_pActivedPrev = MK_NULL;
	
	if(MK_pTimerActiveListHead == MK_NULL)
		MK_pTimerActiveListHead = MK_pTimerActiveListTail = pTimer;
	else {
		pNext = MK_pTimerActiveListHead;
		
		while(pNext) {
			if(ExpireTime < pNext->tm_ExpireTime)
				break;
			ExpireTime -= pNext->tm_ExpireTime;
			pNext = pNext->tm_pActivedNext;
		}
		
		if(pNext == MK_NULL) {
			pTimer->tm_pActivedPrev = MK_pTimerActiveListTail;
			MK_pTimerActiveListTail->tm_pActivedNext = pTimer;
			MK_pTimerActiveListTail = pTimer;
		}
		else if (pNext->tm_pActivedPrev == MK_NULL) {
			pNext->tm_pActivedPrev = pTimer;
			pTimer->tm_pActivedNext = pNext;
			MK_pTimerActiveListHead = pTimer;
			pNext->tm_ExpireTime -= ExpireTime;
		}
		else {
			pTimer->tm_pActivedPrev = pNext->tm_pActivedPrev;
			pTimer->tm_pActivedPrev->tm_pActivedNext = pTimer;
			pNext->tm_pActivedPrev = pTimer;
			pTimer->tm_pActivedNext = pNext;
			pNext->tm_ExpireTime -= ExpireTime;
		}
		pTimer->tm_ExpireTime = ExpireTime;
	}
	pTimer->tm_Status = MK_TIMER_ENABLE;

	MK_InterruptRestore(Flags);
	return MK_NO_ERROR;
}

static STATUS 
MK_DeleteFromActiveTimerList(MK_TIMER *pTimer)
{
	MK_TIMER *pNext;
	int Flags;

	if(pTimer == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ControlTimer() - Timer doesn't exist!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
	if(pTimer->tm_Magic != MK_TIMER_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_DeleteFromActiveTimerList() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
	
	if(pTimer->tm_Status == MK_TIMER_DISABLE)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_DeleteFromActiveTimerList() - Deactive Timer is deactivating one more!\n");
#endif
		return MK_ERROR;
	}

	Flags = MK_InterruptDisable();			/* Critical Region */
	if(pTimer == MK_pTimerActiveListHead)
	{
		pNext = MK_pTimerActiveListHead->tm_pActivedNext;
		if(pNext == MK_NULL)
		{
			MK_pTimerActiveListHead = MK_NULL;
			MK_pTimerActiveListTail = MK_NULL;
		}
		else
		{
			pNext->tm_pActivedPrev = MK_NULL;
			pNext->tm_ExpireTime += pTimer->tm_ExpireTime;
			MK_pTimerActiveListHead = pNext;
		}
	}
	else
	{
		pNext = pTimer->tm_pActivedNext;
		if(pNext == MK_NULL)
		{
			pTimer->tm_pActivedPrev->tm_pActivedNext = MK_NULL;
			MK_pTimerActiveListTail = pTimer->tm_pActivedPrev;
		}
		else
		{
			pTimer->tm_pActivedPrev->tm_pActivedNext = pTimer->tm_pActivedNext;
			pTimer->tm_pActivedNext->tm_pActivedPrev = pTimer->tm_pActivedPrev;
			pTimer->tm_pActivedNext->tm_ExpireTime += pTimer->tm_ExpireTime;
		}
	}
	pTimer->tm_pActivedNext = MK_NULL;
	pTimer->tm_pActivedPrev = MK_NULL;

	pTimer->tm_Status = MK_TIMER_DISABLE;
	MK_InterruptRestore(Flags);

	return MK_NO_ERROR;
}

ULONG
MK_GetTimerRepeateTime(MK_TIMER *pTimer)
{
//#if MK_DEBUG
	if(pTimer == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ControlTimer() - Timer doesn't exist!\n");
#endif
		return 0;
	}
	if(pTimer->tm_Magic != MK_TIMER_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_GetTimerRepeateTime() - Magic error!\n");
#endif
		return 0;
	}
//#endif

	return pTimer->tm_RepeateTime;
}

ULONG
MK_SetTimerRepeateTime(MK_TIMER *pTimer, ULONG NewTime)
{
	ULONG	Time;
	INT		Flags;

//#if MK_DEBUG
	if(pTimer == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ControlTimer() - Timer doesn't exist!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
	if(pTimer->tm_Magic != MK_TIMER_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_SetTimerRepeateTime() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
//#endif

	Flags = MK_InterruptDisable();

	Time = pTimer->tm_RepeateTime;
	pTimer->tm_RepeateTime = NewTime;

	MK_InterruptRestore( Flags );
	return Time;
}

BOOLEAN
MK_GetTimerStatus(MK_TIMER *pTimer)
{
//#if MK_DEBUG
	if(pTimer == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ControlTimer() - Timer doesn't exist!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
	if(pTimer->tm_Magic != MK_TIMER_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_GetTimerStatus() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
//#endif

	return pTimer->tm_Status;

}

STATUS
MK_ControlTimer(MK_TIMER *pTimer, BOOLEAN Enable)
{
	INT Flags;

//#if MK_DEBUG
	if(pTimer == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ControlTimer() - Timer doesn't exist!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
	if(pTimer->tm_Magic != MK_TIMER_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_ControlTimer() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
//#endif

	Flags = MK_InterruptDisable();

	if( (Enable == MK_TIMER_ENABLE) && (pTimer->tm_Status != MK_TIMER_ENABLE) )
	{
		if(pTimer->tm_Expirations)
			pTimer->tm_ExpireTime = pTimer->tm_RepeateTime;
		else
			pTimer->tm_ExpireTime = pTimer->tm_InitialTime;
		MK_InsertToActiveTimerList(pTimer);
	}
	else if ( (Enable == MK_TIMER_DISABLE) && (pTimer->tm_Status != MK_TIMER_DISABLE) )
	{
		MK_DeleteFromActiveTimerList(pTimer);
	}

	MK_InterruptRestore( Flags );

	return MK_NO_ERROR;
}

STATUS
MK_DeleteTimer(MK_TIMER *pTimer)
{
	INT Flags;

//#if MK_DEBUG
	if(pTimer == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ControlTimer() - Timer doesn't exist!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
	if(pTimer->tm_Magic != MK_TIMER_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_DeleteTimer() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费观看高清完整版| 成人久久视频在线观看| 一区二区久久久久| 亚洲丝袜制服诱惑| 午夜久久久影院| 亚洲一区二区三区激情| 亚洲国产乱码最新视频| 亚洲成a人v欧美综合天堂| 亚洲国产精品嫩草影院| 亚洲成人av一区二区| 日本va欧美va精品发布| 国产精品自在欧美一区| www.久久精品| 精品视频1区2区3区| 777久久久精品| 久久久一区二区三区| 国产精品视频麻豆| 亚洲影视资源网| 精品一区二区三区在线视频| 国产精品1024| 欧美自拍偷拍一区| 欧美午夜免费电影| 日韩一区二区三区视频| 国产精品视频一二三区| 亚洲成av人在线观看| 国产一区二区美女诱惑| 色综合天天综合狠狠| 日韩一区二区三区免费观看| 国产精品久久毛片a| 日韩福利电影在线| 成人福利视频网站| 日韩一二三区不卡| 亚洲色图在线看| 美腿丝袜在线亚洲一区 | 国产成+人+日韩+欧美+亚洲| 99久久夜色精品国产网站| 91精品婷婷国产综合久久| 国产欧美日韩不卡| 免费高清视频精品| 色综合久久久久网| 久久精品视频一区| 丝袜美腿亚洲色图| av毛片久久久久**hd| 欧美一级一级性生活免费录像| 国产精品久久久99| 国产美女在线精品| 在线综合+亚洲+欧美中文字幕| 国产精品每日更新在线播放网址| 视频一区视频二区中文字幕| 色综合天天综合在线视频| 国产日韩欧美a| 国内成人免费视频| 91精品国产一区二区| 一区二区三区在线观看动漫| 国产成人精品免费| 欧美成人福利视频| 免费在线观看一区二区三区| 欧美日韩精品一区二区| 有码一区二区三区| bt7086福利一区国产| 欧美国产激情一区二区三区蜜月 | 国产一级精品在线| 91精品国产福利| 婷婷激情综合网| 欧美日韩一区在线观看| 亚洲国产精品视频| 欧美日韩在线三级| 亚洲国产成人91porn| 在线观看免费成人| 亚洲综合成人在线| 欧美午夜电影在线播放| 亚洲一卡二卡三卡四卡无卡久久| 色婷婷综合中文久久一本| 亚洲靠逼com| 欧美色涩在线第一页| 亚洲成人1区2区| 欧美一区二区三区在| 免费国产亚洲视频| xf在线a精品一区二区视频网站| 精品亚洲成a人在线观看| 日韩欧美www| 国产成人精品免费网站| 中文字幕视频一区二区三区久| www.欧美日韩国产在线| 一级特黄大欧美久久久| 91久久精品网| 日本三级亚洲精品| 久久综合狠狠综合| 岛国一区二区在线观看| 亚洲视频 欧洲视频| 欧美精品三级在线观看| 久久国产剧场电影| 中文字幕不卡在线| 欧美日韩一区成人| 狠狠色丁香久久婷婷综| 91麻豆精品久久久久蜜臀 | 亚洲日韩欧美一区二区在线| 色94色欧美sute亚洲线路一久| 午夜欧美大尺度福利影院在线看| 日韩欧美一卡二卡| 99精品视频在线观看| 五月婷婷激情综合| 国产精品区一区二区三区| 欧美在线一区二区三区| 国产精品一区专区| 亚洲小说春色综合另类电影| 精品美女一区二区| 国产精品对白交换视频 | 欧美日韩国产精品自在自线| 久久国产精品无码网站| 亚洲人成在线观看一区二区| 欧美精品久久一区二区三区| 国产精品一二二区| 午夜视黄欧洲亚洲| 亚洲欧美在线视频观看| 精品国产一区二区三区忘忧草| 91毛片在线观看| 国产美女精品一区二区三区| 亚洲国产欧美在线| 中文字幕不卡的av| 日韩精品中午字幕| 欧美综合一区二区| proumb性欧美在线观看| 久久精品国产澳门| 亚洲成人三级小说| 亚洲图片欧美激情| 欧美激情中文字幕| 精品99久久久久久| 欧美成人video| 欧美电影在线免费观看| 色呦呦日韩精品| 成人av高清在线| 国产高清不卡二三区| 蜜臀av性久久久久蜜臀aⅴ | 欧美精品日韩综合在线| 99re这里只有精品首页| 国产一区二区三区日韩| 蜜桃视频免费观看一区| 亚洲18影院在线观看| 亚洲国产视频在线| 亚洲影院免费观看| 亚洲成人手机在线| 亚洲大片精品永久免费| 亚洲精品免费看| 亚洲激情一二三区| 亚洲尤物视频在线| 天天综合天天做天天综合| 洋洋成人永久网站入口| 一区二区成人在线观看| 亚洲在线视频一区| 午夜不卡在线视频| 日本强好片久久久久久aaa| 视频一区欧美精品| 六月丁香综合在线视频| 精品一区二区免费看| 国产一区二区三区日韩| 国产精品99久久久久久有的能看| 国产伦精品一区二区三区免费迷 | 欧美成人免费网站| 欧美白人最猛性xxxxx69交| 欧美大片在线观看一区二区| 日韩美女天天操| 欧美激情一二三区| 一区二区视频在线| 午夜精品久久久久| 国内外成人在线| 99精品欧美一区二区三区综合在线| 99久久久无码国产精品| 欧美日韩中文精品| 欧美videos中文字幕| 国产欧美一区二区三区沐欲| 中文字幕日韩精品一区| 伊人性伊人情综合网| 日韩中文字幕麻豆| 国产美女精品在线| 欧美艳星brazzers| 久久综合色综合88| 一区二区三区四区中文字幕| 丝瓜av网站精品一区二区| 国产一区二区导航在线播放| 色婷婷国产精品久久包臀 | 国产精品私人影院| 亚洲第一精品在线| 国产a精品视频| 欧美在线免费观看亚洲| 国产日韩精品一区| 图片区小说区区亚洲影院| 国产精品亚洲第一| 欧美片网站yy| 国产精品无遮挡| 美女在线一区二区| 色猫猫国产区一区二在线视频| 日韩一区二区三区观看| 亚洲欧美日韩国产综合| 麻豆免费精品视频| 欧美日韩综合不卡| 亚洲精品自拍动漫在线| 国产成人在线看| 精品日本一线二线三线不卡| 一区二区三区精品视频在线|