欢迎来到天天文库
浏览记录
ID:5330008
大小:462.64 KB
页数:15页
时间:2017-12-08
《嵌入式操作系统内核原理和开发(线程状态)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本文由兰州中研白癜风研究院http://www.lzbdf120.com/收集,转载请注明出处嵌入式操作系统内核原理和开发(线程状态)从第一篇的os博客以来,谈了很多内容,有中断、切换、调度、内存、互斥和延时等等,但是线程的状态却没有涉及到,今天我们要好好说一说。说到线程的状态,按照一般的说法,主要包括就绪、延时、阻塞、阻塞超时四个状态。如果线程没有死亡的话,那么这几个状态也够用了,但是我们后来发现可能需要对某些线程进行挂起处理,这可能是出现了故障或者是为了调试使用。因此,除了上面的四个状态,我们还要补充对应的四个挂起状态,分别是挂起、延时挂起、阻塞挂起、阻塞延时挂起。说
2、到了线程状态,下面我们就看看常见的线程处理函数有哪些,无外乎线程创建、线程延时、线程挂起、线程恢复和线程删除等等。[cpp]viewplaincopy1.RAW_U16raw_task_create(RAW_TASK_OBJ*task_obj,RAW_U8*task_name,RAW_VOID*task_arg,2.RAW_U8task_prio,RAW_U16time_slice,PORT_STACK*task_stack_base,3.RAW_U32stack_size,RAW_TASK_ENTRYtask_entry,RAW_U8auto_start)4.5.{6.
3、#if(RAW_TASK_STACK_CHECK>0)7.PORT_STACK*p_stack;8.RAW_U32i;9.#endif10.11.RAW_SR_ALLOC();12.13.#if(RAW_TASK_FUNCTION_CHECK>0)14.本文由兰州中研白癜风研究院http://www.lzbdf120.com/收集,转载请注明出处本文由兰州中研白癜风研究院http://www.lzbdf120.com/收集,转载请注明出处15.if(task_obj==0){16.returnRAW_NULL_OBJECT;17.}18.19.if(task_prio>=
4、CONFIG_RAW_PRIO_MAX){20.returnRAW_BYOND_MAX_PRIORITY;21.}22.23.if(task_stack_base==0){24.returnRAW_NULL_POINTER;25.}26.27.if(task_entry==0){28.returnRAW_NULL_POINTER;29.}30.31.#endif32.33.RAW_CRITICAL_ENTER();34.35.if(task_prio==IDLE_PRIORITY){36.37.if(idle_task_exit){38.39.RAW_CRITICAL_E
5、XIT();40.returnRAW_IDLE_EXIT;41.42.}43.44.idle_task_exit=1;本文由兰州中研白癜风研究院http://www.lzbdf120.com/收集,转载请注明出处本文由兰州中研白癜风研究院http://www.lzbdf120.com/收集,转载请注明出处45.}46.47.48.RAW_CRITICAL_EXIT();49.50.raw_memset(task_obj,0,sizeof(RAW_TASK_OBJ));51.52.#if(CONFIG_ROUND_ROBIN>0)53.54.if(time_slice){5
6、5.task_obj->time_total=time_slice;56.57.}58.59.else{60.61.task_obj->time_total=TIME_SLICE_DEFAULT;62.}63.64.task_obj->time_slice=task_obj->time_total;65.66.#endif67.68.if(auto_start)69.task_obj->task_state=RAW_RDY;70.else71.task_obj->task_state=RAW_SUSPENDED;72.73.74.#if(RAW_TASK_STACK_CH
7、ECK>0)本文由兰州中研白癜风研究院http://www.lzbdf120.com/收集,转载请注明出处本文由兰州中研白癜风研究院http://www.lzbdf120.com/收集,转载请注明出处75.76.task_obj->task_stack_base=task_stack_base;77.p_stack=task_stack_base;78.79.for(i=0;itask_sta
此文档下载收益归作者所有