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

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

?? os_obj.c

?? 引入事件驅動觀念的搶占式多任務微型實時內核——MicroStar的設計與實現;提出基于事件的優先級這一新概念。
?? C
字號:
/**************** os_obj.c**************/
/*            MacroStar 1.0a            */
/*          Zhengyuquan,2003.7,Beijing  */
/*           All rights reserved        */
/****************************************/
#include "mStar.h"

extern HTIMER STDCALL _FAR os_SetTimerIn(uchar timerId, uint_16 elapse, TIMERPROC lpTimerFunc);
uint_16 os_objectState=0xFFFF;
OBJECT 	os_objects[MAX_OBJECT_NUM];		// 16*4=64

extern volatile uint_16 os_timerState;
extern TIMER  	os_timers[ ];

/*
************************************************************
*
*
*
************************************************************
*/
HOBJECT STDCALL _FAR os_CreateObject(uchar num, uchar type )
{
	HOBJECT  hObject = NULL_HOBJECT;
    uchar    index;
	LOCK_INT( );
	if( os_objectState )
    {
		if( HIGHBYTE(os_objectState) )
		{
			index = os_fastTable[ HIGHBYTE(os_objectState) ];
		}
		else
		{
			index = os_fastTable[ LOWBYTE(os_objectState) ] | 8;
		}
		os_objectState ^= os_maskTable[ index ];

		hObject = &os_objects[ index ];
		hObject->waiter = 0;
		hObject->num  = num;
		hObject->type = type;
	}
	UNLOCK_INT( );
	return hObject;
}

/*
************************************************************
*
*
*
************************************************************
*/
void STDCALL _FAR os_SetEvent( HEVENT hEvent,uchar mode)
{
	os_ASSERT( (hEvent!= NULL_HEVENT)&&(hEvent->type == EVENT_OBJECT),SET_INVALID_EVENT );
    os_ASSERT( (mode==AUTO_RESET) || (mode==HANDLE_RESET),SET_EVENT_MODE);
	os_slpState |= hEvent->waiter;
	hEvent->waiter = 0;
	hEvent->num = mode;
	os_SetSwitchFlag( );
}

/*
************************************************************
*
*
*
************************************************************
*/
void  STDCALL _FAR os_ResetEvent( HEVENT hEvent)
{
	os_ASSERT( (hEvent!= NULL_HEVENT)&&(hEvent->type == EVENT_OBJECT),RESET_INVALID_EVENT );
	hEvent->num =0;
}

/*
************************************************************
*
*
*
************************************************************
*/
BOOL STDCALL _FAR os_RequireObject(HOBJECT hObject)
{
	BOOL ret = os_false;
	LOCK_INT( );
	if( hObject->num)
	{
		if(hObject->type == SEMAPHORE_OBJECT)hObject->num--;
		ret = os_true;
	}
	UNLOCK_INT( );
	return ret;
}

/*
************************************************************
*
*
*
************************************************************
*/
void STDCALL _FAR os_WaitObject( HOBJECT hObject)
{
	LOCK_INT( );
	if( hObject->num )
	{
		if(hObject->type == SEMAPHORE_OBJECT )hObject->num--;
		UNLOCK_INT( );
	}
	else
	{
		hObject->waiter |= os_curPrioMask;
		os_slpState     ^= os_curPrioMask;
		UNLOCK_INT( );
		os_Schedule( );
	}
}

/*
************************************************************
*
*
*
************************************************************
*/
void STDCALL _FAR os_ReleaseSemaphore(HSEMAPHORE hSemaphore)
{
	uint_16 temp;
    uchar   who;

	os_ASSERT( (hSemaphore != NULL_HSEMAPHORE)&&hSemaphore->type == SEMAPHORE_OBJECT,
		RELE_INVALID_SEMAPHORE);

	LOCK_INT( );
	if( !hSemaphore->waiter )
	{
		hSemaphore->num++;
		UNLOCK_INT( );
		return;
	}

    ENTER_CRITICAL_SEG( );
	UNLOCK_INT( );

	if( (temp = hSemaphore->waiter&os_rdyhState)  )
	{
		if( temp > (os_curPrioMask&os_rdyhState) )
			os_SetSwitchFlag( );

	}
	else
	{
		if( (temp = (hSemaphore->waiter & os_rdyState)) > os_curPrioMask)
			os_SetSwitchFlag( );
    }
	who = os_fastTable[ HIGHBYTE(temp) ];
	if( who == 0xFF )
		who = os_fastTable[ temp ] + 8;

    os_ASSERT( !(os_prioState&os_maskTable[who]) ,RELE_SEMA_TO_NULL);
    os_slpState |= os_maskTable[who];
	hSemaphore->waiter ^= os_maskTable[who];

	LEAVE_CRITICAL_SEG( );
}

/*
************************************************************
*
*
*
************************************************************
*/
void STDCALL _FAR os_DeleteObject( HOBJECT hObject)
{
	ENTER_CRITICAL_SEG( );

	os_ASSERT( hObject!=NULL_OBJECT,DEL_NULL_OBJECT );
    os_WARNING( !hObject->waiter,DEL_WAITING_OBJECT );

	os_objectState |= os_maskTable[((int)(hObject-os_objects))];

	os_slpState |= hObject->waiter;/*robust code*/
	LEAVE_CRITICAL_SEG( );
}

