📄 jwl-gtf_sem.c
字号:
{
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 + -