📄 kernal.h
字号:
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 + -