FreeRTOS 信号量

 

目录

 

一、信号量的概念

二、二值信号量

1、二值信号量的定义

2、二值信号量的作用

3、二值信号量的操作

4、二值信号量操作实验

5、二值信号量会导致优先级翻转问题

三、互斥信号量

1、互斥信号量的引入

2、注意:互斥信号量不能用于中断服务函数中!!!

3、互斥信号量的操作

四、计数型信号量

1、创建计数型信号量

2、释放和获取计数型信号量

3、计数型信号量操作实验

五、递归互斥信号量


一、信号量的概念

1、信号量(semaphore)可以实现任务与任务任务与中断间的同步功能(二值信号量)、资源管理(计数信号量)、临界资源的互斥访问(互斥信号量)等。

2、信号量是一个非负数,二值信号量与互斥信号量取值范围为0-1,计数信号量取值范围是0-N(N>1):

(1)0:信号量为空,所有试图获取它的任务都将处于阻塞状态,直到超时退 出或其他任务释放信号量;

(2)正数:表示有一个或多个信号量供获取;

二、二值信号量

1、二值信号量的定义

(1)当信号量被获取了,信号量值变为0;当信号量被释放了,信号量值变为1。把这种取值只有0与1两种状态的信号量称之为二值信号量。创建二值信号量时,系统会为创建的二值信号量分配内存。

(2)二值信号量是一种长度为1,消息大小为0的特殊消息队列。因为这个队列只有空或满两种状态,而且消息大小为0,因此在运用时,只需要知道队列中是否有消息即可,而无需关注消息是什么。

2、二值信号量的作用

任务与任务 或 任务与中断间同步

3、二值信号量的操作

(1)创建二值信号量函数

(2)释放信号量函数

(3)获取信号量函数

4、二值信号量操作实验

(1)初始化处创建二值信号量

(2)在串口中断处理函数USART1_IRQHandler() 释放二值信号量

(3)在任务处获取二值信号量

5、二值信号量会导致优先级翻转问题

(1)优先级翻转现象:

        当一个低优先级任务和一个高优先级任务同时使用同一个信号量,而系统中还有其他中等优先级任务时。 如果低优先级任务获得了信号量,那么高优先级的任务就会处于等待状态,但是,中等优先级的任务可以打断低优先级任务而先于高优先级任务运行(此时高优先级的任务在等待信号量,所以不能运行),这是就出现了优先级翻转的现象

三、互斥信号量

1、互斥信号量的引入

(1)作用:解决优先级翻转问题。

        互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。因此二值信号另更适合用于同步(任务与任务或任务与中断的同步),而互斥信号量适合用于简单的互斥访问。

(2)优先级继承

         当一个互斥信号量正在被一个低优先级的任务使用,而此时有个高优先级的任务也尝试获取这个互斥信号量的话就会被阻塞。不过这个高优先级的任务会将低优先级任务的优先级提升到与自己相同的优先级,这个过程就是优先级继承。优先级继承尽可能的降低了高优先级任务处于阻塞态的时间,并且将已经出现的“优先级翻转”的影响降到最低。

2、注意:互斥信号量不能用于中断服务函数中!!!

原因如下:

(1)互斥信号量有优先级继承的机制,所以只能用在任务中,不能用于中断服务函数。

(2)中断服务函数中不能因为要等待互斥信号量而设置阻塞时间进入阻塞态。

3、互斥信号量的操作

(1)互斥信号量的创建

(2)释放互斥信号量

(3)获取互斥信号量

四、计数型信号量

计数型信号量就是长度大于1的队列。

1、创建计数型信号量

2、释放和获取计数型信号量

计数型信号量的释放和获取与二值信号量相同

3、计数型信号量操作实验

(1)初始化处创建计数型信号量

(2)在任务处释放计数型信号量

(3)在任务处获取计数型信号量

五、递归互斥信号量

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

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

相关文章

