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

📄 os_kernel.hpp

📁 易能嵌入式操作系统E_LAND1.0.0_LPC2106_DS12.rar
💻 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 + -