UCOS-III 任务同步机制-信号量

1. 信号量类型

1.1  二值信号量(Binary Semaphores)

二值信号量只有两个状态:可用(1)和不可用(0)。它主要用于任务之间的互斥访问或者事件通知。例如,当一个任务完成某个操作后,它可以通过释放信号量来通知其他任务该操作已经完成。

1.2  计数信号量(Counting Semaphores)

计数信号量可以有多个状态,范围从0到一个预定义的最大值。它主要用于控制对资源的访问,允许多个任务同时访问同一资源。例如,在一个生产者-消费者模型中,计数信号量可以用来表示缓冲区中的可用资源数量。

2. 信号量的基本操作

2.1 创建信号量

创建一个信号量,需要调用OSSemCreate()函数。该函数的原型如下:

void OSSemCreate(OS_SEM *p_sem, CPU_CHAR *p_name, OS_SEM_CTR cnt, OS_ERR *p_err);

2.2 等待信号量

任务等待信号量,需要调用OSSemPend()函数。该函数的原型如下:

void OSSemPend(OS_SEM *p_sem, OS_TICK timeout, OS_OPT opt, CPU_TS *p_ts, OS_ERR *p_err);

2.3  释放信号量

任务释放信号量,需要调用OSSemPost()函数。该函数的原型如下:

void OSSemPost(OS_SEM *p_sem, OS_OPT opt, OS_ERR *p_err);

3. 信号量API详解

OSSemCreate()
创建一个信号量参数
p_sem:指向信号量的指针
p_name:信号量的名称
cnt:初始计数值
p_err:返回错误代码
返回值 无错误代码
OS_ERR_NONE:成功。
OS_ERR_CREATE_ISR:在ISR中调用。
OS_ERR_ILLEGAL_CREATE_RUN_TIME:非法的创建时间。
OSSemPend()
任务等待信号量参数
p_sem:指向信号量的指针
timeout:等待时间
opt:选项标志
p_ts:时间戳
p_err:返回错误代码
返回值 无错误代码
OS_ERR_NONE:成功
OS_ERR_PEND_ISR:在ISR中调用
OS_ERR_OBJ_DEL:对象被删除
OS_ERR_PEND_ABORT:等待被中止
OSSemPost()
任务释放信号量参数
p_sem:指向信号量的指针
opt:选项标志
p_err:返回错误代码
返回值 无错误代码
OS_ERR_NONE:成功
OS_ERR_POST_ISR:在ISR中调用
OS_ERR_SEM_OVF:信号量溢出

4. 信号量使用示例

4.1 任务间同步

4.1.1 任务间同步流程图

4.1.2 任务间同步示例

以下示例展示了如何在两个任务之间使用信号量进行同步:

