⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jwl-gtf_core.c

📁 基于arm核的RTOS
💻 C
📖 第 1 页 / 共 3 页
字号:
		for(;tmpTaskCB!=jwl_gtf_NULL;tmpTaskCB=tmpTaskCB->jwl_gtf_ToutLink->Next)
		{
			if(oldTaskCB->jwl_gtf_TaskPro>tmpTaskCB->jwl_gtf_Pro)
				oldTaskCB=tmpTaskCB;
			tmpTaskCB->jwl_gtf_TOutLink={jwl_gtf_NULL,jwl_gtf_NULL};
		}
		jwl_gtf_TOutLink=jwl_gtf_NULL;
		if(oldTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
		{
			tmpExchOCB=tmpTaskCB;
			jwl_gtf_Switch
		}
		return;
	}
}

#if  jwl_gtf_ResumeAllTask==jwl_gtf_True
/********************************************************************************************************
*                                        jwl_gtf_void jwl_gtf_InsertHupUpLinkSameHead			*
* 描述:插入挂起务链表头											*
* 参数:a			:任务指针指针								*
*      b  			:b插入到a后面								*
* 返回: 			:jwl_gtf_void								*
*********************************************************************************************************/
_jwl_gtf_BuildInsertTail(HupUpLink,jwl_gtf_TaskCB)
#endif	

/********************************************************************************************************
*                                        jwl_gtf_supend()						*
* 描述:插入挂起务链表尾											*
* 参数: TaskOCB		:要挂起线程的OCB								*
*        TaskID		:要挂起线程ID									*
*	*返回: 		:jwl_gtf_TaskCB指针								*
*********************************************************************************************************/
jwl_gtf_u8 jwl_gtf_supend(jwl_gtf_TaskCB *OCB,jwl_gtf_u8 TaskID)
{
	jwl_gtf_TaskCB *tmpTaskCB;
	if(OCB==jwl_gtf_NULL)							/*控制块指针是否为空*/
	{
		if(tmpTaskCB=jwl_gtf_FundByID(TaskID)==jwl_gtf_NULL)		/*是否存在该控制块*/
			return jwl_gtf_NoTaskID;				/*TaskID号不存在*/
	}
	else
		tmpTaskCB=OCB;							/*否*/
	if(tmpTaskCB->jwl_gtf_TaskStatus!=jwl_gtf_Ready)			/*是否在就绪态*/
		return jwl_gtf_NotReadyStaus;
	tmpTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Hupup;
#if  jwl_gtf_ResumeAllTask==jwl_gtf_True
	jwl_gtf_InsertHupUpLinkSameHead(jwl_gtf_HupLink,tmpTaskCB);
#endif
	if(jwl_gtf_TaskRun==tmpTaskCB)
	{
		jwl_gtf_FindNextRun();
		jwl_gtf_Switch
	}
	return jwl_gtf_NOerror;
}
/*022771*/

#if  jwl_gtf_ResumeAllTask==jwl_gtf_True
/********************************************************************************************************
*                          jwl_gtf_void jwl_gtf_DeleteHupUpLinkHead					*
* 描述:删除挂起务链表头											*
* 参数:  a		:要断开的链表头指针								*
*	*返回: 		:jwl_gtf_void									*
*********************************************************************************************************/
_jwl_gtf_BuildDeleteLinkHead(HupUpLink,jwl_gtf_TaskCB)

/********************************************************************************************************
*                          jwl_gtf_void jwl_gtf_DeleteHupUpLinkTail					*
* 描述:删除挂起务链表尾											*
* 参数:  a		:要断开的链表头指针								*
*	*返回: 		:jwl_gtf_void									*
*********************************************************************************************************/
_jwl_gtf_BuildDeleteLinkTail(HupUpLink,jwl_gtf_TaskCB)

#endif

/********************************************************************************************************
*                                        jwl_gtf_Resume()						*
* 描述:使指定线程解挂解挂处理										*
* 参数: TaskOCB		:要挂起线程的OCB								*
*        TaskID		:要挂起线程ID									*
*	 Timeout	:超时间										*
*	 ParaVar			: 参数选项1,为TaskCB,0为TaskID					*
*	*返回: 		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_u8 jwl_gtf_Resume(jwl_gtf_TaskCB *OCB,jwl_gtf_u8 TaskID)
{
	jwl_gtf_TaskCB *tmpTaskCB;
	if(OCB==jwl_gtf_NULL)							/*任务控制块指针是否为NULl*/
	{
		if(tmpTaskCB=jwl_gtf_FundByID(TaskID)==jwl_gtf_NULL)		/*是否存在该控制块*/
			return jwl_gtf_NoTaskID;				/*TaskID号不存在*/
	}
	else									/*任务控制块不是为NULL*/
		tmpTaskCB=OCB;
	if(tmpTaskCB->jwl_gtf_TaskStauts!=jwl_gtf_Hupup)
		return jwl_gtf_NotHupUpStatus;					/*线程不再挂起状态*/
	tmpTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Ready;				/*恢复就绪态*/
