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

📄 minitosdef.h

📁 minitos是一个实时的嵌入式操作系统
💻 H
字号:
/*
	miniTOS V0.1.0  1998-2003 (c) 林良水 (Lin LS)
	miniTOS是一个完全开放源码的软件,您可以自由的使用和修改以及可以用在您想用的用途,但开发
人员不保证本软件的可靠性,以及对您的损失负任何责任。

	本文实现miniTOS进程表结构。

	create by Lin LS ,1998.10
*/



#ifndef _MINITOSDEF_H_
#define _MINITOSDEF_H_

#include "TypeDef.h"
#include "config.h"

#define N_REGS 15
#define N_PROC 30
#define N_SYSPROC	3	//系统使用的进程表

//Do not change the register's serial,if you do that you must unterstand why?
typedef struct ProcTbl
{
	unsigned int SPSR;
  	unsigned int CPSR;
	char * SP;   //r13

	int lr;
	void (*IP)(void);  //r15

	int r0;
	int r1;
	int r2;
	int r3;
	int r4;
	int r5;
	int r6;
	int r7;
	int r8;
	int r9;
	int r10;
	int r11;
	int r12;
            //进程内部变量
	int priority;   //优先级0-系统保留,1,2为tisr,其他为task or proc
	
	struct ProcTbl *ptrNextPrio;
	struct ProcTbl *ptrNextProc;
	
	int status;	//bit.0 =1 blocking for waiting mailbox msg
	int flags;      //标志位,used by event
	void * ptrMsg;		//

	int SleepTicks;
	    
	        //时间片轮巡。
	int RunTicksCount;	//如果进程在run状态RunTicksCount--,为0时,定时中断					
	int RunTicksInit;	//该进程时间片初值
	
	    //signal使用
	int status_bak;     //status的备份,当从signal handler返回,需要判断原来的挂起状态
	int SignalInRun;    //指示正在运行一个signal子程序
	int EnableSignal;   //某一位使能标志
	void (*SignalHandler)(int); //Signal子程序
	int signal;
	
	    //Event
	int WaitEvent;          //所要等待的事件
    int ReceiveEvent;       //实际接收到的事件
    
        //tisr 需要运行的次数记数器
    uint32 TisrRunCount;   //该变量仅对TISR有效,对普通任务为保留
    
}PROC;

/*
//Do not change the register's serial,if you do that you must unterstand why?
//任务级的中断服务表
typedef struct TaskIsrTbl
{
	unsigned int SPSR;
  	unsigned int CPSR;
	char * SP;   //r13

	int lr;
	void (*IP)(void);  //r15

	int r0;
	int r1;
	int r2;
	int r3;
	int r4;
	int r5;
	int r6;
	int r7;
	int r8;
	int r9;
	int r10;
	int r11;
	int r12;
            //进程内部变量
	int priority;
//	struct TaskIsrTbl *ptrNextPrio;
//	struct TaskIsrTbl *ptrNextTaskISR;
	
//	int status;	//bit.0 =1 blocking for waiting mailbox msg
//	int flags;      //标志位
    
}TISR;      //Task Isr
*/
typedef struct ProcTbl  TISR;

#define N_TASK_PRIO	8	//priority number is 8
#define N_SERVER_PRIO	1
#define N_PROC_PRIO	1

#define TASK_PRIO	7	//0..7
#define SERVER_PRIO	8
#define	PROC_PRIO	9
#define IDLE_PRIO	10
/*

*/
typedef struct MailBox
{
	PROC	* ptrSrc;
	PROC	* ptrDest;
	void 	* ptrMailBoxBuf;
}MAILBOX;

typedef struct Sempore
{
	PROC	*ptrSuspendProc;	//挂起在该信号量的进程链表,
					//若没有信号量挂起,为NULL
	int	SemCount;		// >=0 <=0x7fff ffff
}SEMPORE;

typedef struct Queue
{

	void **ptrBegin;
//	int begin=0;
	int	 end;
	int  write; //指向可写的位置
	int  read;  //指向可读的位置
	int size;

	PROC *ptrSuspendProc;
}QUEUE;

#define ERR_DEST (-1)
#define ERR_MSGFULL (-2)
#define ERR_MSGEMPTY (-3)

#define ERR_MAILBOXFULL	(-2)
#define ERR_QUEUEFULL (-2)

#define TICKS_PER_SEC	10  // add when i debug ucip

#define MO_SUSPEND	0	//创建进程后进程挂起
#define MO_RUN		1	//创建进程后,进入ready

#define MO_FIFO		0	//在IPC通讯时不使用优先级,而用FIFO
#define MO_PRIORITY	1	//IPC使用优先级

        //进程状态
#define PROC_TERMINATE 0x8000
#define PROC_FINISH     0x4000
#define PROC_READY     0x0000

#endif

⌨️ 快捷键说明

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