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