我的学习之旅(33) sched.h

49 篇文章 0 订阅
49 篇文章 0 订阅

sched.h主要定义了时钟频率、任务数据结构、和sleep宏。sleep宏的实现主要功能是设置当前任务的sleep_time,然后通过软中断0x80做任务软切换。

#ifndef __SCHED_H__
#define __SCHED_H__
#define HZ 100

#define delay(ticks) __asm__ __volatile__ ("cli"::); \
                                 current->sleep_time =  ticks; \
                                 __asm__ __volatile__ ("sti"::);    \
                                 __asm__ __volatile__ ("int $0x80"::);
                                 
#define LATCH ((1193180 + HZ/2) / HZ)

#define MAX_TASK_NUMBER 31
#define TASK_STK_SIZE 8192

#define TASK_RUNNING		0
#define TASK_INTERRUPTIBLE	1
#define TASK_UNINTERRUPTIBLE	2
#define _get_base(addr) ({\
unsigned long __base; \
__asm__("movb %3,%%dh\n\t" \
	"movb %2,%%dl\n\t" \
	"shll $16,%%edx\n\t" \
	"movw %1,%%dx" \
	:"=d" (__base) \
	:"m" (*((addr)+2)), \
	 "m" (*((addr)+4)), \
	 "m" (*((addr)+7))); \
__base;})
#define get_base(ldt) _get_base( ((char *)&(ldt)) )

typedef struct stack_s {
    long * esp;
    short ss;
} stack_t;
#define MAX_CBUF_NUM 1024
typedef struct my_queue_s {
	unsigned long head;
	unsigned long tail;
	unsigned int buf_list[MAX_CBUF_NUM];
}my_queue_t;
typedef struct cbuf_s{
    unsigned int length;
    void *message;
}cbuf_t;
typedef struct task_tbl_s{
    unsigned char task_id;
    unsigned int *task_func_p;
    unsigned int *task_stk;
    int budget;
    int counter;
    unsigned int state;
    unsigned int    current_esp;
    unsigned int sleep_time;
    unsigned int stat_counter;
    unsigned char tty_channel_id;
    my_queue_t cbuf_queue;
    my_queue_t mbuf_queue;
}task_tbl_t;
extern task_tbl_t *current;
extern task_tbl_t *g_ttx_task;
extern long volatile jiffies;
unsigned int schedule(void);
void sleep_on( task_tbl_t **p);
void wake_up(task_tbl_t **p);
#endif
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值