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

📄 os_course.cpp

📁 易能嵌入式操作系统E_LAND1.0.0_LPC2106_DS12.rar
💻 CPP
字号:
//==========================================================================================
//--文件名:OS_COURSE.cpp
//--
//--功  能:系统进程定义文件
//--
//--作  者:陈  斌
//--
//--版本号:v1.00
//--
//--时  间:2006.12.31
//==========================================================================================
#ifndef	OS_COURSE_CPP
#define OS_COURSE_CPP
#include <E_LAND.H>
void OS_IDLE::Activation()
{
	#if (DOS_STACHE == EN)
	pTop = Idlesta;
	#endif
	#if DOS_STACHE == EN
	StackFree = DOS_IDLESTA;
	#endif
	pContext = CPUCcbStkInit(Idlesta+(DOS_IDLESTA-1), IdleMain, this, DMC_SYS_MODE);
	pOSHighRdy = this;
	pOSTcbCur = (OS_TCB*)pOSHighRdy;
	Tick = 0;
	TcbErr = ERR_NONE;
	CRITCOU = 0;
}
void OS_IDLE::IdleMain(void *pTemp)
{
	pTemp = pTemp;
	#if DOS_STAT == EN
	if(OSRunning == 0)
	{
		OSIdleSecCou = 1;
		ReStat = 0;
		OSTickCou = 0;
		OSEnIrq();
		OSTimeInit();
	}
	while(OSIdleSecCou != NULL)
	{
		if(ReStat == 0)
		{
			ReStat = 1;
			OSSeccou = 1;
		}
		OSSeccou++;
		#if DOS_IDLEHOOK == EN
		OSIdleHook();
		#endif
	}
	#else
	while(1)
	{
		#if DOS_IDLEHOOK == EN
		OSIdleHook();
		#endif
	}
	#endif
}
#if DOS_STAT == EN
void OSStatCourse(void *ptemp)
{
	UINT8 Rate;
	ptemp = ptemp;
	while(1)
	{
		if(OSSeccou > OSIdleSecCou)
		{
			OSIdleSecCou = OSSeccou;
		}
		if(ReStat == 0)
		{
			Rate = 100;
		}
		else
		{
			Rate = 100-(OSSeccou*100)/OSIdleSecCou;
		}
		ReStat = 0;
		OSStatHook(Rate);
		pOSTcbCur->Delay(DOS_SECTICK);
	}
}
#endif
void OSTickDelayCourse(void *pTemp)
{
	pTemp = pTemp;
	OS_TCB** ppDelyTcb;
	OS_TCB* pCCB;
	OS_TCB* pCCBN;
	TIMETYPE MinTime = 0;
	TIMETYPE Delay = 0;
	while(1)
	{
		OS_ENTER_CRITICAL();
		OSDelayTick = MinTime;
		OSDelayTime = MinTime;
		pOSTickCourse->Sleep();
		OS_EXIT_CRITICAL();
		pCCB = pOSDelayCcb;
		Delay = OSDelayTick;
		MinTime = (TIMETYPE)-1;
		pOSDelayCcb = (OS_TCB*)-1;
		while( pCCB != (OS_TCB*)-1)
		{
			pCCBN = pCCB->pTime;
			{
				if(pCCB->Deep == NULL)
				{
					OS_ENTER_CRITICAL();
					if(pCCB->DelayTime != 0)
					{
						pCCB->DelayTime -= Delay;
						if(pCCB->DelayTime == 0)
						{
							ppDelyTcb = &(pOSTcbRun[pCCB->pPcb->Prio]);
							pCCB->Shift(pCCB->ppCcb,ppDelyTcb);
							#if DOS_EVENT == EN
							if(pCCB->TcbErr == DEF_EVE_WAITE)
							{
								if(	pCCB->pPritab != &OSPriReady)
								{
									pCCB->Unready();
									pCCB->ppCcb = ppDelyTcb;
									pCCB->pPritab = &OSPriReady;
									pCCB->TcbErr = DEF_WAIT_END;
								}
							}
							#endif
							pCCB->Ready();
							pCCB->pTime = NULL;
						}
						else
						{
							if((pCCB->DelayTime) < MinTime)
							{
								MinTime = pCCB->DelayTime;
							}
							pCCB->pTime = pOSDelayCcb;
							pOSDelayCcb = pCCB;
						}
						OS_EXIT_CRITICAL();
						goto Next;
					}
					OS_EXIT_CRITICAL();
				}
			}
			pCCB->pTime = NULL;
			Next:
			pCCB = pCCBN;
		}
		if(OSDelayTick == 0)
		{
			OSDelayTime = 0;
		}
	}
}
#endif

⌨️ 快捷键说明

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