在ucos中创建一个信号量 比如ossemcreat(0)。ossemcreat(1)的区别

在ucos中创建一个信号量 比如ossemcreat(0)。ossemcreat(1)的区别,第1张

OSSemPost 和带旦OSSemPend是成对出现的,在程序OSSemPost 尚未运行到的时候,衫行搜在等待Sem的

OSSemPend是会把当前的任务挂起,直到另外一个任务的OSSemPost 运行完毕都得到Sem。但是可以通过改变OSSemCreate(x)里面的值x改变这种局面,或历当x不为0时,OSSemPend会马上得到Sem继续运行当前任务至结束,并将x的数值减一,直到为0。为0后,只有等其他任务的OSSemPost了。

任务2输出5之后,由于等待信号量挂起,之后任务1输出3,然后发信号量,注意发信号亮并不是简单的+1,OSSemPost中有这几行代码

if (pevent->OSEventGrp != 0) {

(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK)

OS_EXIT_CRITICAL()

OS_Sched()

return (OS_ERR_NONE)

}

此时因慎颤为任务2的优先级较1低,所以没有立即运行,而是宽散败任务1继续输出4、0然后挂起自己,任务2就运行了,输掘扰出678


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8283824.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存