任务动态载入与结束:
在task_switch()里,当发现该进程的task_sp值为0则不再保存该任务的栈指针,这个任务也就消失了.
在搜索下一个可执行任务时,检测task_sp值是否非0.为零则表示该位置无任务.
void task_switch(){
if(task_sp[task_id] != 0)//如果该任务没被删除,则保存当前栈指针.
task_sp[task_id] = SP;
while(1){
task_id++;//task_id切到下一个.实际上不只是增1这么简单,还要取模.这里只是示范,所以就不写全了.
if( task_sp[task_id] != 0)//实际上这里还要检查task_sleep的值.但那跟现在所说无关,所以暂时去除掉那部分代码
break;
}
...
}
调用task_switch()前清除自已的task_sp值.
#define task_exit() task_sp[task_id] = 0, task_switch()
附带说下,调用task_delete(tid) 可删除tid指定的进程.转载
|