协作式调度 :
多个任务,某一时刻只能有一个任务运行。只有当前任务主动要求放弃时调度器才会运行其它任务。
也叫简单的前后台调度。
一个最简单的协作式任务,任务没有优先级,有2种状态(运行,睡眠)。缺省为运行态,主动放弃既进入睡眠态。任务拥有一个堆栈。
调度策略:调度器有一个任务列表,找第一个运行态任务执行,如果所有任务都在睡眠,调度器也睡眠(所有任务的最小睡眠时间)。
调度器api:
struct task_t;
typedef void (*entry_t)(task_t*); // entry function
struct task_t{
unsigned char *stack_top; //stack top ,栈顶指针!
entry_t entry; // entry function , 任务入口函数
unsigned long start,left,id; // time left,运行起始时间和剩余睡眠时间,任务id
task_t():left(0),start(0),id(0){}
};
task_t* schedule();
void run(); //启动调度器
void addTask(task_t* p); //加入任务
void sleep(task_t *p, unsigned long m); // 任务睡眠m毫秒
下载:
http://www.pudn.com/downloads148/sourcecode/os/detail640752.html