分析的内核版本号截止到2014-04-15,基于1.05正式版,blogs会及时跟进最新版本号的内核开发进度,若源代码凝视出现”???”字样,则是未深究理解部分。

Raw-OS官方站点:http://www.raw-os.org/

Raw-OS托管地址:https://github.com/jorya/raw-os/

那么。先给出总结的Raw-OS的任务状态转换图,这个图出自:

http://blog.csdn.net/shengnan_wu/article/details/8536030

那么。这个状态图都能够出现RAW_DELETE的状态重点。那么相应的就是任务删除,对于删除任务也有一些限制使用方法。详细看代码里面的凝视

RAW_U16 raw_task_delete(RAW_TASK_OBJ *task_ptr)
{
RAW_SR_ALLOC(); #if (RAW_TASK_FUNCTION_CHECK > 0)
/* 选择被删除的任务TCB不存在,返回 */
if (task_ptr == 0) {
return RAW_NULL_OBJECT;
} /* 中断中不同意删除任务 */
if (raw_int_nesting) {
return RAW_NOT_CALLED_BY_ISR;
}
#endif /* IDLE任务不同意删除 */
if (task_ptr->priority == IDLE_PRIORITY) {
return RAW_DELETE_TASK_NOT_ALLOWED;
} #if (CONFIG_RAW_TASK_0 > 0)
/* 假设开启task 0宏例化task 0后。task 0不同意删除 */
if (task_ptr->priority == 0) {
return RAW_DELETE_TASK_NOT_ALLOWED;
}
#endif /* 给系统上锁一次。系统锁标志变量+1 */
RAW_CRITICAL_ENTER();
/*
* 这里检查系统锁标志变量是否只由上一个语句产生一个叠加操作,假设锁标志位>=2
* 说明在这里之前,其它位置已经发生了系统上锁操作,所以这里解除前一语句的上锁操作。返回
*/
if (task_ptr == raw_task_active) {
SYSTEM_LOCK_PROCESS();
} /* 释放任务控制块内的相互排斥锁。Raw-OS设计的任务内有任务相互排斥锁,这里要释放,对于相互排斥锁。兴许blog分析 */
#if (CONFIG_RAW_MUTEX > 0)
raw_task_free_mutex(task_ptr);
#endif
/* 检查被删除任务的任务状态,运行对应操作 */
switch (task_ptr->task_state) {
/* 就绪态 */
case RAW_RDY:
/* 从就绪队列中移除 */
remove_ready_list(&raw_ready_queue, task_ptr);
break;
/* 挂起态。不存在就绪队列,能够直接删除 */
case RAW_SUSPENDED:
break;
/* 假设任务处于等待超时的tick list中,从tick list中移除 */
case RAW_DLY:
case RAW_DLY_SUSPENDED:
tick_list_remove(task_ptr);
break;
/* 这里是任务堵塞状态相关 */
case RAW_PEND:
case RAW_PEND_SUSPENDED:
case RAW_PEND_TIMEOUT:
case RAW_PEND_TIMEOUT_SUSPENDED:
/* 从tick list移除堵塞任务 */
tick_list_remove(task_ptr);
/* 这里还要list delete???难道堵塞态还存在别的链表中??? */
list_delete(&task_ptr->task_list);
/* 相互排斥锁相关。如今就当自己是刚開始学习的人,不懂何用??? */
#if (CONFIG_RAW_MUTEX > 0)
mutex_state_change(task_ptr);
#endif
break;
default:
RAW_CRITICAL_EXIT();
return RAW_STATE_UNKNOWN;
}
/* 任务状态设置为删除态 */
task_ptr->task_state = RAW_DELETED; /* 系统检測??? */
#if (RAW_SYSTEM_CHECK > 0)
/* make after_delete_list to right position??? */
system_debug.after_delete_list = task_ptr->stack_check_list.next; if (system_debug.after_delete_list == (&(system_debug.task_head))) {
system_debug.after_delete_list = system_debug.task_head.next;
} list_delete(&task_ptr->stack_check_list);
#endif
/* 将之前上锁操作释放 */
RAW_CRITICAL_EXIT();
/* 删除任务时的trace debug??? */
TRACE_TASK_DELETE(task_ptr);
/* 移植相关。调用删除任务时的钩子函数 */
#if (CONFIG_RAW_USER_HOOK > 0)
raw_task_delete_hook(task_ptr);
#endif
/* 删除任务后运行系统调度 */
raw_sched();
/* 保留一个疑问,例化任务的时候假设堆栈是静态分配,那么就浪费资源??? */
return RAW_SUCCESS;
}

