OpenEdv-开源电子网

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

信号量在共享资源和任务同步中,OSSemCreate函数cnt初值设置,原子教程有语句歧义的地方

[复制链接]

47

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2016-1-2
在线时间
80 小时
发表于 2016-12-17 09:52:57 | 显示全部楼层 |阅读模式
不排除我看pdf,看的不仔细造成我理解有问题。

void  OSSemCreate (OS_SEM      *p_sem,
                   CPU_CHAR    *p_name,
                   OS_SEM_CTR   cnt,
                   OS_ERR      *p_err)

cnt :信号量的初始值。如果此值为1,代表信号量为二进制信号量。               
                                          如果大于1,则代表为计数型信号量。

以上是原子哥的教程10.1.1中原话。。
而我在仔细看任务同步那节教程是,
例子中有,
        //创建一个信号量
        OSSemCreate ((OS_SEM*        )&SYNC_SEM,
                 (CPU_CHAR*        )"SYNC_SEM",
                 (OS_SEM_CTR)0,               

                 (OS_ERR*        )&err);
为啥cnt中被设置为0呀。纠结好久。
后来看 嵌入式实时操作系统uC/OS-III  这本书391页
void  OSSemCreate (OS_SEM      *p_sem,
                   CPU_CHAR    *p_name,
                   OS_SEM_CTR   cnt,
                   OS_ERR      *p_err)
cnt:大体意思就是  当信号量用于共享资源时,可以设置为1 (二进制)或者大于1(计数型)
                          当用于信号机制,则该值应该设置为0.
在我理解中,信号机制 就应该是 任务同步
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

47

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2016-1-2
在线时间
80 小时
 楼主| 发表于 2016-12-17 09:54:56 | 显示全部楼层
在共享资源中,cnt :信号量的初始值。如果此值为1,代表信号量为二进制信号量,如果大于1,则代表为计数型信号量。

用于任务同步时,一般情况下N的初始值是0,表示事件还没有发生。
在初始化时也可以将N的初值设为大于0的某个值来表示初始情况下有多少信号量可以使用。
回复 支持 反对

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-12-17 10:07:10 | 显示全部楼层
嗯,算是有歧义吧,这里应该是想表达二值信号量的cnt值最大为1。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-2 00:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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