C语言taskName函数,对恢复任务函数OSTaskResume()的理解

最近刚刚学习ucosii,到了恢复任务函数OSTaskResume()的时候查了一些人的理解,感觉没有到点子上,现在我按自己的理解过一遍,先上代码:

#if OS_TASK_SUSPEND_EN > 0

INT8U OSTaskResume (INT8U prio)

{

OS_TCB *ptcb;

#if OS_CRITICAL_METHOD == 3 /* Storage for CPU status register */

OS_CPU_SR cpu_sr = 0;

#endif

#if OS_ARG_CHK_EN > 0

if (prio >= OS_LOWEST_PRIO) { /* Make sure task priority is valid */

return (OS_ERR_PRIO_INVALID);

}

#endif

OS_ENTER_CRITICAL();

ptcb = OSTCBPrioTbl[prio];

if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */

OS_EXIT_CRITICAL();

return (OS_ERR_TASK_RESUME_PRIO);

}

if (ptcb == OS_TCB_RESERVED) { /* See if assigned to Mutex */

OS_EXIT_CRITICAL();

return (OS_ERR_TASK_NOT_EXIST);

}

if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended */

ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND; /* Remove suspension */

if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is now ready */

if (ptcb->OSTCBDly == 0) {

OSRdyGrp |= ptcb->OSTCBBitY; /* Yes, Make task ready to run */

OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;

OS_EXIT_CRITICAL();

if (OSRunning == OS_TRUE) {

OS_Sched(); /* Find new highest priority task */

}

} else {

OS_EXIT_CRITICAL();

}

} else { /* Must be pending on event */

OS_EXIT_CRITICAL();

}

return (OS_ERR_NONE);

}

OS_EXIT_CRITICAL();

return (OS_ERR_TASK_NOT_SUSPENDED);#endif

其实这个函数的核心功能就是这一段:if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended */

ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND; /* Remove suspension */

if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is now ready */

if (ptcb->OSTCBDly == 0) {

OSRdyGrp |= ptcb->OSTCBBitY; /* Yes, Make task ready to run */

OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;

OS_EXIT_CRITICAL();

if (OSRunning == OS_TRUE) {

OS_Sched(); /* Find new highest priority task */

}

也就是:判断这个任务是否被挂起——>取消任务在控制块中挂起的记录——>恢复任务就绪表——>调用任务调度器OS_Sched()进行一次任务调度——>返回。其余的主要是判断任务的优先级别是否合法,任务是否存在等等,下图是函数OSTaskResume()的流程图:说到底ucosii的内核就是用C语言写的,无非就是比我们常见的C语言程序多了些指针、结构体,以及命明比较复杂,但是仔细看还是那些语法,先从大概方向判断要干什么,然后从每条语句看其所要表达的意思,就是这么简单。

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值