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

📄 jwl-gtf_sem.c

📁 基于arm核的RTOS
💻 C
📖 第 1 页 / 共 2 页
字号:
		{
			if(tmpTaskCB->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Pre=tmpTaskCB->jwl_gtf_Sem)
			{
				if(tmpSem->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Next==jwl_gt_NULL)
					jwl_gtf_SemWaitT=jwl_gtf_NULL;
				else
				{
					jwl_gtf_SemWaitT=jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Next;
					jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Pre=jwl_gtf_SemWaitT;
				}
			}
			else if(tmpTaskCB->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL)
				tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL
			else
			{
				tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
					tmpTaskCB->jwl_gtf_WaitTLink->Next;
				tmpTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
					tmpTaskCB->jwl_gtf_WaitTLink->Pre;					
			}
			tmpTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL}:
			tmpTaskCB->jwl_gtf_TimeOut=0;
		}
		if(tmpTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
		{
			tmpExchOCB=tmpTaskCB;
			jwl_gtf_Switch
		}
	}
	return;
}

/********************************************************************************************************
*                                        jwl_gtf_PutSpecSem						*
* 描述:获得空闲信号量											*
* 参数: SemID												*
*	Sem												*
*	TaskID												*
*	Task												*
* 返回: 参看JWL-GTF.H											*
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_PutSpecSem(jwl_gtf_Sem *Sem,jwl_gtf_u8 SemID,jwl_gtf_TaskCB *TaskCB,jwl_gtf_u8 TaskID)
{
	jwl_gtf_TaskCB *tmpTaskCB;
	jwl_gtf_Sem *tmpSem;
	if(TaskCB==jwl_gtf_NULL)
	{
		if(tmpTaskCB=jwl_gtf_FindTaskByID(TaskID)==jwl_gtf_NULL)
			return jwl_gtf_NoTaskID;
	}
	else
		tmpTaskCB=TaskCB;
	if(tmpTaskCB->jwl_gtf_Sem==jwl_gtf_NULL)
		return jwl_gtf_NoConnectSem;
	if(Sem==jwl_gtf_NULL)
	{
		if(tmpSem=jwl_gtf_FindSem(SemID)==jwl_gtf_NULL)
			return jwl_gtf_NotSemID;
	}
	else
		tmpSem=Sem;
	if(tmpSem->jwl_gtf_Status==jwl_gtf_SemUnInit)						/*信号量没有初始化*/
		returen jwl_gtf_SemNoInit;
	if(tmpTaskCB->jwl_gtf_Sem!=jtmpSem)
		return jwl_gtf_SemNoInit;
	tmpTaskCB=tmpSem->jwl_gtf_SemLink;
	if(tmpSem->jwl_gtf_SemLink->Next==jwl_gtf_NULL)
		tmpSem->jwl_gtf_SemLink=jwl_gtf_NULL;
	else if(tmpTaskCB->jwl_gtf_EvenLink->Next==jwl_gtf_NULL)
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=jwl_gtf_NULL;
	else
	{
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=\
			tmpTaskCB->jwl_gtf_EvenLink->Next;
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Pre=\
			tmpTaskCB->jwl_gtf_EvenLink->Pre;
	}
	tmpTaskCB->jwl_gtf_TaskStatus=tmpTaskCB->jwl_gtf_TaskStatus&(!jwl_gtf_Sem);
	tmpTaskCB->jwl_gtf_Sem=jwl_gtf_NULL;
	if(tmpTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwlgtf_NULL}
	{
		if(tmpTaskCB->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Pre=tmpTaskCB->jwl_gtf_Sem)
		{
			if(tmpSem->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Next==jwl_gt_NULL)
				jwl_gtf_SemWaitT=jwl_gtf_NULL;
			else
			{
				jwl_gtf_SemWaitT=jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Next;
				jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Pre=jwl_gtf_SemWaitT;
			}
		}
		else if(tmpTaskCB->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL)
			tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL
		else
		{
			tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
				tmpTaskCB->jwl_gtf_WaitTLink->Next;
			tmpTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
				tmpTaskCB->jwl_gtf_WaitTLink->Pre;
		}
		tmpTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL}:
		tmpTaskCB->jwl_gtf_TimeOut=0;
	}
	if(tmpTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
	{
		tmpExchOCB=tmpTaskCB;
		jwl_gtf_Switch
	}
	return;
}

/********************************************************************************************************
*                                        jwl_gtf_CancelSpecSem						*
* 描述:获得空闲信号量											*
* 参数: SemID												*
*	Sem												*
*	TaskID												*
*	Task												*
* 返回: 参看JWL-GTF.H											*
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_CancelSpecSem(jwl_gtf_Sem *Sem,jwl_gtf_u8 SemID,jwl_gtf_TaskCB *TaskCB,jwl_gtf_u8 TaskID)
{
	jwl_gtf_TaskCB *tmpTaskCB;
	jwl_gtf_Sem *tmpSem;
	if(TaskCB==jwl_gtf_NULL)
	{
		if(tmpTaskCB=jwl_gtf_FindTaskByID(TaskID)==jwl_gtf_NULL)
			return jwl_gtf_NoTaskID;
	}
	else
		tmpTaskCB=TaskCB;
	if(tmpTaskCB->jwl_gtf_Sem==jwl_gtf_NULL)
		return jwl_gtf_NoConnectSem;
	if(Sem==jwl_gtf_NULL)
	{
		if(tmpSem=jwl_gtf_FindSem(SemID)==jwl_gtf_NULL)
			return jwl_gtf_NotSemID;
	}
	else
		tmpSem=Sem;
	if(tmpSem->jwl_gtf_Status==jwl_gtf_SemUnInit)						/*信号量没有初始化*/
		returen jwl_gtf_SemNoInit;
	if(tmpTaskCB->jwl_gtf_Sem!=jtmpSem)
		return jwl_gtf_SemNoInit;
	tmpTaskCB=tmpSem->jwl_gtf_SemLink;
	if(tmpSem->jwl_gtf_SemLink->Next==jwl_gtf_NULL)
		tmpSem->jwl_gtf_SemLink=jwl_gtf_NULL;
	else if(tmpTaskCB->jwl_gtf_EvenLink->Next==jwl_gtf_NULL)
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=jwl_gtf_NULL;
	else
	{
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=\
			tmpTaskCB->jwl_gtf_EvenLink->Next;
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Pre=\
			tmpTaskCB->jwl_gtf_EvenLink->Pre;
	}
	tmpTaskCB->jwl_gtf_TaskStatus=tmpTaskCB->jwl_gtf_TaskStatus&(!jwl_gtf_Sem);
	tmpTaskCB->jwl_gtf_Sem=jwl_gtf_NULL;
	if(tmpTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwlgtf_NULL}
	{
		if(tmpTaskCB->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Pre=tmpTaskCB->jwl_gtf_Sem)
		{
			if(tmpSem->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Next==jwl_gt_NULL)
				jwl_gtf_SemWaitT=jwl_gtf_NULL;
			else
			{
				jwl_gtf_SemWaitT=jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Next;
				jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Pre=jwl_gtf_SemWaitT;
			}
		}
		else if(tmpTaskCB->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL)
			tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL
		else
		{
			tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
				tmpTaskCB->jwl_gtf_WaitTLink->Next;
			tmpTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
				tmpTaskCB->jwl_gtf_WaitTLink->Pre;
		}
		tmpTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL}:
		tmpTaskCB->jwl_gtf_TimeOut=0;
	}
	tmpTaskCB>jwl_gtf_RetCode=jwl_gtf_HupUpTaskCancel;
	if(tmpTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
	{
		tmpExchOCB=tmpTaskCB;
		jwl_gtf_Switch
	}
	return;
}