void Task1(void *p_arg) {OS_ERR err;while (1) {OSSemPend(&MySem, 0, OS_OPT_PEND_BLOCKING, 0, &err);......}
}void Task2(void *p_arg) {OS_ERR err;while (1) {// 任务代码OSSemPost(&MySem, OS_OPT_POST_1, &err);}
}

4.2 任务与ISR同步

4.2.1 任务与ISR同步流程图

4.2.2 任务与ISR间同步示例

以下示例展示了任务与中断服务程序(ISR)之间使用信号量进行同步:

void ISR(void) {OS_ERR err;OSSemPost(&MySem, OS_OPT_POST_1, &err);
}void Task(void *p_arg) {OS_ERR err;while (1) {OSSemPend(&MySem, 0, OS_OPT_PEND_BLOCKING, 0, &err);// 处理ISR信号}
}

5. 注意事项

避免死锁:确保任务获取信号量的顺序一致,防止循环等待

合理设置优先级:避免高优先级任务长时间占用信号量,影响低优先级任务

使用超时机制:在获取信号量时,设置合理的超时时间,避免任务永久等待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/369906.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pip install包出现哈希错误解决

如图,当遇到此类错误时,多半是连接不稳定导致的校验失败。我们可以在PC端,或Ubuntu通过浏览器下载.whl安装文件:直接复制报错信息中的网址到浏览器即可弹出下载窗口。

kafka的架构

一、架构图 Broker:一台 kafka 服务器就是一个 broker。一个kakfa集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 Producer:消息生产者,就是向 kafka broker 发消息的客户端 Consumer:消息消费者,向 kaf…

Win11右键默认显示更多选项的方法

问题描述 win11系统默认右键菜单显示选项太少,每次需要点一下“显示更多选项”才能得到想要内容。比方说我用notepad打开一个文档,在win11上要先点一下"显示更多选项“,再选择用notepad打开,操作非常反人类。 Win11右键默…

小红书矩阵系统源码:赋能内容创作与电商营销的创新工具

在内容驱动的电商时代,小红书凭借其独特的社区氛围和用户基础,成为品牌营销和个人创作者不可忽视的平台。小红书矩阵系统源码,作为支撑这一平台的核心技术,提供了一系列的功能和优势,助力用户在小红书生态中实现更高效…

高考假期预习指南

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

【CSAPP】-attacklab实验

目录 实验目的与要求 实验原理与内容 实验设备与软件环境 实验过程与结果(可贴图) 实验总结 实验目的与要求 1. 强化机器级表示、汇编语言、调试器和逆向工程等方面基础知识,并结合栈帧工作原理实现简单的栈溢出攻击,掌握其基…

51单片机第23步_定时器1工作在模式0(13位定时器)

重点学习51单片机定时器1工作在模式0的应用。 在51单片机中,定时器1工作在模式0,它和定时器0一样,TL1占低5位,TH1占高8位,合计13位,也是向上计数。 1、定时器1工作在模式0 1)、定时器1工作在模式0的框图…

django高校教务系统-计算机毕业设计源码81661

目 录 摘要 1 绪论 1.1 研究背景 1.2目的及意义 1.3论文结构与章节安排 2 高校教务系统设计分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4…

TCP和IP数据包结构

一、问题引入 一般我们在谈上网速度的时候,专业上用带宽来描述,其实无论说网速或者带宽都是不准确的,呵呵。比如:1兆,512K……有些在学校的学生,也许会有疑问,明明我的业务是1M,为…

前后端的导入、导出、模板下载等写法

导入,导出、模板下载等的前后端写法 文章目录 导入,导出、模板下载等的前后端写法一、导入实现1.1 后端的导入1.2 前端的导入 二、基础的模板下载2.1 后端的模板下载-若依基础版本2.2 前端的模板下载2.3 后端的模板下载 - 基于资源文件读取2.4 excel制作…

Tech Talk:智能电视eMMC存储的五问五答

智能电视作为搭载操作系统的综合影音载体,以稳步扩大的市场规模走入越来越多的家庭,成为人们生活娱乐的重要组成部分。存储部件是智能电视不可或缺的组成部分,用于保存操作系统、应用程序、多媒体文件和用户数据等信息。智能电视使用eMMC作为…

ListBox自动滚动并限制显示条数

1、实现功能 限制ListBox显示的最大条数; ListBox自动滚动,显示最新行; 2、C#代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using Syst…

印尼网络安全治理能力观察

在全国国际机场的移民服务完全瘫痪 100 多个小时后,印尼政府承认其新成立的国家数据中心 (PDN) 遭受了网络攻击。 恶意 Lockbit 3.0 勒索软件加密了存储在中心的重要数据,其背后的黑客组织要求支付 800 万美元的赎金。 不幸的是,大多数数据…

TreeMap、HashMap 和 LinkedHashMap 的区别

TreeMap、HashMap 和 LinkedHashMap 的区别 1、HashMap2、LinkedHashMap3、TreeMap4、总结 💖The Begin💖点点关注,收藏不迷路💖 在 Java 中,TreeMap、HashMap 和 LinkedHashMap 是三种常用的集合类,它们在…

01 Web基础与HTTP协议

1、域名和DNS 1.1 域名的概念 如果说一个主机,没有名字也可以完全用IP来代替,但是IP地址不好记忆。例如说,我们记一些网站的名称百度、新浪、搜狐等很好记,但是如果要去记百度的IP、新浪的IP、以及搜狐的IP地址,那将会…

LeetCode题练习与总结:排序链表--148

一、题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&am…

iptables与firewalld

iptables Linux上常用的防火墙软件 1、 防火墙的策略 防火墙策略一般分为两种,一种叫通策略,一种叫堵策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身…

leetcode力扣_贪心思想

455.分发饼干(easy-自己想得出来并写好) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺…

无人机便携式侦测干扰设备(定全向)技术详解

无人机便携式侦测干扰设备(定全向)是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式,能够覆盖较宽的频率范围,有效侦测并干扰无人机与遥控器之间的通信信号,从而达到控制或驱离无人机的目的。…

小酌消烦暑|人间正清欢

小暑是二十四节气之第十一个节气。暑,是炎热的意思,小暑为小热,还不十分热。小暑虽不是一年中最炎热的时节,但紧接着就是一年中最热的节气大暑,民间有"小暑大暑,上蒸下煮"之说。中国多地自小暑起…