任务内嵌信号量/队列

Pursue

任务内嵌信号量

任务信号量只能被该任务获取,但是可以由其他任务或中断释放!

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, //PEND_BLOCKING or NON_BLOCKING
CPU_TS *p_ts, //指向接收时间戳的变量指针
OS_ERR *p_err) //错误代码

//释放任务内嵌信号量
OS_SEM_CTR OSTaskSemPost (OS_TCB *p_tcb, //指向任务控制块指针
OS_OPT opt, //POST_NONE or NO_SCHED
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, //PEND_BLOCKING or NON_BLOCKING
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, //POST_FIFO or LIFO
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);
评论