zoukankan      html  css  js  c++  java
  • Raw-OS源代码分析之任务删除与总结

            分析的内核版本号截止到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;
    }




  • 相关阅读:
    深度学习模型调参
    人脸神经网络及算法整理
    【转】python pip install指定国内源
    人脸识别数据集整理
    卷积神经网络整理+ResNet50
    【转载】人脸检测通用评价标准
    【转载】InsightFace算法学习
    Linux手动识别4G模块
    openwrt监控程序(守护进程)
    测试流程详解
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7000696.html
Copyright © 2011-2022 走看看