📄 os_kernel.hpp
字号:
//==========================================================================================
//--文件名:OS_KERNEL.H
//--
//--功 能:系统内核的类和对象定义
//--
//--作 者:陈 斌
//--
//--版本号:v1.00
//--
//--时 间:2006.12.31
//==========================================================================================
#ifndef OS_KERNEL_H
#define OS_KERNEL_H
#include <Config/OS_CON.Hpp>
#include <os_cpu.Hpp>
//===============================================================================
#define VER 100
typedef UINT16 OS_EID;
typedef UINT16 OS_FLAGS;
typedef UINT8 OS_PID;
#if DOS_PMAX%8 != 0
#define DOS_PTAB (DOS_PMAX/8+1)
#else
#define DOS_PTAB (DOS_PMAX/8)
#endif
typedef UINT8 OS_INTNTYPE;
const UINT8 OSPINDEX[256]={
0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0
};
#ifdef OS_KERNEL_CPP
#define OS_EXT
#else
#define OS_EXT extern
#endif
class E_LAND;
class OS_ELANDTCB;
class OS_IDLE;
class OS_TCB;
class OS_ETCB;
class OS_CCB;
class OS_PCB;
class OS_ECB;
class OS_FIFOECB;
class E_LAND
{
public:
};
class OS_PRITAB:public E_LAND
{
public:
void operator=(UINT8);
UINT8 PriTB[DOS_PTAB];
UINT8 PriTA;
};
class OS_PCB:public E_LAND
{
public:
OS_PCB();
void operator= (OS_PID);
void Recur();
UINT8 BitA;
UINT8 A;
UINT8 BitB;
UINT8 B;
OS_PID Prio;
private:
};
class OS_ELANDTCB:public E_LAND
{
public:
STACK* pContext;
#if (DOS_STACHE == EN)
STACK* pTop;
#endif
#if DOS_STACHE == EN
STASIZE StackFree;
#endif
ERRDATA TcbErr;
UINT8 Tick;
UINT8 CRITCOU;
};
class OS_TCB:public OS_ELANDTCB
{
public:
OS_TCB(void(*pTask)(void *pd),void*,STACK*,STASIZE,OS_PID,CCBMD = DMC_USER_MODE,UINT8 = DOS_TCBTIME);
OS_TCB();
void ActivationCcb(void(*pTask)(void *pd),void* pData, CCBMD Mod, UINT16 Usu);
void Shift(OS_TCB**, OS_TCB**);
void ChangPri(OS_PID Pid);
void Init();
void Sleep();
void Wake();
void Delay(TIMETYPE);
void Delayms(TIMETYPE);
void Delay(UINT16 h,UINT16 m,UINT16 s,UINT16 ms);
void ExitDelay();
void Ready();
void Unready();
OS_TCB** ppCcb;
OS_TCB* pTaskF;
OS_TCB* pTaskN;
OS_TCB* pCcb;
OS_TCB* pTime;
OS_PCB* pPcb;
OS_PRITAB* pPritab;
CCBMD Mode;
TIMETYPE DelayTime;
UINT8 Attri;
UINT8 Deep;
UINT8 Usuf;
void DelayOper(TIMETYPE);
protected:
};
#if ((DOS_EVENT == EN) && (DOS_EVENCOU > 0))
class OS_ETCB:public OS_TCB
{
public:
OS_ETCB(void(*pTask)(void *pd),void*,STACK*,STASIZE,OS_PID,CCBMD = DMC_USER_MODE,UINT16 = DOS_TCBTIME);
OS_FLAGS AppSem(OS_EID, TIMETYPE = DOS_UNLIMIT);
void* AppMessage(OS_EID, TIMETYPE = DOS_UNLIMIT);
UINT8 AppMutex(OS_EID, TIMETYPE = DOS_UNLIMIT);
void WaitEve(OS_ECB*,TIMETYPE);
OS_ECB* pEcb;
#if DOS_QUEUE == EN||DOS_QUELOCK == EN
#endif
#if DOS_EFLAG==EN
OS_FLAGS BFlags;
#endif
protected:
};
class OS_ECB:public E_LAND
{
public:
void operator=(char i);
void EcbSendSem();
void EcbSendMessage(void*);
void EcbSendMutex();
void SetSem(OS_FLAGS);
void ReadyEccb();
UINT8 SetLock(OS_ETCB* pEtcb);
void Unlock();
void ResetQueue();
OS_TCB* ppAppTab[DOS_PMAX];
void* pMixed;
OS_PRITAB Pritab;
OS_FLAGS Flags;
OS_STATE EStat;
OS_EID EidF;
OS_EID EidN;
OS_EID Eid;
protected:
private:
};
#endif
OS_PID OSInde(OS_PRITAB *);
void OSInitExt();
void OSInit();
void OSSched();
void OSStrClr(UINT8& str,UINT8& cur);
OS_EID CreEven(OS_STATE Stat);
void CreEven(OS_EID Eid, OS_STATE Stat);
void OSTick();
void OSStart();
void OSCloseTick();
STACK* CPUCcbStkInit (STACK*, void(*pTask)(void*), void*, CCBMD);
void OSBSPInitHook();
void OSTaskSwHook();
void OSIdleHook();
void OSStatHook(UINT8);
void OSError(ERRDATA);
ERRDATA OSTrip();
void OSTimeInit(void);
void BSP_Init();
void COMout(char);
void EnIntnesting(void);
#endif
/*
class OS_EVENT:public OS_E_LAND
{
public:
OS_ECB* pEvent;
};
#if ((DOS_SEM==EN) && (DOS_MAX_SEM > 0))
class OS_SEM_TCB:public OS_EVENT
{
public:
UINT16 Semcou;
};
#endif
void **OSQStart;
void **OSQEnd;
void **OSQIn;
void **OSQOut;
#if((DOS_EFLAG==EN) && (DOS_MAX_EFLAG >0))
class OS_FLAG_TCB:public OS_EVENT
{
public:
OS_FLAGS Flags;
};
#endif
#if ((DOS_SEM==EN) && (DOS_MAX_SEM > 0))
class OS_SEM_TCB:public OS_EVENT
{
public:
UINT16 Semcou;
};
#endif
class OS_EVENT;
class OS_EVENT:public E_LAND
{
};
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -