首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >UCOS-III笔记(八)任务内嵌信号量与任务内嵌消息队列

UCOS-III笔记(八)任务内嵌信号量与任务内嵌消息队列

作者头像
一个平凡而乐于分享的小比特
发布2026-02-02 16:03:20
发布2026-02-02 16:03:20
630
举报

🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:UCOS-III,本专栏为UCOS-III学习记录 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

UCOS-III笔记(八)

任务内嵌信号量

​ 本质上就是一个信号量,任务信号量是分配于每一个任务的任务控制块结构体中的, 因此每一个任务都有独自的任务内嵌信号量

在这里插入图片描述
在这里插入图片描述

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

优势:1.使用内存更小 2.效率更高

劣势:无法广播给多个任务

任务信号量相关API函数介绍

函数

描述

OSTaskSemPend()

获取任务信号量

OSTaskSemPendAbort()

终止任务挂起等待任务信号量

OSTaskSemPost()

释放指定任务的任务信号量

OSTaskSemSet()

强制设置指定的任务信号量为指定值

注意:释放任务信号量API函数可以用于任务和中断服务函数中;接收任务信号量API函数只能用在任务中

OSTaskSemPend():获取任务内嵌信号量
代码语言:javascript
复制
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 类型返回值 任务内嵌信号量更新后的资源数
OSTaskSemPost():释放任务内嵌信号量
代码语言:javascript
复制
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 类型返回值 任务内嵌信号量更新后的资源数
OSTaskSemSet():强制设置任务内嵌信号量的资源数
代码语言:javascript
复制
OS_SEM_CTR OSTaskSemSet( OS_TCB* 		p_tcb,	//指向任务控制块的指针
                         OS_SEM_CTR 	cnt;	//指定的信号量资源数
                         OS_ERR* 		p_err 	//指向接收错误代码变量的指针
                       ) //OS_SEM_CTR 类型返回值 任务内嵌信号量设置前的资源数

任务内嵌消息队列

​ 本质上就是一个消息队列,任务队列是分配于每一个任务的任务控制块结构体中的, 因此每一个任务都有独自的任务内嵌消息队列

在这里插入图片描述
在这里插入图片描述

注意:任务内嵌消息队列只能被该任务获取,但是可以由其他任务或者中断释放!

任务队列相关AP函数介绍

函数

描述

OSTaskQFlush()

清空任务内嵌消息队列中的所有消息

OSTaskQPend()

获取任务内嵌消息队列中的消息

OSTaskQPendAbort()

终止任务挂起等待任务内嵌消息队列

OSTaskQPost()

发送消息到任务内嵌消息队列

注意:

发送任务消息队列API函数可以用于任务和中断服务函数中;接收任务消息队列API函数只能用在任务中

OSTaskQPend():获取任务内嵌消息队列中的消息
代码语言:javascript
复制
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 *类型返回值  指向消息的万能指针
OSTaskQPost():发送消息到任务内嵌消息队列
代码语言:javascript
复制
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 *类型返回值  指向消息的万能指针
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UCOS-III笔记(八)
  • 任务内嵌信号量
    • 任务信号量相关API函数介绍
    • OSTaskSemPend():获取任务内嵌信号量
    • OSTaskSemPost():释放任务内嵌信号量
    • OSTaskSemSet():强制设置任务内嵌信号量的资源数
  • 任务内嵌消息队列
    • 任务队列相关AP函数介绍
    • OSTaskQPend():获取任务内嵌消息队列中的消息
    • OSTaskQPost():发送消息到任务内嵌消息队列
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档