#if  jwl_gtf_ResumeAllTask==jwl_gtf_True
	if(tmpTaskCB->jwl_gtf_HupUpLink->Pre=jwl_gtf_HupLink)			/*是否为链表头*/
		jwl_gtf_DeleteHupUpLinkHead(jwl_gtf_HupLink);
	else									/*否*/
		jwl_gtf_DeleteHupUpLinkTail(tmpTaskCB);
	tmpTaskCB->jwl_gtf_HupUpLink={jwl_gtf_NULL,jwl_gtf_NULL};		/*断开链表初始化指针*/
#endif	
	if(tmpTaskCB->jwl_gtf_TaskProi<jwl_gtf_TaskRun->jwl_gtf_Proi)		/*判断是否发生调度*/
	{
		tmpExchOCB=tmpTaskCB;
		jwl_gtf_Switch
	}
	return jwl_gtf_NOerror;
}

#if  jwl_gtf_ResumeAllTask==jwl_gtf_True
/********************************************************************************************************
*                                        jwl_gtf_AllResume()						*
* 描述:使所有线程解挂处理										*
* 参数: *返回: 		:jwl_gtf_void									*
********************************************************************************************************/
jwl_gtf_void jwl_gtf_AllResume()
{
	jwl_gtf_TaskCB *oldTaskCB;
	jwl_gtf_u8  	tmpProi;
	jwl_gtf_TaskCB *tmpTaskCB;
	tmpTaskCB=jwl_gtf_HupLink;
	oldTaskCB=jwl_gtf_HupLink;
	for(;tmpTaskCB!=jwl_gtf_NULL;tmpTaskCB=tmpTaskCB->jwl_gtf_HupUpLink->Next)		/*断开链表并初始化断开链表*/
	{
		if(tmpTaskCB->jwl_gtf_TaskPro<oldTaskCB->jwl_gtf_TaskPro)			/*保存最高优先级的线程指针*/
			oldTaskCB=tmpTaskCB;
		tmpTaskCB->jwl_gtf_HupUpLink={jwl_gtf_NULL,jwl_gtf_NULL};			/*初始化断开的指针为NULL*/
	}
	jwl_gtf_HupLink=jwl_gtf_NULL;								/*链表头指针初始化为NULL*/
	if(oldTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)				/*判断是否调度*/
	{
		tmpExchOCB=oldTaskCB;
		jwl_gtf_Switch
	}
	reutrn jwl_gtf_Noerror;
}
#endif

/********************************************************************************************************
*                                       jwl_gtf_DeleteLnkHead						*
* 描述:断开就绪任务链表头										*
* 参数: a:		链表头										*
*	*返回: 		:jwl_gtf_void 									*
*********************************************************************************************************/
_jwl_gtf_BuildDeleteLinkHead(Link,jwl_gtf_TaskCB) 

/********************************************************************************************************
*                                       jwl_gtf_DeleteLinkTail						*
* 描述:断开就绪任务链表尾										*
* 参数: a:		链表头										*
*	*返回: 		:jwl_gtf_void 									*
*********************************************************************************************************/
_jwl_gtf_BuildDeleteLinkTail(Link,jwl_gtf_TaskCB) 

/********************************************************************************************************
*                                        jwl_gtf_ModiProi()						*
* 描述:改变进程优先级											*
* 参数: TaskOCB		:要改变优先级的线程OCB								*
*        TaskID		:要改变的线程ID									*
*	 ParaVar	: 参数选项1,为TaskCB,0为TaskID							*
*	 Proi		:要改变的优先级								*
*	*返回: 		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_ModiProi(jwl_gtf_TaskCB *TaskCB,jwl_gtf_u8 TaskID,jwl_gtf_u8 Proi)
{
	jwl_gtf_TaskCB *tmpTaskCB;
	if(TaskCB==jwl_gtf_NULL)						/*线程控制块参数是否NULL*/
	{
		if(tmpTaskCB=jwl_gtf_FundByID(TaskID)==jwl_gtf_NULL)		/*是否存在该控制块*/
			return jwl_gtf_NoTaskID;				/*TaskID号不存在*/		
	}
	else
		tmpTaskCB=TaskCB;
	if(tmpTaskCB->jwl_gtf_TasPro==Proi)
		reutrn jwl_gtf_NotChagePro;					/*不能改变优先级*/
	if(tmpTaskCB->jwl_gtf_TaskPro<=jwl_gtf_TaskRDMiddle->jwl_gtf_TaskPro)
		jwl_gtf_ReadyCounter--;
	else
		jwl_gtf_ReadyCounter++;
	tmpTaskCB->jwl_gtf_Taskro=Proi;
	if(tmpTaskCB->jwl_gtf_Link->Pre=tmpTaskCB)
		jwl_gtf_DeleteLInkHead(jwl_gtf_TaskRDFirst);
	else
		jwl_gtf_DeleteLinkTail(tmpTaskCB);
	jwl_gtf_InsertReadyTask(tmpTaskCB);
	if(tmpTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun)
	{
		tmpExchOCB=tmpTaskCB;
		jwl_gtf_Switch
	}
	return jwl_gtf_Noerror;
}

