嵌入式学习小组
直播中

刘刚

7年用户 1015经验值
私信 关注

请问信号量在共享资源和任务同步中这段原子教程是真的有语句歧义吗?

不排除我看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.在我理解中,信号机制 就应该是 任务同步

回帖(2)

马昆秀

2019-9-12 09:14:48
在共享资源中,cnt :信号量的初始值。如果此值为1,代表信号量为二进制信号量,如果大于1,则代表为计数型信号量。
用于任务同步时,一般情况下N的初始值是0,表示事件还没有发生。
在初始化时也可以将N的初值设为大于0的某个值来表示初始情况下有多少信号量可以使用。
举报

于帅

2019-9-12 09:20:39
嗯,算是有歧义吧,这里应该是想表达二值信号量的cnt值最大为1。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分