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