【STM32】STM32学习笔记-独立看门狗和窗口看门狗(47)

00. 目录 文章目录 00. 目录01. WDG概述02. 独立看门狗相关API2.1 IWDG_WriteAccessCmd2.2 IWDG_SetPrescaler2.3 IWDG_SetReload2.4 IWDG_ReloadCounter2.5 IWDG_Enable2.6 IWDG_GetFlagStatus2.7 RCC_GetFlagStatus 03. 独立看门狗接线图04. 独立看门狗程序示例105. 独立看门…

宝塔FTP服务设置并结合cpolar内网穿透实现远程传输文件

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能,用于设置和管理FTP服务。通过宝塔FTP,用户可以创建FTP账号,配置FTP用户权限…

高级语言期末2011级B卷(计算机学院)

1.编写函数&#xff0c;实现按照如下公式计算的功能&#xff0c;其中n为自然数 #include <stdio.h>int fac(int n) {if(n0)return 1;elsereturn n*fac(n-1); }float fun(int n) {float flag;float sum0;for(int i0; i<n; i) {flagi/((i1)*fac(i2));sumflag;}return su…

无法调试MFC源码

VS无法调试MFC源码 起初 有时候就是这么无奈&#xff0c;MFC源码各种问题没有办法调试&#xff0c;可是又想看下代码如何调用&#xff0c;里面做了些什么&#xff0c;从哪儿调出&#xff0c;学习一下大神的思路什么的。整理一下有可能的原因。 检查生成代码设置 需要设置正…

Anroid开发过程中常见的异常及解决方法

本文总结了在android开发中一些常见的错误及异常&#xff0c;特此分享&#xff01; The import android cannot be resolved 错误 将android源码通过eclipse的import功能导入的话&#xff0c;如果出现了“The import android cannot be resolved”错误。不用着急&#xff0c;…

petalinux烧写image.ub报错

xinlinx SDK烧写petalinux生成的BOOT.BIN和image.ub时&#xff0c;BOOT.BIN烧写正常&#xff0c;image.ub烧写报错如下 Erase Operation failed. INFO: [Xicom 50-44] Elapsed time 0 sec.ERROR: Flash Operation Failed串口助手操作擦除flash如图&#xff1a; 解决方法&am…

jenkins插件下载失败bug

如果遇到安装jenkins插件经常失败并报以下类似错误&#xff0c;很可能是因为jenkins国外官方插件地址下载速度非常慢&#xff0c;我们可以修改为国内插件地址。 java.io.IOException: Failed to load: SCM API Plugin (scm-api 676.v886669a_199a_a_) - Jenkins (2.361.4) or h…

linux操作docker

docker地址 官方地址 centos7安装docker 卸载旧版本docker sudo //在前面表示以管理员权限操作yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine安装docker //安装所需资…

每天十条linux知识点-24-0226(1)

文章目录 1.在哪下载linux内核源码&#xff1f;2.linux文件夹都有哪些文件&#xff1f;arch&#xff1a;包含和硬件体系结构相关的代码&#xff0c;每种平台占一个相应的目录&#xff0c;如i386、arm、arm64、powerpc、mips等。block&#xff1a;块设备驱动程序I/O调度。certs&…

07-Linux部署Nginx

Linux部署Nginx 简介 NGINX是一款高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它的特点包括占用内存少、并发能力强&#xff0c;因此在处理高负载和高并发的场景时表现优秀。NGINX由俄罗斯的程序设计师Igor Sysoev开发&#xff0c;最初是为俄…

面向对象编程入门:掌握C++类的基础(2/3):深入理解C++中的类成员函数

在C编程中&#xff0c;类是构建程序的基石&#xff0c;而理解类的默认成员函数对于高效使用C至关重要。本文将深入探讨这六个默认成员函数及其他相关概念&#xff0c;提供给读者一个全面的视角。 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为…

如何在Win系统从零开始搭建Z-blog网站,并将本地博客发布到公网可访问

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…