/********************************************************************************************************
*                                        jwl_gtf_exit()							*
* 描述:线程自己退出											*
* 参数: *返回: 		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_exit()
{
	
	
}

/********************************************************************************************************
*                                        jwl_gtf_kill()							*
* 描述:使指定线程退出											*
* 参数: TaskOCB		:要退出的线程OCB								*
*        TaskID		:要退出的线程ID									*
*	 ParaVar	: 参数选项1,为TaskCB,0为TaskID							*
*	*返回: 		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_kill(jwl_gtf_TaskCB *TaskCB,jwl_gtf_u8 TaskID)
{
	
}

/********************************************************************************************************
*                                        jwl_gtf_delete()						*
* 描述:使指定线程的TaskOCB回收										*
* 参数: TaskOCB		:要退出的线程OCB								*
*        TaskID		:要退出的线程ID									*
*	 ParaVar	: 参数选项1,为TaskCB,0为TaskID							*
*	*返回: 		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_delete(jwl_gtf_TaskCB *TaskCB,jwl_gtf_u8 TaskID)
{
	
}

/********************************************************************************************************
*                                        jwl_gtf_TaskTimeOutDeal()					*
* 描述:其记数滴答数减1及相关处理									*
*	*返回: 		:jwl_gtf_void									*
*********************************************************************************************************/
jwl_gtf_void jwl_gtf_TaskTimeOutDeal()
{
	jwl_gtf_TaskCB	*tmpTaskCB;
	jwl_gtf_TaskCB	*oldTaskCB;
	if(jwl_gtf_TOutLink==jwl_gtf_NULL)
		return;
	else
	{
		tmpTaskCB=jwl_gtf_TOutLink;
		oldTaskCB=jwl_gtf_get_idle();
		for(;tmTaskCB!=jwl_gtf_NULL;)
		{
			if(--tmpTaskCB->jwl_gtf_TimeOut==0)
			{
				if(tmpTaskCB->jwl_gtf_TaskPro<oldTaskCB->jwl_gtf_TaskPro)
					oldTaskCB=tmpTaskCB;
				if(tmpTaskCB->jwl_gtf_WaitTLink->Pre=tmpTaskCB)
					jwl_gtf_DeleteTOutLinkHead(jwl_gtf_TOutLink);
				else
					jwl_gtf_DeleteTOutLinkTail(rmpTaskCB);
				tmpTaskCB->jwl_gtf_TOutLink={jwl_gtf_NULL,jwl_gtf_NULL};
				tmpTaskCB->jwl_gtf_TaskStauts=jwl_gtf_Ready;
			}
			tmpTaskCB=tmpTaskCB->jwl_gtf_WaitTLink->Next;
		}
		if(oldTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
		{
			tmpExchOCB=oldTaskCB;
			jwl_gtf_Switch
		}
		return;
	}
}

#if    jwl_gtf_SchPolicy==jwl_gtf_MulSchEnable
/********************************************************************************************************
*                                        jwl_gtf_SameProTasktDeal()					*
* 描述:其相同优先级记数滴答数减1及相关处理								*
*	*返回: 		:jwl_gtf_void									*
*********************************************************************************************************/
jwl_gtf_void jwl_gtf_SameProTasktDeal()
{
	if(jwl_gtf_TaskRun->jwl_gtf_SameProiLink->Next==jwl_gtf_NULL)
		return;
	else
	{
		if(--jwl_gtf_TaskRun->jwl_gtf_MulTaskC==0)
		{
			jwl_gtf_TaskRun->jwl_gtf_MulTaskC=jwl_gtf_TaskTiks;
			tmpExchOCB=jwl_gtf_TaskRun->jwl_gtf_SameProiLink->Next;
			jwl_gtf_Switch
		}
		else
			return;
	}
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -