任务信号量只能被该任务获取,但是可以由其他任务或中断释放!
API函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| OS_SEM_CTR OSTaskSemPend (OS_TICK timeout, OS_OPT opt, CPU_TS *p_ts, OS_ERR *p_err)
OS_SEM_CTR OSTaskSemPost (OS_TCB *p_tcb, OS_OPT opt, OS_ERR *p_err)
OS_SEM_CTR OSTaskSemSet (OS_TCB *p_tcb, OS_SEM_CTR cnt; OS_ERR *p_err)
|
示例
1 2 3 4 5
| OSTaskSemSet(&uart_task_tcb, 5, &err);
OSTaskSemPost(&uart_task_tcb, OS_OPT_POST_NONE, &err);
ctr1 = OSTaskSemPend(0, OS_OPT_PEND_BLOCKING, 0, &err);
|
任务内嵌消息队列只能被该任务获取,但是可由其他任务或中断释放!
API函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| void *OSTaskQPend (OS_TICK timeout, OS_OPT opt, OS_MSG_SIZE *p_msg_size, CPU_TS *p_ts, OS_ERR *p_err)
void OSTaskQPost (OS_TCB *p_tcb, void *p_void, OS_MSG_SIZE msg_size, OS_OPT opt, OS_ERR *p_err)
|
示例
1 2 3 4 5 6 7
| uint8_t key = 0;
OSTaskQPost(&task_tcb, &key, siazeof(key), OS_OPT_POST_FIFO, &err);
uint8_t *key; OS_MSG_SIZE size = 0; key = OSTaskQPend(0, OS_OPT_PEND_BLOCKING, &size, 0, &err);
|