🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:UCOS-III,本专栏为UCOS-III学习记录 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
本质上就是一个信号量,任务信号量是分配于每一个任务的任务控制块结构体中的, 因此每一个任务都有独自的任务内嵌信号量

注意:任务内嵌信号量只能被该任务获取,但是可以由其他任务或者中断释放!
优势:1.使用内存更小 2.效率更高
劣势:无法广播给多个任务
函数 | 描述 |
|---|---|
OSTaskSemPend() | 获取任务信号量 |
OSTaskSemPendAbort() | 终止任务挂起等待任务信号量 |
OSTaskSemPost() | 释放指定任务的任务信号量 |
OSTaskSemSet() | 强制设置指定的任务信号量为指定值 |
注意:释放任务信号量API函数可以用于任务和中断服务函数中;接收任务信号量API函数只能用在任务中
OS_SEM_CTR OSTaskSemPend( OS_TICK timeout, //任务挂起等待任务内嵌信号量的最大允许时间
OS_OPT opt, //OS_OPT_PEND_BLOCKING:如果信号量没有资源的话就阻塞任务
//OS_OPT_PEND_NON_BLOCKING :如果信号量没有资源任务就直接返回
CPU_TS* p_ts, //指向接收任务内嵌信号量接收时的时间戳的变量的指针
OS_ERR* p_err //指向接收错误代码变量的指针
) //OS_SEM_CTR 类型返回值 任务内嵌信号量更新后的资源数OS_SEM_CTR OSTaskSemPost( OS_TCB* p_tcb, //指向任务控制块的指针
OS_OPT opt, //OS_OPT_POST_NONE:不指定特定的选项
//OS_OPT_POST_NO_SCHED :禁止在本函数内执行任务调度
OS_ERR* p_err //指向接收错误代码变量的指针
) //OS_SEM_CTR 类型返回值 任务内嵌信号量更新后的资源数OS_SEM_CTR OSTaskSemSet( OS_TCB* p_tcb, //指向任务控制块的指针
OS_SEM_CTR cnt; //指定的信号量资源数
OS_ERR* p_err //指向接收错误代码变量的指针
) //OS_SEM_CTR 类型返回值 任务内嵌信号量设置前的资源数 本质上就是一个消息队列,任务队列是分配于每一个任务的任务控制块结构体中的, 因此每一个任务都有独自的任务内嵌消息队列

注意:任务内嵌消息队列只能被该任务获取,但是可以由其他任务或者中断释放!
函数 | 描述 |
|---|---|
OSTaskQFlush() | 清空任务内嵌消息队列中的所有消息 |
OSTaskQPend() | 获取任务内嵌消息队列中的消息 |
OSTaskQPendAbort() | 终止任务挂起等待任务内嵌消息队列 |
OSTaskQPost() | 发送消息到任务内嵌消息队列 |
注意:
发送任务消息队列API函数可以用于任务和中断服务函数中;接收任务消息队列API函数只能用在任务中
void *OSTaskQPend( OS_TICK timeout, //任务挂起等待任务内嵌消息队列的最大允许时间
OS_OPT opt, //OS_OPT_PEND_BLOCKING :如果任务队列中没有消息的话就阻塞任务
//OS_OPT_PEND_NON_BLOCKING :如果任务队列中没有消息的话就直接返回
OS_MSG_SIZE* p_msg_size, //指向用于接收消息大小变量的指针
CPU_TS* p_ts, //指向接收消息队列接收时的时间戳的变量的指针
OS_ERR* p_err //指向接收错误代码变量的指针
) //void *类型返回值 指向消息的万能指针void OSTaskQPost( OS_TCB* p_tcb, //指向任务控制块的指针
void* p_void, //指向消息的指针
OS_MSG_SIZE msg_size, //消息的大小,单位:字节
OS_OPT opt, //OS_OPT_POST_FIFO :将发送的消息保存在任务队列的末尾
//OS_OPT_POST_LIFO :将发送的消息保存在任务队列的开头
//以上的几种类型可以与该宏进行组合
//OS_OPT_POST_NO_SCHED :禁止在本函数内执行任务调度
OS_ERR* p_err //指向接收错误代码变量的指针
) //void *类型返回值 指向消息的万能指针