今天看了下UCOSIII的信號量,說什麼分二值信號量和計數信號量,網上也有不少例子,感覺說法都不是太準確,我驗證了一下,感覺應該這樣理解,創建信號量函數原型如下:
void OSSemCreate (OS_SEM *p_sem,
CPU_CHAR *p_name,
OS_SEM_CTR cnt,
OS_ERR *p_err)
其中 OS_SEM_CTR cnt,這一項,說什麼的都有,說什麼置1是二值信號量,大於1是計數信號量,這種說法不太好理解,應該是個初值設置,即在沒有其他任務OSSemPost的情況下OSSemPend可以先執行cnt次。
就是設置0的時候,在沒有OSSemPost的情況下OSSemPend會掛起,設置1的時候,在沒有OSSemPost的情況下OSSemPend會運行一次,同樣設置爲2的時候,OSSemPend會運行二次再掛起。那麼二值信號量是什麼玩意呢,準確的應該是指互斥量或者叫互斥信號量Mutex。如果理解有誤還請指正。