- 论坛徽章:
- 0
|
不知道这个能起什么作用。
//================================================================
// XXXX Real-Time Kernel Ver 0.1a
// CopyRight(C) 2007-2009 By XXXX
//================================================================
#ifndef _XXX_THREAD_H
#define _XXX_THREAD_H
#include "typedef.h"
#include "timer.h"
#include "ipc.h"
//线程状态定义
#define THREAD_STATUS_READY 0x10 //就绪
#define THREAD_STATUS_RUNNING 0x11 //运行
#define THREAD_STATUS_BLOCK 0x20 //阻塞
#define THREAD_STATUS_DELAY 0x30 //延时
#define THREAD_STATUS_SUSPEND 0x40 //挂起
#define THREAD_STATUS_BLOCK_SUSPEND 0x41 //阻塞挂起
#define THREAD_STATUS_DELAY_SUSPEND 0x42 //延时挂起
#define THREAD_STATUS_ZOOMBIE 0x50 //僵死
// 内核线程优先级为0,
// 0~8,56~63 共16个优先级保留给内核用
// 9~55 共48个优先级分配给用户线程使用
#define INIT_THREAD_PRIO 63
//
#define THREAD_PRIO_HIGH 9
#define THREAD_PRIO_LOW 55
#define THREAD_PRIO_NORMAL 31
#define THREAD_STACK_SIZE 1024 //默认线程栈大小
#define MAX_THREAD_PRIO 64 //内核最大线程优先级
#define NO_PRIO_READY (MAX_THREAD_PRIO) //没有就绪的优先级
#define MAX_THREAD_NUM 256 //内核最大线程数目
#define NO_THREAD_READY (MAX_THREAD_NUM) //没有就绪的线程
#define WRONG_THREAD_ID (MAX_THREAD_NUM) //错误的线程ID
#define THREAD_TITLE_LEN 32 //线程名字长度
#define MONITOR_THREAD_TID 0
//进程相关函数的返回值
#define THREAD_SET_PRIO_SUCCESS 1
#define THREAD_SET_PRIO_FAILURE 0
#define SUSPEND_THREAD_SUCCESS 1
#define SUSPEND_THREAD_FAILURE 0
#define RESUME_THREAD_SUCCESS 1
#define RESUME_THREAD_FAILURE 0
#define THREAD_DELETE_SUCCESS 1
#define THREAD_DELETE_FAILURE 0
#define THREAD_DELETE_ZOOMBIE -1
#define THREAD_INIT_SUCCESS 1
#define THREAD_INIT_FAILURE 0
#define THREAD_DELAY_SUCCESS 1
#define THREAD_DELAY_FAILURE 0
#define THREAD_ECODE_SUCCESS 1
#define THREAD_ECODE_FAILURE 0
//内核任务结构定义
struct TThread
{
INT32U tid; //线程ID
INT32U tss; //线程堆栈栈底指针
INT32U tsp; //线程堆栈栈顶指针
INT32U status; //线程状态
INT32U prio; //线程当前优先级
INT32U bprio; //线程基本优先级
INT32U tick; //时间片中还剩下的ticks数目
INT32U slice; //时间片长度(ticks数目)
struct TThread* next; //指向进程所在队列的上下兄弟进程的指针
struct TThread* prev;
struct TThreadQueue* queue; //线程所属队列指针
struct TIRes ires; //线程ipc 互斥、同步、通讯的控制结构
struct TTimer timer; //线程定时器
INT8U title[THREAD_TITLE_LEN]; //线程名称
INT32S ecode; //退出代码
};
//内核线程队列结构定义
struct TThreadQueue
{
INT8U group;
INT8U table[8];
INT32U items; //队列中线程数目
INT32U entries[MAX_THREAD_PRIO]; //队列中每个优先级内的线程数目
struct TThread* handle[MAX_THREAD_PRIO]; //队列中每个优先级内的线程队列头
};
// 全局变量声明
GLOBAL struct TThread* _THREAD_READY;
GLOBAL struct TThread* _THREAD_CURRENT;
GLOBAL struct TThreadQueue* _THREAD_READY_QUEUE_PTR;
GLOBAL struct TThreadQueue* _THREAD_DELAY_QUEUE_PTR;
GLOBAL struct TThreadQueue* _THREAD_SUSPEND_QUEUE_PTR;
// 全局函数声明
MODULE void _thread_enter_queue(struct TThreadQueue* queue, struct TThread* thread);
MODULE void _thread_leave_queue(struct TThreadQueue* queue, struct TThread* thread);
MODULE void _thread_schedule(void);
MODULE void _thread_load(struct TThread* thread);
MODULE void _thread_set_prio(struct TThread* thread, INT8U prio, INT8U flag);
MODULE void _thread_must_switch(void);
MODULE void _thread_try_switch(void);
MODULE struct TThread* _thread_get_best(struct TThreadQueue* queue);
// API函数声明
KNLAPI RETVAL Thread_Init(struct TThread* thread, void* start, void* stack, INT32U ssize, INT8U
prio, INT32U tslice);
#endif
/*_XXX_THREAD_H */
[ 本帖最后由 wanas 于 2009-7-16 22:38 编辑 ] |
-
1.JPG
(36.35 KB, 下载次数: 36)
-
2.JPG
(38.09 KB, 下载次数: 40)
|