Raw-OS源代码分析之任务删除与总结的更多相关文章

  1. Openck_Swift源代码分析——添加、删除设备时算法详细的实现过程

    1 初始加入设备后.上传Object的详细流程  前几篇博客中,我们讲到环的基本原理即详细的实现过程,加入我们在初始创建Ring是执行例如以下几条命令: •swift-ring-builder obj ...

  2. STL源代码分析——STL算法remove删除算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多.不方便学习,也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的remove删除算法. ...

  3. 转:RTMPDump源代码分析

    0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...

  4. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6664554 在上一文章Android系统匿名共 ...

  5. Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6633311 在上一篇文章中,我 们分析了And ...

  6. 【Android开源项目分析】android轻量级开源缓存框架——ASimpleCache(ACache)源代码分析

    转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46379055 ASimpleCache框架源代码链接 https://github ...

  7. Android异步任务处理框架AsyncTask源代码分析

    [转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] 引言 在平时项目开发中难免会遇到异步耗时的任务(比方最常见的网络请求).遇到这样的问题.我 ...

  8. OpenStack_Swift源代码分析——Ring的rebalance算法源代码具体分析

    1 Command类中的rebalnace方法 在上篇文章中解说了,创建Ring已经为Ring加入设备.在加入设备后须要对Ring进行平衡,平衡 swift-ring-builder object.b ...

  9. 转:SDL2源代码分析

    1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...

随机推荐

  1. el-select 根据value查询其对应的label值

    <el-form-item label="库位" prop="goodsLocationId" > <el-col :span="1 ...

  2. python在不同情况下写入csv文件

    情况一(解法一):将列表存储为csv文件.列表的每一项代表csv文件的一行. 列表中的每一项包含多个属性.list=[[属性1,属性2,属性3,……],[属性1,属性2,属性3,……],[属性1,属性 ...

  3. 洛谷10月月赛II

    #A: P4924 [1007]魔法少女小Scarlet 这道题考了矩阵旋转 其实很考验推公式的能力和代码能力 这里有个小技巧 可以设(x, y)为原点,然后去推公式,然后实际操作中横坐标加上x,纵坐 ...

  4. [luogu] P4551 最长异或路径(贪心)

    P4551 最长异或路径 题目描述 给定一棵\(n\)个点的带权树,结点下标从\(1\)开始到\(N\).寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有边权的异或 ...

  5. ASP.NET-HTML.Helper常用方法

    Html.ActionLink方法 Html.ActionLink("linkText","actionName") Html.ActionLink(" ...

  6. 电子签章盖章之jQuery插件jquery.zsign

           简介:  使用jquery.zsign可以实现电子签章盖章效果,使用方便,只需提供自己的章图片.效果图如下:        页面引用:        <link href=&quo ...

  7. STL_算法_对全部元素排序(sort、stable_sort)

    C++ Primer 学习中. . .   简单记录下我的学习过程 (代码为主) //大部分容器适用.不适用于list容器 sort(b,e) sort(b,e,p) stable_sort(b,e) ...

  8. Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0

    Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0 系统环境: 操作系统:RedHat EL6(64位) Oracle:    Oracle 11gR2 ...

  9. 【从零之六&amp;完结】android口语对话系统(RavenClaw java版 含所有源代码)

    ! !! 更新:最新源码放到了github上,认为还不错点个星啊! 点击打开链接 做了一个半月最终完毕了,以下这个就是我參考Olympus/RavenClaw系统编写的对话管理系统.眼下实现了一个简单 ...

  10. web服务启动spring自己主动运行ApplicationListener的使用方法

    我们知道.一般来说一个项目启动时须要载入或者运行一些特殊的任务来初始化系统.通常的做法就是用servlet去初始化.可是servlet在使用spring bean时不能直接注入,还须要在web.xml ...