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

📄 visbykerneldef.h

📁 一个多任务实时操作系统
💻 H
字号:
#ifndef __VISBY_KERNELDEF_H__
#define __VISBY_KERNELDEF_H__

#include "Visby.h"
#include "..\Target\44blib.h"
#include "..\Target\44b.h"

#define VB_ENCRIT do{Visby_Critical++;}while(false)
#define VB_DECRIT do{if(Visby_Critical > 0)Visby_Critical--;}while(false)

#define VB_TICKINTV		1000	//uint: us

//任务运行的6种优先级
#define PRIO_KERNEL		0x00
#define PRIO_REAL		0x01
#define PRIO_HIGH		0x02
#define PRIO_NORMAL		0x03
#define PRIO_LOW		0x04
#define PRIO_IDLE		0x05		//不分配给用户任务使用

//CPU的6个运行模式
#define MODE_USER		0x10
#define MODE_FIQ		0x11
#define MODE_IRQ		0x12
#define MODE_SUPER		0x13
#define MODE_ABORT		0x17
#define MODE_UNDEF		0x1B
#define MODE_SYSTEM		0x1F

#define INTVEC_BASE		0x0C000000		//程序下载运行的基地址
#define	INTVEC_RESER	(INTVEC_BASE + 0x00000000)
#define	INTVEC_UNDEF	(INTVEC_BASE + 0x00000004)
#define	INTVEC_SWI		(INTVEC_BASE + 0x00000008)
#define	INTVEC_IABT		(INTVEC_BASE + 0X0000000C)
#define	INTVEC_DABT		(INTVEC_BASE + 0X00000010)
#define	INTVEC_RESERVE	(INTVEC_BASE + 0x00000014)
#define	INTVEC_IRQ		(INTVEC_BASE + 0x00000018)
#define	INTVEC_FIQ		(INTVEC_BASE + 0x0000001C)

#define	INTVEC_EINT0	(INTVEC_BASE + 0x00000020)
#define	INTVEC_EINT1	(INTVEC_BASE + 0x00000024)
#define	INTVEC_EINT2	(INTVEC_BASE + 0x00000028)
#define	INTVEC_EINT3	(INTVEC_BASE + 0x0000002c)
#define	INTVEC_EINT4567	(INTVEC_BASE + 0x00000030)
#define	INTVEC_TICK		(INTVEC_BASE + 0x00000034)
#define	INTVEC_ZDMA0	(INTVEC_BASE + 0x00000040)
#define	INTVEC_ZDMA1	(INTVEC_BASE + 0x00000044)
#define	INTVEC_BDMA0	(INTVEC_BASE + 0x00000048)
#define	INTVEC_BDMA1	(INTVEC_BASE + 0x0000004c)
#define	INTVEC_WDT		(INTVEC_BASE + 0x00000050)
#define	INTVEC_UERR01	(INTVEC_BASE + 0x00000054) 
#define	INTVEC_TIMER0	(INTVEC_BASE + 0x00000060) 
#define	INTVEC_TIMER1	(INTVEC_BASE + 0x00000064) 
#define	INTVEC_TIMER2	(INTVEC_BASE + 0x00000068) 
#define	INTVEC_TIMER3	(INTVEC_BASE + 0x0000006c) 
#define	INTVEC_TIMER4	(INTVEC_BASE + 0x00000070)
#define	INTVEC_TIMER5	(INTVEC_BASE + 0x00000074)
#define	INTVEC_URXD0	(INTVEC_BASE + 0x00000080)
#define	INTVEC_URXD1	(INTVEC_BASE + 0x00000084)
#define	INTVEC_IIC		(INTVEC_BASE + 0x00000088)
#define	INTVEC_SIO		(INTVEC_BASE + 0x0000008c)
#define	INTVEC_UTXD0	(INTVEC_BASE + 0x00000090)
#define	INTVEC_UTXD1	(INTVEC_BASE + 0x00000094)
#define	INTVEC_RTC		(INTVEC_BASE + 0x000000a0)
#define	INTVEC_ADC		(INTVEC_BASE + 0x000000c0)

/////////////////CPU上电后系统加载过程////////////////////
//    中断源初始化
//    CPU配置初始化
//    CPU端口初始化
//    操作系统内核初始化
//    设备初始化
//    任务初始化
//    转入任务运行
//////////////////////////////////////////////////////////*/

//*S3C44B0X的30个中断源的处理函数指针
typedef void (*LPFUNC)(void);
#define VB_ISR_RESERVE		0

