嵌入式操作系统内核原理和开发(线程状态)

嵌入式操作系统内核原理和开发(线程状态)

ID:5757028

大小:160.50 KB

页数:11页

时间:2017-12-24

嵌入式操作系统内核原理和开发(线程状态)_第1页
嵌入式操作系统内核原理和开发(线程状态)_第2页
嵌入式操作系统内核原理和开发(线程状态)_第3页
嵌入式操作系统内核原理和开发(线程状态)_第4页
嵌入式操作系统内核原理和开发(线程状态)_第5页
资源描述:

《嵌入式操作系统内核原理和开发(线程状态)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。