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

📄 kernal.h

📁 一种操作系统源码核
💻 H
📖 第 1 页 / 共 2 页
字号:

typedef struct queue_struct{
	struct queue_struct *next;
	WAIT_QUEUE *task_wait_header;
	UNSIGNED id;
	void  *current_protect ;     //指向当前的保护线程,正操作该结构的线程
	INT8U suspend_type;
	INT8U  resverd[3];
	UNSIGNED tasks_waiting;
	UNSIGNED queue_size;
	UNSIGNED available;
	void **queue_start;
	void **queue_end;
	void **read_pointer;
	void **write_pointer;

}QUEUE_QCB;
typedef struct {
	INT8U suspend_type;
	UNSIGNED tasks_waiting;
	UNSIGNED available;
	UNSIGNED task_id;
	

}QUEUE_DATA;

typedef struct pipe_struct{
	struct pipe_struct *next;
	WAIT_QUEUE *task_wait_header;

	UNSIGNED id;
	void  *current_protect;      //指向当前的保护线程,正操作该结构的线程
	INT8U suspend_type;
	INT8U  reserved;
	INT8U pipe_type;
	INT8U message_size;
	UNSIGNED tasks_waiting;
	UNSIGNED pipe_size;
	UNSIGNED available;
	INT8U *pipe_start;
	INT8U *pipe_end;
	INT8U *read_pointer;
	INT8U *write_pointer;

}PIPE_PCB;
typedef struct {
	INT8U *pipe_start;
	INT8U suspend_type;
	INT8U pipe_type;
	UNSIGNED tasks_waiting;
	UNSIGNED pipe_size;
	UNSIGNED available;
	UNSIGNED task_id;

}PIPE_DATA;


/*
*********************************************************************************************************
*                                  Semaphore  control Structure
*********************************************************************************************************
*/
typedef struct sem_struct{
	struct sem_struct *next;
	WAIT_QUEUE *task_wait_header;
	UNSIGNED id;
	void *current_protect;     //指向当前的保护线程,正操作该结构的线程
	INT8U suspend_type;
	INT8U reserved[3];

	SIGNED  sem_count;

}SEM_SCB;
typedef struct{
	INT8U suspend_type;
	UNSIGNED current_count;
	UNSIGNED task_id;
}SEM_DATA;
/*
*********************************************************************************************************
*                                  event   control Structure
*********************************************************************************************************
*/
typedef struct event_struct{
	struct event_struct *next;
	WAIT_QUEUE *task_wait_header;
	UNSIGNED  id;
	void  *current_protect ;  //指向当前的保护线程,正操作该结构的线程
	UNSIGNED tasks_waiting;
	UNSIGNED  current_events;
}EVENT_ECB;
typedef struct {
	UNSIGNED task_id;
	UNSIGNED tasks_waiting;
	UNSIGNED  current_events;
	
}EVENT_DATA;

/*
*********************************************************************************************************
*                                 driver  control Structure
*********************************************************************************************************
*/


typedef struct driver_struct{
	struct driver_struct *next;
	void *resverd;
	void  *current_protect;                //指向当前的保护线程,正操作该结构的线程
	INT8    dvname[4];
	INT8U  major_id; 
	INT8U  state;//是否初始化

	UNSIGNED flag;//利用flag的位标志标识对次设备的操作完成标志,从而实现同步操作
	WAIT_QUEUE *task_wait_header[MAX_MINOR_DEVICES];//等待队列
	void (*driver_entry)(UNSIGNED dv_minor,INT8U argc,void *argv); //驱动程序的入口函数,用户对设备的操作都要转换为该函数
}DRIVER_DCB;

struct driver_parms{
   	INT     base;
   	INT8U   ctl_port;
   	INT8U   irq;
   	INT8U   number;
};

typedef union {
	EVENT_ECB event_group;
	SEM_SCB   sem;
	QUEUE_QCB  queue;
	MAILBOX_MCB mailbox;
	MEM_MCB  MEM;

}OS_EVENT;

/*
*********************************************************************************************************
*                                   TASK variable DEFINE
*********************************************************************************************************
*/



typedef struct{
   	void   *Active_HISR_Heads[HISR_LOWEST_PRIO];    //指向激活的相同优先级HISR列表的
   	void *resverd;
   	void   *current_thread;
   	UNSIGNED mem_pool;
	UNSIGNED event_pool;
	UNSIGNED task_pool;
	UNSIGNED stack_pool;
}KERNAL_PUB;
OS_EXT KERNAL_PUB KERNAL;

#if WAIT_QUEUE_ALLOC_MODE ==FALSE
	OS_EXT  void *resverd;
	OS_EXT  WAIT_QUEUE    *WaitQueueFreeList;                   /* Pointer to list of free Wait Queue  control blocks         */
	OS_EXT  WAIT_QUEUE     WaitQueueTable[MAX_WAIT_QUEUE_SIZE];/* Table of Wait Queuecontrol blocks*/
#endif


