📄 os_time.c
字号:
#ifndef OS_MASTER_FILE
#include "linos.h"
#endif
/*
*******************************************************************************
* 任务延时函数 *
*******************************************************************************
*/
void OSTimeDly (INT16U ticks)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT8U y;
if(ticks > 0)
{
OS_ENTER_CRITICAL();
y = OSTCBCur->OSTCBY;
OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
if(OSRdyTbl[y] == 0) //如果就绪组无其他任务就绪,清除就绪组
{
OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
}
OSTCBCur->OSTCBDly = ticks;
OS_EXIT_CRITICAL();
OS_Sched(); //进行任务调度
}
}
/*
*******************************************************************************
* 取消任务延时函数 *
*******************************************************************************
*/
#if OS_TIME_DLY_RESUME_EN > 0
INT8U OSTimeDlyResume (INT8U prio)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
OS_TCB *ptcb;
#if OS_ARG_CHK_EN > 0 //优先级检查
if(prio >= OS_LOWEST_PRIO)
{
return (OS_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
ptcb = (OS_TCB *)OSTCBPrioTbl[prio];
if(ptcb != (OS_TCB *)0)
{
if(ptcb->OSTCBDly != 0) //如果延时值大于0,取消延时
{
ptcb->OSTCBDly = 0;
if((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) //任务挂起时,不进行调度
{
OSRdyGrp |= ptcb->OSTCBBitY; //设置任务为就绪状态
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
OS_EXIT_CRITICAL();
OS_Sched(); //任务调度
}
else
{
OS_EXIT_CRITICAL();
}//if((ptcb->OSTCBStat...
return (OS_NO_ERR);
}
else
{
OS_EXIT_CRITICAL();
return (OS_TIME_NOT_DLY);
}//if(ptcb->OSTCBDly...
}//if(ptcb !=...
OS_EXIT_CRITICAL();
return (OS_TASK_NOT_EXIST);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -