UCOSIII信号量:
信号量:
二值信号量(共享资源)
计数信号量(任务同步)
互斥信号量(用于解决优先级反转)
任务内带信号量(只能用于任务同步,一种计数信号量)
1:二值信号量,计数信号量
//定义信号量
OS_SEM MY_SEM;
//创建信号量
OSSemCreate ((OS_SEM*)&MY_SEM,
(CPU_CHAR* )"MY_SEM",
(OS_SEM_CTR)1,
(OS_ERR* )&err);
//OS_SEM_CTR:此处为1表示二值信号量,用于共享资源
此处为0表示计数信号量,用于任务同步
//请求信号量
OS_SEM_CTR OSSemPend (OS_SEM *p_sem,
OS_TICK timeout,
OS_OPT opt,
CPU_TS *p_ts,
OS_ERR *p_err)
//发送(释放)信号量
OS_SEM_CTR OSSemPost (OS_SEM *p_sem,
OS_OPT opt,
OS_ERR *p_err)
//对于二值信号量:OSSemPend(),OS_SEM_CTR减一,OS_SEM_CTR变为0,表示该信号量被占有
OSSemPost (),OS_SEM_CTR加一,OS_SEM_CTR变为1,表示该信号量可用
//对于计数信号量:每执行OSSemPend(),OS_SEM_CTR减一,OS_SEM_CTR减到0,任务阻塞
每执行 OSSemPost (),OS_SEM_CTR加一
2:互斥信号量(二值信号量)
//定义一个互斥信号量
OS_MUTEX TEST_MUTEX;
//创建一个互斥信号量
void OSMutexCreate (OS_MUTEX *p_mutex,
CPU_CHAR *p_name,
OS_ERR *p_err)
void OSMutexPend (OS_MUTEX *p_mutex,
OS_TICK timeout,
OS_OPT opt,
CPU_TS *p_ts,
OS_ERR *p_err)
void OSMutexPost (OS_MUTEX *p_mutex,
OS_OPT opt,
OS_ERR *p_err)
3:任务自带信号量
无需创建,只能用于任务同步,是一种计数信号量
OS_SEM_CTR OSTaskSemPost (OS_TCB *p_tcb,
OS_OPT opt,
OS_ERR *p_err)
OS_SEM_CTR OSTaskSemPend (OS_TICK timeout,
OS_OPT opt,
CPU_TS *p_ts,
OS_ERR *p_err)