UCOS-II中信号量用法

时间:2022-09-25 15:18:50
最近在移植UCOS-II,但是发现里面的信号量用法不是成对使用的.
既在一个任务里用
OSSemPend(Signal,0,&err);
而在另一个任务里用OSSemPost(Signal);
我不明白其中的原理,不是成对使用的吗?
在一个任务里
OSSemPend(Signal,0,&err);
//自己的代码
OSSemPost(Signal);
请高手们指点.我迷惑了好几天了.

12 个解决方案

#1


有什么问题,就是这样用

#2


你指的成对是什么?这两个函数一对一使用?
实际应用中会一对多啊,可以在多处post,这点很好理解,
至于是否可以在多处pend忘了,应该可以吧,不同的任务通过优先级来获取执行,以前简单研究过。

#3


一个是产生信号量,一个是消耗信号量,

其中的第二个任务挂起等待,直到第一个任务产生信号量,这时第二个任务就消耗掉这个信号量,继续运行。

#4


刚刚在偶的资源里共享了一个ucos的信号量学习文档,可以看看

#5


学习了,正在学习,困惑中!!!

#6


楼主的用法感觉像是将信号量当FLAG用,满足就下,不满足就走。

#7


mask

#8


2中使用方法都对
情况不同而已
1、是2个任务 一个任务等待另1个或几个任务完成某件事
2、是临界区资源保护,要成对使用的
自己理解!!

#9


忘记了2年前搞的记得当时有个是阻塞型的,pend一个消息后另个任务会阻塞等待他,不知道记得清楚不!

#10


      OSSemPend 是等待信号 ,可以等待当前的任务发出的信号,也可以等待其他任务发出信号
SSemPost 同理,但OSSemPend 一般不在中断中使用,OSSemPend则可以 

#11


“既在一个任务里用
OSSemPend(Signal,0,&err);
而在另一个任务里用OSSemPost(Signal);
我不明白其中的原理,不是成对使用的吗?
在一个任务里
OSSemPend(Signal,0,&err);
//自己的代码
OSSemPost(Signal); ”

OSSemPend与OSSemPost是成对使用的,但是可以在不同的任务中使用。
或许他们都用了同一个临界区,从OSSemPend起使用某种资源,直到另外一个任务释放某种资源。
你的写法也有,要具体问题具体分析。

#12


生产与消费的关系,想消费得先生产,生产过多并不影响你消费,但是会浪费造成

#1


有什么问题,就是这样用

#2


你指的成对是什么?这两个函数一对一使用?
实际应用中会一对多啊,可以在多处post,这点很好理解,
至于是否可以在多处pend忘了,应该可以吧,不同的任务通过优先级来获取执行,以前简单研究过。

#3


一个是产生信号量,一个是消耗信号量,

其中的第二个任务挂起等待,直到第一个任务产生信号量,这时第二个任务就消耗掉这个信号量,继续运行。

#4


刚刚在偶的资源里共享了一个ucos的信号量学习文档,可以看看

#5


学习了,正在学习,困惑中!!!

#6


楼主的用法感觉像是将信号量当FLAG用,满足就下,不满足就走。

#7


mask

#8


2中使用方法都对
情况不同而已
1、是2个任务 一个任务等待另1个或几个任务完成某件事
2、是临界区资源保护,要成对使用的
自己理解!!

#9


忘记了2年前搞的记得当时有个是阻塞型的,pend一个消息后另个任务会阻塞等待他,不知道记得清楚不!

#10


      OSSemPend 是等待信号 ,可以等待当前的任务发出的信号,也可以等待其他任务发出信号
SSemPost 同理,但OSSemPend 一般不在中断中使用,OSSemPend则可以 

#11


“既在一个任务里用
OSSemPend(Signal,0,&err);
而在另一个任务里用OSSemPost(Signal);
我不明白其中的原理,不是成对使用的吗?
在一个任务里
OSSemPend(Signal,0,&err);
//自己的代码
OSSemPost(Signal); ”

OSSemPend与OSSemPost是成对使用的,但是可以在不同的任务中使用。
或许他们都用了同一个临界区,从OSSemPend起使用某种资源,直到另外一个任务释放某种资源。
你的写法也有,要具体问题具体分析。

#12


生产与消费的关系,想消费得先生产,生产过多并不影响你消费,但是会浪费造成