/*
************************************************************
*
*
*
************************************************************
*/
uchar STDCALL _FAR os_WaitObjectTimeOut( HOBJECT hObject,uint_16 elapse)
{
	HTIMER hTimer;

	os_ASSERT( hObject != NULL_OBJECT,WAIT_INVALID_OBJECT);

	LOCK_INT( );
	if( hObject->num )
	{
		if(hObject->type == SEMAPHORE_OBJECT )hObject->num--;
		UNLOCK_INT( );
		return WAIT_SUCCESS;
	}
	else
	{
		LOCK_SCHEDULE( );
		UNLOCK_INT( );

	   if( ( hTimer = os_SetTimerIn(SLEEP_ID,elapse,0) ) == NULL_TIMER )
		{
			UNLOCK_SCHEDULE( );
			os_Schedule( );
			return NOT_ENOUGH_TIMER;
		}
        else
		{
			hObject->waiter |= os_curPrioMask;
			os_slpState ^= os_curPrioMask;
  		    UNLOCK_SCHEDULE( );

			os_Schedule( );

			if( hObject->waiter & os_curPrioMask )
			{
				hObject->waiter ^= os_curPrioMask;
				return WAIT_TIME_OUT;
			}
			else
			{
				if(os_timers[hTimer].taskId == os_GetCurrentTaskId() )
					os_timerState |= os_maskTable[ hTimer ];
				return WAIT_SUCCESS;
			}
		}
	}
}


#ifdef _DEBUG
/*
************************************************************
*
*
*
************************************************************
*/
void STDCALL _FAR os_WaitEvent(HEVENT hEvent)
{
	os_ASSERT( (hEvent!= NULL_HEVENT)&&(hEvent->type == EVENT_OBJECT),WAIT_INVALID_EVENT );
    os_WaitObject( (HOBJECT)hEvent );
}

/*
************************************************************
*
*
*
************************************************************
*/
void STDCALL _FAR os_WaitSemaphore(HSEMAPHORE hSemaphore)
{
	os_ASSERT( (hSemaphore!= NULL_HSEMAPHORE)&&(hSemaphore->type == SEMAPHORE_OBJECT),
		WAIT_INVALID_SEMAPHORE);
	os_WaitObject( (HSEMAPHORE)hSemaphore );
}

/*
************************************************************
*
*
*
************************************************************
*/
BOOL STDCALL _FAR os_RequireEvent( HEVENT hEvent)
{
	os_ASSERT( (hEvent!=NULL_OBJECT) && (hEvent->type==EVENT_OBJECT),
		REQ_INVALID_EVENT);
	return os_RequireObject(hEvent);
}