/*
*********************************************************************************************************
*                                  任务模块函数原型

*******************************************************************************************************
*/


#if ENABLE_MEM
SIGNED CreateTask(void (*entry)(void),UNSIGNED stack_size,INT8U priority) ;
SIGNED CreateTaskExt(void(*entry)(INT8U, void*),INT8U argc, void *argv, UNSIGNED stack_size,
							  INT8U priority,INT8U auto_start);

SIGNED CreateMailbox (void);
SIGNED CreateSem(UNSIGNED initial_count);
SIGNED CreateQueue (UNSIGNED queue_size);
SIGNED CreatePipe (void *pipe_start,INT16U pipe_size,UNSIGNED message_size);
SIGNED CreateEventGroup (void);

void Init_Timer(void *information);
#else
SIGNED CreateTask(TASK_TCB *ptr,void (*entry)(void),INT8U *stack_address,UNSIGNED stack_size,INT8U priority) ;
SIGNED CreateTaskExt(TASK_TCB *ptr, void(*entry)(INT8U, void*),INT8U argc, void *argv, INT8U *stack_address, UNSIGNED stack_size,
							  INT8U priority,INT8U auto_start);
STATUS CreateHISR(TASK_HCB *hisr_ptr,void (*hisr_entry)(void),
		      UNSIGNED *stack_address,UNSIGNED stack_size,INT8U priority);
SIGNED CreateMailbox (MAILBOX_MCB *mailbox_ptr);
SIGNED CreateSem(SEM_SCB *sem_ptr,UNSIGNED initial_count);
SIGNED CreateQueue (QUEUE_QCB *queue_ptr,void **queue_start, UNSIGNED queue_size);
SIGNED CreatePipe (PIPE_PCB *pipe_ptr,void *pipe_start,INT16U pipe_size,UNSIGNED message_size);
SIGNED CreateEventGroup (EVENT_ECB *event_ptr);

void Init_Timer(TIMER_TCB *timer, void *information);
#endif

SIGNED CreateTimer(APP_TIMER *timer_ptr, void(*expiration_routine)(UNSIGNED));
STATUS DelTask(SIGNED task_id);
STATUS ResetTask(SIGNED task_id);
STATUS TerminateTask(SIGNED task_id);
STATUS SuspendTask(SIGNED task_id);
STATUS _SuspendTask(TASK_TCB *task_ptr,INT8U suspend_type,void (*cleanup),void*information,UNSIGNED timeout);
STATUS ResumeTask(SIGNED task_id);
STATUS _ResumeTask(TASK_TCB *task_ptr,INT8U suspend_type);
void TaskSleep(UNSIGNED ticks);
void TaskSuspendTimeout(TASK_TCB *ptr);
void TaskTimerOut(TASK_TCB *ptr);
void TaskTimeSlice(TASK_TCB *ptr);
SIGNED SetPriority(SIGNED task_id, INT8U new_priority);
SIGNED GetPriority(SIGNED task_id);
void TaskInit(void);
SIGNED GetTaskID(void);
STATUS SysTaskCtl(SIGNED task_id,INT8U cmd,INT8U param);
INT16U Check_Stack(void);

void Setup_Vector(INT8U vect, void (*isr)(void));
TASK_TCB *GetCurrentTask(void);
void *_Get_CurrentThread(void);
void Schedule(void);
void ScheduleToLockTask(TASK_TCB *thread);
void interrupt StackSave(void);
void _ControlToThread(void);
void _ControlToSystem(void);
/*
*********************************************************************************************************
*                               Sinal模块函数原型

*******************************************************************************************************
*/
UNSIGNED SetSignalMask(UNSIGNED enable_signal_mask);
STATUS ReceiveSignal(SIGNED task_id, UNSIGNED signal,INT8 mode);
UNSIGNED ClearSignal(void);
STATUS RegisterSignalHandler(INT8U signal,void (*signal_handler)(void));
STATUS SendSignal(SIGNED task_id, INT8U  signal);





/*
*********************************************************************************************************
*                               HISR模块函数原型

*******************************************************************************************************
*/


STATUS DelHISR(CHAR hisr_id);
void ActivateHISR(CHAR hisr_id);
void *GetCurrentHISR(void);


/*
*********************************************************************************************************
*                                  定时器模块函数原型

*******************************************************************************************************
*/
void InitTaskTimer(TIMER_TCB *timer, void *information);
STATUS ControlTimer(SIGNED timer_id,UNSIGNED enable);
STATUS AdjustTimer (SIGNED timer_id, INT32U new_time);
STATUS ResetTimer (SIGNED timer_id, void (*expiration_routine)(UNSIGNED),INT32U initial_time, UNSIGNED enable);
STATUS DelTimer(SIGNED timer_id);


void TimerHISRHandle(void);
void StartTimer(TIMER_TCB *timer, UNSIGNED time);
void StopTimer(TIMER_TCB *timer);
void TimerInstall(void);
void TimerUninstall();
void TimerInit(void) ;
void Update_times(void);

