欢迎来到天天文库
浏览记录
ID:5757028
大小:160.50 KB
页数:11页
时间:2017-12-24
《嵌入式操作系统内核原理和开发(线程状态)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、软件英才网软件行业驰名招聘网站嵌入式操作系统内核原理和开发(线程状态)从第一篇的os博客以来,谈了很多内容,有中断、切换、调度、内存、互斥和延时等等,但是线程的状态却没有涉及到,今天我们要好好说一说。说到线程的状态,按照一般的说法,主要包括就绪、延时、阻塞、阻塞超时四个状态。如果线程没有死亡的话,那么这几个状态也够用了,但是我们后来发现可能需要对某些线程进行挂起处理,这可能是出现了故障或者是为了调试使用。因此,除了上面的四个状态,我们还要补充对应的四个挂起状态,分别是挂起、延时挂起、阻塞挂起、阻塞延时挂起。说到了线程状态,下面我们就看
2、看常见的线程处理函数有哪些,无外乎线程创建、线程延时、线程挂起、线程恢复和线程删除等等。[cpp]viewplaincopy1RAW_U16raw_task_create(RAW_TASK_OBJ*task_obj,RAW_U8*task_name,RAW_VOID*task_arg,2RAW_U8task_prio,RAW_U16time_slice,PORT_STACK*task_stack_base,3RAW_U32stack_size,RAW_TASK_ENTRYtask_entry,RAW_U8auto_start)45{6
3、#if(RAW_TASK_STACK_CHECK>0)7PORT_STACK*p_stack;8RAW_U32i;9#endif1011RAW_SR_ALLOC();1213#if(RAW_TASK_FUNCTION_CHECK>0)1415if(task_obj==0){16returnRAW_NULL_OBJECT;17}1819if(task_prio>=CONFIG_RAW_PRIO_MAX){20returnRAW_BYOND_MAX_PRIORITY;21}2223if(task_stack_base==0){24retu
4、rnRAW_NULL_POINTER;有需要请联系我们软件英才网软件行业驰名招聘网站1}23if(task_entry==0){4returnRAW_NULL_POINTER;5}67#endif89RAW_CRITICAL_ENTER();1011if(task_prio==IDLE_PRIORITY){1213if(idle_task_exit){1415RAW_CRITICAL_EXIT();16returnRAW_IDLE_EXIT;1718}1920idle_task_exit=1;21}222324RAW_CRITICAL
5、_EXIT();2526raw_memset(task_obj,0,sizeof(RAW_TASK_OBJ));2728#if(CONFIG_ROUND_ROBIN>0)2930if(time_slice){31task_obj->time_total=time_slice;3233}3435else{3637task_obj->time_total=TIME_SLICE_DEFAULT;38}3940task_obj->time_slice=task_obj->time_total;4142#endif43有需要请联系我们软件英才网
6、软件行业驰名招聘网站1if(auto_start)2task_obj->task_state=RAW_RDY;3else4task_obj->task_state=RAW_SUSPENDED;567#if(RAW_TASK_STACK_CHECK>0)89task_obj->task_stack_base=task_stack_base;10p_stack=task_stack_base;1112for(i=0;i
7、task_stack=port_stack_init(task_stack_base,stack_size,task_arg,task_entry);20task_obj->task_name=task_name;21task_obj->priority=task_prio;2223task_create_hook(task_obj);242526RAW_CRITICAL_ENTER();2728#if(RAW_TASK_STACK_CHECK>0)29task_obj->stack_size=stack_size;30list_in
8、sert(&task_head,&task_obj->stack_check_list);31#endif3233if(auto_start){34add_ready_list_end(&raw_ready_queue,
此文档下载收益归作者所有