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