void interrupt SysTimerTick(void);

INT32U SYSTIME(void);
/*
*********************************************************************************************************
*                                  存储管理模块函数原型

*******************************************************************************************************
*/
SIGNED CreateBlockMemPool(MEM_MCB *pool_ptr, void *start_address,INT32U pool_size);
SIGNED CreateEvenMemPool(MEM_MCB *pool_ptr,void *start_address,INT32U pool_size,UNSIGNED partition_size);
STATUS DelMemPool(SIGNED  pool_id);
STATUS AllocMem(SIGNED  pool_id,void **return_pointer,INT32U size,SIGNED suspend);
STATUS AllocBuff(SIGNED  pool_id,void **return_pointer,SIGNED suspend);
STATUS FreeBuff(void *memory);
STATUS FreeMem(void *memory,INT32U size);
 void KernalMemInit(void *first_available_memory);
void MemPoolInit(void);
STATUS SysPoolCtl(SIGNED pool_id,INT8U cmd,INT8U param);
/*
*********************************************************************************************************
*                                  消息邮箱管理模块函数原型

*******************************************************************************************************
*/

STATUS DelMailbox(SIGNED mailbox_id);
STATUS SendToMailbox(SIGNED mailbox_id, void *message, SIGNED suspend);
STATUS BroadcastToMailbox(SIGNED mailbox_id, void *message, SIGNED suspend);
void *ReceiveFromMailbox(SIGNED mailbox_id,INT8 *err, SIGNED suspend);
void MailboxInit(void);
STATUS ResetMailbox(SIGNED mailbox_id);
STATUS SysMailboxCtl(SIGNED mailbox_id,INT8U cmd,INT8U param);


STATUS DelSem(SIGNED sem_id);
STATUS ReleaseSem(SIGNED sem_id);
STATUS ObtainSem(SIGNED sem_id, SIGNED suspend);
void SemInit(void);
STATUS ResetSem(SIGNED sem_id,UNSIGNED initial_count);
STATUS SysSemCtl(SIGNED sem_id,INT8U cmd,INT8U param);



STATUS DelQueue(SIGNED queue_id);
STATUS SendToQueue(SIGNED queue_id, void *message, SIGNED suspend);
STATUS SendToFrontOfQueue(SIGNED queue_id,void *message, SIGNED suspend);
STATUS BroadcastToQueue(SIGNED queue_id, void *message,SIGNED suspend);
void * ReceiveFromQueue(SIGNED queue_id,INT8 *err,SIGNED suspend);
STATUS SysQueueCtl(SIGNED queue_id,INT8U cmd,INT8U param);
void QueueInit(void);
STATUS SendToPipe(SIGNED pipe_id, void *message, UNSIGNED size,SIGNED suspend);
STATUS SendToFrontOfPipe(SIGNED pipe_id, void *message, UNSIGNED size, SIGNED suspend);
STATUS BroadcastToPipe(SIGNED pipe_id, void *message,UNSIGNED size,SIGNED suspend);
STATUS ReceiveFromPipe(SIGNED pipe_id,void *message,void *actual_size,SIGNED suspend);

STATUS SysPipeCtl(SIGNED pipe_id,INT8U cmd,INT8U param);
STATUS DelPipe(SIGNED pipe_id);
void PipeInit(void);

 STATUS ResetPipe(SIGNED pipe_id);

STATUS DelEventGroup(SIGNED event_id);
STATUS SetEvents(SIGNED event_id,UNSIGNED events, INT8U operation);
STATUS RecvEvents(SIGNED event_id, UNSIGNED *requested_events,INT8U operation,SIGNED suspend);
void EventInit(void);


/*
*********************************************************************************************************
*                                  公共模块函数原型

*******************************************************************************************************
*/

void DoProtect(void *task_ptr);
void DoUnProtect(void *task_ptr);
void DelHead(void **head);
void AddList(void **head, void *add_node,INT8U type);
void DelList(void **head, void *del_node);
void AddTaskList(TASK_TCB **head, TASK_TCB *new_node,INT8U type);
void DelTaskList(TASK_TCB **head, TASK_TCB *node);

void DebugLog(INT8U opcode,INT8U id);
void ERR_System_Error(STATUS code);

STATUS ListMemPool(SIGNED pool_id,POOL_DATA ** pool_lst);
STATUS ListHisr(INT8 hisr_id,HISR_DATA ** hisr_lst);
STATUS ListTask(SIGNED task_id,TASK_DATA ** task_lst);
STATUS ListEventGroup(SIGNED event_id,EVENT_DATA ** event_lst);
STATUS ListQueue(SIGNED queue_id,QUEUE_DATA ** queue_lst);
STATUS ListPipe(SIGNED pipe_id,PIPE_DATA ** pipe_lst);
STATUS ListSem(SIGNED sem_id,SEM_DATA ** sem_lst);
STATUS ListMailbox(SIGNED mailbox_id,MAILBOX_DATA ** mailbox_lst);

#endif

⌨️ 快捷键说明

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