📄 os_course.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 + -