嵌入式学习小组
直播中

刘珊宏

7年用户 229经验值
私信 关注

UCOSIII任务挂起与接挂的原理是什么?

        用了OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err);函数吧任务二挂起,用OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err);函数把任务二解挂,正常,
但是如果连续调用OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err)函数两次,必须使用两次OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err);解挂。为什么,UCOSIII的程序源码没太看懂,可简要说一下UCOSIII任务挂起与接挂的原理吗?谢谢

回帖(5)

杨涛

2020-3-18 09:45:03
看任务挂起函数和任务解挂函数的源码!挂起的时候任务控制块的成员变量SuspendCtr用来记录任务挂起次数!每挂起一次此变量就加一,解除挂起的时候此变量就会减一。只有最后一次解除挂起任务才会起作用的。也就是你所谓的试验结果,连续两次调用函数OSTaskSuspend()挂起一个任务,那么就需要调用两次解除函数OSTaskResume()才能最终恢复任务的运行!!!!
举报

史乃原

2020-3-18 09:50:51
测试直接使用的发烧友的例程,因为当时不小心调用了两次挂起函数,只用了一次解挂函数,导致任务没用运行,与是试试调用两次解挂函数,发现程序正常。
举报

王蓓

2020-3-18 10:04:01
谢谢UCSIII源码充斥各种宏定义,看的头都大了
举报

贾伟刚

2020-3-18 10:09:07
还用一个问题,我看定义一个(void *)0;是什么意思?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分