#define VB_ISR_EINT0		8 
#define VB_ISR_EINT1		9 
#define VB_ISR_EINT2		10
#define VB_ISR_EINT3		11
#define VB_ISR_EINT4567		12
#define VB_ISR_INTTICK		VB_ISR_RESERVE
#define VB_ISR_Reserve1		VB_ISR_RESERVE
#define VB_ISR_Reserve2		VB_ISR_RESERVE
#define VB_ISR_INTZDMA0		16
#define VB_ISR_INTZDMA1		17
#define VB_ISR_INTBDMA0		18
#define VB_ISR_INTBDMA1		19
#define VB_ISR_WDT			20
#define VB_ISR_USER01		21
#define VB_ISR_Reserve3		VB_ISR_RESERVE
#define VB_ISR_Reserve4		VB_ISR_RESERVE
#define VB_ISR_TIMER0		24
#define VB_ISR_TIMER1		25
#define VB_ISR_TIMER2		VB_ISR_RESERVE
#define VB_ISR_TIMER3		27
#define VB_ISR_TIMER4		28
#define VB_ISR_TIMER5		29
#define VB_ISR_Reserve5		VB_ISR_RESERVE
#define VB_ISR_Reserve6		VB_ISR_RESERVE
#define VB_ISR_URXD0		32
#define VB_ISR_URXD1		33
#define VB_ISR_IIC			34
#define VB_ISR_SIO			35
#define VB_ISR_UTXD0		36
#define VB_ISR_UTXD1		37
#define VB_ISR_Reserve7		VB_ISR_RESERVE
#define VB_ISR_Reserve8		VB_ISR_RESERVE
#define VB_ISR_RTC			40
#define VB_ISR_Reserve9		VB_ISR_RESERVE
#define VB_ISR_Reserve10	VB_ISR_RESERVE
#define VB_ISR_Reserve11	VB_ISR_RESERVE
#define VB_ISR_Reserve12	VB_ISR_RESERVE
#define VB_ISR_Reserve13	VB_ISR_RESERVE
#define VB_ISR_Reserve14	VB_ISR_RESERVE
#define VB_ISR_Reserve15	VB_ISR_RESERVE
#define VB_ISR_ADC			48

#define VB_ISR_NUM		(VB_ISR_ADC - VB_ISR_EINT0 + 1)

//////////////////////////////////////////////
//           List
//////////////////////////////////////////////
typedef struct _Visby_List
{
	void *pData;
	struct _Visby_List *pNext;
} Visby_List;


/////////系统软中断定义 SWI中断///////////////
//////SWI定义为请求系统服务中断。用户的应用///
//程序通过API函数,使用SWI进行系统调用,并通//
//过R1~R12寄存器组传递调用参数。/////////////
//////SWI系统请求定义如下。///////////////////
//////////////////////////////////////////////
//中断请求号
#define VB_SWI_NULL		0x0000
#define VB_SWI_POW		0x0100		//电源管理
#define	VB_SWI_TASK		0x0200		//任务请求
#define VB_SWI_MSG		0x0300		//消息管理
#define VB_SWI_DEV		0x0400		//设备操作
#define VB_SWI_INT		0x0500		//中断请求

#define SWI_POW_NORM	0x0000
#define SWI_POW_SLOW	0x0001
#define SWI_POW_IDLE	0x0002
#define SWI_POW_STOP	0x0003
#define SWI_POW_SLIDLE	0x0004

#define SWI_TASK_NEW	0x0001
#define SWI_TASK_DEL	0x0002
#define SWI_TASK_SUS	0x0003
#define SWI_TASK_SLP	0x0004
#define SWI_TASK_RSM	0x0005
#define SWI_TASK_WAI	0x0006
#define SWI_TASK_CPR	0x0007

#define SWI_MSG_GLBL	0x0001
#define SWI_MSG_SEND	0x0002
#define SWI_MSG_URGT	0x0003

#define SWI_DEV_REQ		0x0001
#define SWI_DEV_FREE	0x0002


/////////////////////CPU寄存器组////////////////////////
////////////////////////////////////////////////////////
typedef struct _Visby_CPURegs
{
	uint R0;		//0
	uint R1;		//4
	uint R2;		//8
	uint R3;		//12
	uint R4;		//16
	uint R5;		//20
	uint R6;		//24
	uint R7;		//28
	uint R8;		//32
	uint R9;		//36
	uint R10;		//40
	uint R11;		//44
	uint R12;		//48
	uint SP;		//52
	uint LR;		//54
	uint PC;		//60
	uint CPSR;		//64
} Visby_CPURegs;


/////////////////////////消息///////////////////////////
////////////////////////////////////////////////////////
#define VB_MSG_MIN		0x00000000
#define VB_MSG_NULL		0x00000000
#define VB_MSG_KERNEL	0x000F0000
#define VB_MSG_SYSRTN	0x00F00000
#define VB_MSG_SYSTEM	0x0F000000
#define VB_MSG_USER		0xF0000000
#define VB_MSG_MAX		0xFFFFFFFF

#define MSG_WAIT_DEV	0x00100000
#define MSG_WAIT_RES	0x00200000

#define VB_MSG(type,detail)	((type&0xFFFF0000)|(detail&0x0000FFFF))
#define VB_LPARAM(uintd)	((ushort)(uintd&0x0000FFFF))
#define VB_HPARAM(uintd)	((ushort)((uintd&0xFFFF0000)>>16))

typedef struct _Visby_Msg
{
	uint Type;
	void *pDetail;
	struct _Visby_Msg *pNext;
} Visby_Msg;

/////////////////////任务控制块/////////////////////////
//  任务控制块中需要指明任务种类,包括内核任务,即
//统服务,和普通用户任务。
////////////////////////////////////////////////////////
#define VB_TS_ACTIVE	0x00
#define VB_TS_SLEEPING	0x10
#define VB_TS_SUSPEND	0x20
#define VB_TS_WAITMSG	0x30

typedef struct _Visby_Task
{
	Visby_CPURegs Regs;
	uchar Priority;
	uchar State;
	uint StackEnd;
	Visby_Msg *pHeadMsg;
	Visby_Msg *pTailMsg;
	ullong ResumeTick;
	uint WaitMsg;
	Visby_List *pUsedDev;			//new 使用的设备链
	struct _Visby_Task *pNext;
} Visby_Task;


//////////////////////设备描述符////////////////////////
//  设备区别与资源在于,设备是独立与CPU的外部设备。
//分为共享型设备和独占型设备两种,在设备描述符中记
//设备的使用状况。共享型设备可以被操作系统同时分给
//个任务,但是只有当使用该设备的任务完成一次操作,
//动将设备标志为空闲,其它任务才可以使用。
/////////////////////////////////////////////////////////
#define VB_DEV_OPRT_NUM		8	//设备操作方式
#define VB_DEV_OPEN			0	//打开
#define VB_DEV_CLOSE		1	//关闭
#define VB_DEV_WRITE		2	//写入
#define VB_DEV_READ			3	//读出
#define VB_DEV_TEST			4	//测试
#define VB_DEV_RESERVE		5	//保留操作

#define VB_DEV_TYPE			UCHAR
#define VB_DEV_SHARE		0x80
#define VB_DEV_ONE			0x00

typedef struct _Visby_Device
{
	VB_DEV_TYPE Type;		//设备类型
	ULONG	Desc;			//具体描述
	Visby_Task	*pUser;		//当前使用者
	Visby_List	*pWaitTask;	//等待该设备的任务队列
} Visby_Device;



///////////////functions in Core.c//////////////////////
void *heapalloc(uint nbyte);
void heapfree(void *ptr);

//uint		Visby_KInstallHandler(void (*routine)(void), uint vector);
Visby_Task 	*Visby_KCreateTask(void (*pentry)(void), byte priority, uint stackSize, uint mode);
void		Visby_KAddTask(Visby_Task *pTheTask);
//void 		Visby_KDestroyTask(Visby_Task *pTheTask);
//void 		Visby_KRemoveTask(Visby_Task *pTheTask);
void		Visby_KStart(void);
BOOL		Visby_KAuthDevice(Visby_Task *pTask, Visby_Device *pDev);


/*/////////////////////////系统软中断调用///////////////////////////
*******************************************************************/
__swi(VB_SWI_NULL)				void Visby_KReqNULL(void);
//任务相关的操作
__swi(VB_SWI_TASK|SWI_TASK_NEW)	void Visby_KReqNewTask(void (*pentry)(void), byte priority, uint stackSize, uint mode);
__swi(VB_SWI_TASK|SWI_TASK_DEL)	void Visby_KReqDelTask(Visby_Task *ptask);
__swi(VB_SWI_TASK|SWI_TASK_SUS)	void Visby_KReqSusTask(Visby_Task *ptask);
__swi(VB_SWI_TASK|SWI_TASK_SLP)	void Visby_KReqSlpTask(Visby_Task *ptask, uint tick);
__swi(VB_SWI_TASK|SWI_TASK_RSM)	void Visby_KReqRsmTask(Visby_Task *ptask);
__swi(VB_SWI_TASK|SWI_TASK_WAI)	void Visby_KReqWaiTask(Visby_Task *ptask, uint msgType);
__swi(VB_SWI_TASK|SWI_TASK_CPR)	void Visby_KReqChgPrio(Visby_Task *ptask, byte newPrio);
//消息相关的操作
__swi(VB_SWI_MSG|SWI_MSG_GLBL)	void Visby_KReqGlblMsg(Visby_Msg *pmsg);
__swi(VB_SWI_MSG|SWI_MSG_SEND)	void Visby_KReqSendMsg(Visby_Task *ptask, Visby_Msg *pmsg);
__swi(VB_SWI_MSG|SWI_MSG_URGT)	void Visby_KReqUrgtMsg(Visby_Task *ptask, Visby_Msg *pmsg);
//设备相关的操作
//__swi(VB_SWI_DEV|SWI_DEV_REQ)	void Visby_KReqGetDev(Visby_Task *ptask, Visby_Device *pdev);
//__swi(VB_SWI_DEV|SWI_DEV_FREE)	void Visby_KReqFreeDev(Visby_Device *pdev);


#endif

⌨️ 快捷键说明

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