嵌入式操作系统内核原理和开发(线程状态).doc
文本预览下载声明
嵌入式操作系统内核原理和开发(线程状态)
从第一篇的os博客以来,谈了很多内容,有中断、切换、调度、内存、互斥和延时等等,但是线程的状态却没有涉及到,今天我们要好好说一说。说到线程的状态,按照一般的说法,主要包括就绪、延时、阻塞、阻塞超时四个状态。如果线程没有死亡的话,那么这几个状态也够用了,但是我们后来发现可能需要对某些线程进行挂起处理,这可能是出现了故障或者是为了调试使用。因此,除了上面的四个状态,我们还要补充对应的四个挂起状态,分别是挂起、延时挂起、阻塞挂起、阻塞延时挂起。
说到了线程状态,下面我们就看看常见的线程处理函数有哪些,无外乎线程创建、线程延时、线程挂起、线程恢复和线程删除等等。
[cpp] view plaincopy
RAW_U16 raw_task_create(RAW_TASK_OBJ *task_obj, RAW_U8 *task_name, RAW_VOID *task_arg,
RAW_U8 task_prio, RAW_U16 time_slice, PORT_STACK *task_stack_base,
RAW_U32 stack_size, RAW_TASK_ENTRY task_entry, RAW_U8 auto_start)
{
#if (RAW_TASK_STACK_CHECK 0)
PORT_STACK *p_stack;
RAW_U32 i;
#endif
RAW_SR_ALLOC();
#if (RAW_TASK_FUNCTION_CHECK 0)
if (task_obj == 0) {
return RAW_NULL_OBJECT;
}
if (task_prio = CONFIG_RAW_PRIO_MAX) {
return RAW_BYOND_MAX_PRIORITY;
}
if (task_stack_base == 0) {
return RAW_NULL_POINTER;
}
if (task_entry == 0) {
return RAW_NULL_POINTER;
}
#endif
RAW_CRITICAL_ENTER();
if (task_prio == IDLE_PRIORITY) {
if (idle_task_exit) {
RAW_CRITICAL_EXIT();
return RAW_IDLE_EXIT;
}
idle_task_exit = 1;
}
RAW_CRITICAL_EXIT();
raw_memset(task_obj, 0, sizeof(RAW_TASK_OBJ));
#if (CONFIG_ROUND_ROBIN 0)
if (time_slice) {
task_obj-time_total = time_slice;
}
else {
task_obj-time_total = TIME_SLICE_DEFAULT;
}
task_obj-time_slice = task_obj-time_total;
#endif
if (auto_start)
task_obj-task_state = RAW_RDY;
else
task_ob
显示全部