OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2836|回复: 5

关于信号量的几点疑问

[复制链接]

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2015-8-4
在线时间
38 小时
发表于 2016-9-22 23:56:58 | 显示全部楼层 |阅读模式
本帖最后由 hblgxy 于 2016-9-22 23:56 编辑

各位大神求教,视屏学习里说信号量相当于变量,下面有几点疑问
1.下图是OSSemCreate();函数创建信号量,创建一个二进制信号量将初始值置1,那么运行OSSemPost();信号量加一,信号量会不会归零?
无标题.png
2.请求信号量是什么意思?CPU执行到一个任务函数OSSemPend();处等待其他任务释放信号量,这个等待的过程称为请求信号量吗?CPU既然在等待信号量释放那就不会去执行其他任务释放信号量的函数,这样不就永远等不到信号量吗?还是在执行OSSemPend();时发生了任务调度?3.信号量请求函数OSSemPend()怎样才算请求到信号量?是信号量的值不为0吗?当函数OSSemPend()请求到信号量时信号量的值是否减1?假如有多个任务共用一个信号量,一个任务释放信号量时想哪个任务释放信号量呢?如果将OPT参数设为OS_OPT_POST_ALL,同时又有多个任务在请求信号量哪么该如何执行?能否请求信号量的特定值,当信号量为一个特定值时才视为函数OSSemPend()请求到信号量?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

110

帖子

0

精华

高级会员

Rank: 4

积分
553
金钱
553
注册时间
2014-10-23
在线时间
195 小时
发表于 2016-10-19 14:51:44 | 显示全部楼层
回复 支持 反对

使用道具 举报

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-7-14
在线时间
12 小时
发表于 2016-10-19 23:14:00 | 显示全部楼层
对于第二个问题,OSSemPend()会引发任务调度。可以理解成,执行到pend函数后,只有等到post之后,这个任务才会继续进行下去。
回复 支持 反对

使用道具 举报

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-7-14
在线时间
12 小时
发表于 2016-10-19 23:16:18 | 显示全部楼层
3.当信号量的值为0时,无法请求到信号量。post函数里面有opt,好像只能给全部或者优先级最高的,如果post了,所有pend的程序会进入就绪态,之后就按优先级来运行。
回复 支持 反对

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2015-8-4
在线时间
38 小时
 楼主| 发表于 2016-10-21 12:16:17 | 显示全部楼层
dream顺 发表于 2016-10-19 23:14
对于第二个问题,OSSemPend()会引发任务调度。可以理解成,执行到pend函数后,只有等到post之后,这个任务 ...

多谢指教
回复 支持 反对

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2015-8-4
在线时间
38 小时
 楼主| 发表于 2016-10-21 12:16:38 | 显示全部楼层
dream顺 发表于 2016-10-19 23:16
3.当信号量的值为0时,无法请求到信号量。post函数里面有opt,好像只能给全部或者优先级最高的,如果post了 ...

多谢指教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 22:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表