?? 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 + -