完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
在UCOSIII中,信号量如果要PEND的话,那这个信号量的cnt必须大于等于1才可以(需要在创建的时候设置第三个参数cnt为1或者,先POST一下才可以)。这个理解对吗?
互斥信号量,在使用的时候没有cnt这个参数。但是在使用的时候可以直接PEND,并且可以嵌套250层。然后需要POST释放相同的次数。 这个过程中,嵌套只能在一个任务中。别的任务需要请求共享资源时,必须要等正在使用共享资源的任务释放才可以。 不知道以上理解对不对,路过的大侠指导一下。谢谢! |
|
相关推荐
10个回答
|
|
|
|
自己顶一下!!!
|
|
|
|
OSSemCreate ()的第三个参数cnt表示的是资源数目。比如说,如果cnt=2,那么同一时刻可以有两个任务获得这个资源。
互斥信号量嵌套250层?这个我不太明白... |
|
|
|
你理解的不对。不会有两个任务同时获得一个资源。
|
|
|
|
我有个疑问,如果不会有两个任务同时获得一个资源,那么多值信号量设计的目的是?
|
|
|
|
这个目的是让每次的POST都被记录到,然后你就可以做相同次数的PEND。但是每次只有优先级最高的任务PEND到。
|
|
|
|
两个任务不可能完全同时跑的,即便是时间片轮转调度。应该是信号量的计数值是2,能被PEND两次,在OSSemPend()的时候,如果信号量的计数值>0,那肯定会获得信号量。
|
|
|
|
楼主, 你的第一个问题:OSSemCreate()的第三个形参cnt可以为0,你可以去试,原子的例子就是创建一个计数值为0的信号量,这就会让你第一次OSSemPend()因为等不到信号量而挂起来。互斥信号量就是确认信号量的值只能为1或则0,它的作用是来防止优先级反转的,因为只有一个任务能占用互斥信号量,那肯定只能它释放才能让别的等待该互斥信号量的任务进入就就绪态。
|
|
|
|
先说sem,初始化为0,是用来任务同步的,初始化不为零是用来共享资源保护的(几乎不用这个功能)。然后互斥信号量用做资源共享保护在信号量请求的时候,不管同时有多少个请求,不管CNT等于几(大于1)。cnt都只减1.但是可以选择把信号量POST给优先级最高的等待任务还是所有的等待任务。请求到的信号量会进入就绪态,但是只有最高优先级的任务被执行。
|
|
|
|
对的,你说的很严谨。
|
|
|
|
只有小组成员才能发言,加入小组>>
791 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2860 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2710 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1070浏览 3评论
193浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 15:46 , Processed in 1.248645 second(s), Total 96, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号