/*
************************************************************
*
*
*
************************************************************
*/
BOOL STDCALL _FAR os_RequireSemaphore( HOBJECT hObject)
{
	os_ASSERT( (hObject!=NULL_OBJECT) && (hObject->type==SEMAPHORE_OBJECT),
		REQ_INVALID_SEMAPHORE);
	return os_RequireObject(hObject);
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品88久久久久88久久久| 亚洲欧洲精品成人久久奇米网| 日韩精品中文字幕一区二区三区 | 亚洲国产日韩一级| 经典三级视频一区| 欧美日韩国产影片| 亚洲人快播电影网| 国产激情视频一区二区在线观看 | 男人的天堂久久精品| 国产老女人精品毛片久久| 欧美日韩在线三级| 亚洲天堂久久久久久久| 国产高清一区日本| 欧美一级夜夜爽| 午夜久久久久久电影| 色噜噜狠狠一区二区三区果冻| 国产香蕉久久精品综合网| 蜜桃在线一区二区三区| 欧美日本在线一区| 一卡二卡欧美日韩| 色悠悠久久综合| 亚洲欧洲日韩在线| 成人精品视频一区| 国产精品理论片在线观看| 国产一区二区导航在线播放| 91精品国产美女浴室洗澡无遮挡| 亚洲一级二级三级在线免费观看| 色综合久久精品| 亚洲色图欧美激情| 色先锋资源久久综合| 亚洲欧美另类小说| 日本韩国欧美在线| 亚洲国产中文字幕在线视频综合 | 国产麻豆91精品| 久久综合久久鬼色| 国产精品自拍av| 久久精品视频一区二区| 国产麻豆欧美日韩一区| 久久精品一区二区三区不卡牛牛| 国产一本一道久久香蕉| 国产精品天干天干在观线| 成人美女视频在线观看18| 久久精品视频在线免费观看| 成人午夜电影小说| 亚洲麻豆国产自偷在线| 欧美日韩中文字幕一区| 日本不卡视频在线观看| 精品电影一区二区| 成人永久aaa| 亚洲欧美日韩国产成人精品影院| 在线影视一区二区三区| 日韩精品三区四区| 国产日韩欧美电影| 在线视频一区二区三区| 日韩高清不卡一区| 久久精品人人做| 色婷婷av一区二区三区gif| 丝袜诱惑亚洲看片| 国产无人区一区二区三区| av欧美精品.com| 日本一不卡视频| 国产精品欧美一级免费| 欧美亚洲日本国产| 黑人精品欧美一区二区蜜桃| 国产欧美日本一区二区三区| 欧美中文字幕不卡| 国产在线一区二区| 一区二区三区精品视频在线| 欧美变态tickle挠乳网站| 不卡电影免费在线播放一区| 亚洲成精国产精品女| 26uuu精品一区二区在线观看| 成人av电影在线观看| 亚洲成a人在线观看| 国产精品视频在线看| 欧美精品色一区二区三区| 粉嫩久久99精品久久久久久夜| 亚洲自拍偷拍图区| 国产亚洲精品中文字幕| 欧美日韩国产一级二级| 成人av网站在线观看| 久久国产剧场电影| 亚洲第一激情av| 亚洲欧洲一区二区在线播放| 日韩你懂的在线观看| 欧美网站大全在线观看| 成人av电影免费在线播放| 老司机一区二区| 亚洲成a天堂v人片| 亚洲激情五月婷婷| 国产丝袜在线精品| 日韩写真欧美这视频| 91国产丝袜在线播放| 国产成人小视频| 久久国产麻豆精品| 日产欧产美韩系列久久99| 怡红院av一区二区三区| 国产亚洲精品精华液| 精品国产伦一区二区三区观看体验 | 91色乱码一区二区三区| 国产黄人亚洲片| 精品系列免费在线观看| 视频在线观看国产精品| 亚洲成人免费影院| 亚洲综合色噜噜狠狠| 一区二区三区丝袜| 亚洲精品国产一区二区精华液| 亚洲国产精品成人综合色在线婷婷 | 欧美午夜精品久久久久久超碰 | 日本中文一区二区三区| 亚洲成a人v欧美综合天堂下载| 一区精品在线播放| 1区2区3区欧美| 亚洲天天做日日做天天谢日日欢| 国产精品久久影院| 国产精品久久久久久久蜜臀| 国产精品久久久久久久久免费桃花 | 欧美成人免费网站| 精品国产免费人成电影在线观看四季 | 秋霞成人午夜伦在线观看| 五月婷婷欧美视频| 天天亚洲美女在线视频| 日韩精品五月天| 精品夜夜嗨av一区二区三区| 国产一区二区影院| 国产精品一区三区| 不卡的av在线播放| 欧美性大战久久| 欧美一区二区三区日韩| 精品国精品自拍自在线| 337p粉嫩大胆噜噜噜噜噜91av| 久久免费偷拍视频| 最新中文字幕一区二区三区| 中文字幕在线观看一区| 亚洲欧美激情一区二区| 亚洲综合区在线| 奇米一区二区三区| 国产成人精品亚洲午夜麻豆| 91在线码无精品| 在线国产亚洲欧美| 欧美一区二区国产| 国产精品污网站| 亚洲成人动漫在线免费观看| 麻豆久久久久久| 99久久精品国产麻豆演员表| 在线亚洲高清视频| 精品国产免费一区二区三区四区| 国产精品免费视频网站| 亚洲高清免费观看高清完整版在线观看| 日本中文字幕一区二区有限公司| 国产一区二区三区精品欧美日韩一区二区三区 | 色丁香久综合在线久综合在线观看| 欧美日韩国产天堂| 欧美国产精品久久| 日韩激情av在线| 99re热这里只有精品免费视频| 91麻豆精品国产91| 中文字幕一区av| 久久66热偷产精品| 色悠悠久久综合| 国产亚洲欧美日韩俺去了| 亚洲一区二区偷拍精品| 国产精品综合网| 91精品国产欧美一区二区成人| 国产女同互慰高潮91漫画| 日韩在线卡一卡二| 91女厕偷拍女厕偷拍高清| 精品久久久影院| 亚洲国产一区二区三区青草影视| 国产精品中文欧美| 91精品福利在线一区二区三区 | 99视频有精品| 亚洲精品在线一区二区| 日欧美一区二区| 色综合天天综合网国产成人综合天| 精品嫩草影院久久| 日本视频免费一区| 欧美自拍偷拍一区| 亚洲欧美怡红院| yourporn久久国产精品| 欧美sm美女调教| 日本不卡1234视频| 欧美一区二区性放荡片| 亚洲国产综合91精品麻豆| 94-欧美-setu| 自拍偷拍欧美激情| 成人综合日日夜夜| 亚洲国产精品成人久久综合一区| 激情欧美日韩一区二区| 欧美一级片在线观看| 天天综合色天天综合| 欧美日韩高清一区二区三区| 亚洲日本va午夜在线电影| 成人黄色国产精品网站大全在线免费观看| 日韩美女主播在线视频一区二区三区| 午夜精品久久久久久久久久| 欧美性大战久久| 婷婷久久综合九色综合伊人色| 欧美日韩精品专区| 日韩在线观看一区二区|