/********************************************************************************************************
*                                        jwl_gtf_CancelAllSem						*
* 描述:获得空闲信号量											*
* 参数: SemID												*
*	Sem												*
*	TaskID												*
*	Task												*
* 返回: 参看JWL-GTF.H											*
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_CancelAllSem(jwl_gtf_Sem *Sem,jwl_gtf_u8 SemID)
{
	jwl_gtf_TaskCB *tmpTaskCB;
	jwl_gtf_Sem *tmpSem;
	if(Sem==jwl_gtf_NULL)
	{
		if(tmpSem=jwl_gtf_FindSem(SemID)==jwl_gtf_NULL)
			return jwl_gtf_NotSemID;
	}
	else
		tmpSem=Sem;
	if(tmpSem->jwl_gtf_Status==jwl_gtf_SemUnInit)						/*信号量没有初始化*/
		returen jwl_gtf_SemNoInit;
	if(tmpSem->jwl_gtf_SenLink==jwl_gtf_NULL)
		return jwl_gtf_NULL;
	tmpTaskCB=tmpSem->jwl_gtf_SemLink;
	if(tmpSem->jwl_gtf_SemLink->Next==jwl_gtf_NULL)
		tmpSem->jwl_gtf_SemLink=jwl_gtf_NULL;
	else if(tmpTaskCB->jwl_gtf_EvenLink->Next==jwl_gtf_NULL)
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=jwl_gtf_NULL;
	else
	{
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=\
			tmpTaskCB->jwl_gtf_EvenLink->Next;
		tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Pre=\
			tmpTaskCB->jwl_gtf_EvenLink->Pre;
	}
	tmpTaskCB->jwl_gtf_TaskStatus=tmpTaskCB->jwl_gtf_TaskStatus&(!jwl_gtf_Sem);
	tmpTaskCB->jwl_gtf_Sem=jwl_gtf_NULL;
	if(tmpTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwlgtf_NULL}
	{
		if(tmpTaskCB->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Pre=tmpTaskCB->jwl_gtf_Sem)
		{
			if(tmpSem->jwl_gtf_SemLink->jwl_gtf_WaitTLink->Next==jwl_gt_NULL)
				jwl_gtf_SemWaitT=jwl_gtf_NULL;
			else
			{
				jwl_gtf_SemWaitT=jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Next;
				jwl_gtf_SemWaitT->jwl_gtf_WaitTLink->Pre=jwl_gtf_SemWaitT;
			}
		}
		else if(tmpTaskCB->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL)
			tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL
		else
		{
			tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
				tmpTaskCB->jwl_gtf_WaitTLink->Next;
			tmpTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
				tmpTaskCB->jwl_gtf_WaitTLink->Pre;
		}
		tmpTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL}:
		tmpTaskCB->jwl_gtf_TimeOut=0;
	}
	tmpTaskCB>jwl_gtf_RetCode=jwl_gtf_HupUpTaskCancel;
	if(tmpTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
	{
		tmpExchOCB=tmpTaskCB;
		jwl_gtf_Switch
	}
	return;
}

/********************************************************************************************************
*                                        jwl_gtf_ToutSemDeal						*
* 描述:获得空闲信号量											*
* 返回: jwl_gtf_void											*
*********************************************************************************************************/
jwl_gtf_void jwl_gtf_TOutSemDeal()
{
	jwl_gtf_TaskCB *tmpTaskCB,*oldTask,*Task;
	if(jwl_gtf_SemWaitT!=jwl_gtf_NULL)
	{
		Task=jwl_gtf_get_idle();
		tmpTaskCB=jwl_gtf_SemWaitT;
		for(;tmpTaskCB!=jwl_gtf_NULL;)
		{
			oldTaskCB=tmpTaskCB->jwl_gtf_WaitTLink->Next;
			if(--oldTaskCB->jwl_gtf_TimeOut==0)
			{
				if(Task->jwl_gtf_TaskPro>oldTaskCB->jwl_gtf_TaskPro)
					Task=oldTaskCB;
				if(tmpTaskCB->jwl_gtf_EvenLink->Pre=tmpTaskCB)
				{
					if(tmpTaskCB->jwl_gtf_EvenLink->Pre=tmpTaskCB->jwl_gtf_EvenLink->\
						Pre->jwl_gtf_EvenLink->Next!=jwl_gtf_NULL)
					{
						tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Pre=\
							tmpTaskCB->jwl_gtf_EvenLink->Pre;
					}
				}
				else if(tmpTaskCB->jwl_gtf_EvenLink->Next==jwl_gtf-NULL)
					tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=jwl_gtf_NULL;
				else
				{
					tmpTaskCB->jwl_gtf_EvenLink->Pre->jwl_gtf_EvenLink->Next=\
						tmpTaskCB->jwl_gtf_EvenLink->Next;
					tmpTaskCB->jwl_gtf_EvenLink->Next->jwl_gtf_EvenLink->Pre=\
						tmpTaskCB->jwl_gtf_EvenLInk->Pre;					
				}
				tmpTaskCB->jwl_gtf_EvenLink-={jwl_gtf_NULL,jwl_gtf_NULL};
				tmpTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Ready;
				if(tmpTaskCB->jwl_gtf_WaitTLink->Pre=tmp
			}						
		}
		return;
	}
	else
		return ;	
}

⌨️ 快捷键说明

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