12.STM32freeRTOS---递归互斥信号量

2023-05-16

文章目录

  • 前言
  • 一、创建递归互斥信号量
  • 二、释放递归互斥信号量
  • 三、获取递归互斥信号量
  • 四、官方例程
  • 总结


前言

递归互斥信号量可以看成是一个特殊的互斥信号量。对于互斥信号量,获取了互斥信号量的任务就不能再次获取这个互斥信号量,但是递归互斥信号量不一样,就算已经获取了递归互斥信号量的任务可以再次获取这个递归互斥信号量,并且不限次数。一个任务使用xSemaphoreTakeRecursive()成功的获取了多少次递归信号量,那么这个任务也必须释放多少次递归信号量。

注意:递归互斥信号量也有优先级继承的机制,所以不能用于中断服务函数中。原因同互斥信号量一致。

这里简单总结一下 二值信号量 ,互斥信号量,递归互斥信号量的区别。
二值信号量:就当作 0 1 来处理。会发生优先级反转。
互斥信号量:本质还是二值信号量,具有优先级继承功能(把占有二值信号量的低优先级任务的优先级拉高),能解决优先级反转的发生。
递归互斥信号量:互斥信号量的升级版。在互斥信号量有的功能外,还加一点:获取过 递归互斥信号量的任务 能多次获取递归互斥信号量,前提是得释放。

要使用递归互斥信号量,宏configUSE_RECURSIVE_MUTEXES必须为1、


一、创建递归互斥信号量

在这里插入图片描述

二、释放递归互斥信号量

同互斥信号量一样,递归互斥信号量的获取和释放要放到同一个任务中完成。如果当前任务不是递归互斥信号量的拥有者就不能释放。

三、获取递归互斥信号量

xSemaphoreTakeRecursive()

四、官方例程

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


总结

二值信号量:就当作 0 1 来处理。会发生优先级反转。

互斥信号量:本质还是二值信号量,具有优先级继承功能(把占有二值信号量的低优先级任务的优先级拉高),能解决优先级反转的发生。但是任务不能多次获取互斥信号量。

递归互斥信号量:互斥信号量的升级版。在互斥信号量有的功能外,还加一点:获取过 递归互斥信号量的任务 能多次获取递归互斥信号量,前提是得释放。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

12.STM32freeRTOS---递归互斥信号量 的相关文章

  • linux源码安装python3

    python3源码安装 前置环境解压提前解决依赖性源码编译三部曲验证安装 前置环境 先要准备好源码包 xff0c 去官网下载自己想要的版本https www python org ftp python 我下的是3 9 7的直接下到了要安装p
  • 【shell】用 grep 查找包含字符串的文件|grep 过滤|取匹配行的前后n行

    目录 即可即用 grep 匹配多个关键字 与find的不同 grep检索文件内容详解 grep指定搜索的文件类型 grep 不起作用 xff1f 过滤了还是显示 匹配特定的列 指定在哪些文件 哪类文件 哪个目录里搜索 搜索时包含 排除哪类文
  • 基于FreeRTOS+STM32实践-01

    目的 xff1a 复习FreeRTOS以及STM32的使用 xff0c 完成51单片机到stm32的过渡 该项目会与传感器以及其他种类的外设相联系 xff0c 以提升代码管理能力和逻辑能力 在51单片机中我们使用了很多传感器和外设 xff0
  • C++点亮stm32LED灯

    目的 xff1a 引导初学者使用C 43 43 对STM32进行编程 1 xff1a 在C语言中我们没有封装 继承 多态的概念 xff0c 没有面向对象的程序思想 这些思想一般是源于C 43 43 语言的 xff0c C语言是面向过程的语言
  • 基于FreeRTOS+STM32实践-02

    按键学习 按键常见的为独立按键和行列按键 stm32中不存在Bit类型数据 而在51内核中存在bit类型的 按键引脚分配 开发板自带3个独立按键 xff1a KEY0 PC5 KEY1 PA15 WK UP PA0 行列键盘引脚分配 xff
  • 基于FreeRTOS+STM32实践-03

    03 xff1a 按键的扫描 资源 xff1a 软件定时器 43 信号量 43 消息队列 在51单片机中的按键扫描是 xff1a 标志位在10ms定时器1的中断中置一 xff0c 在while 1 中写一个如下的按键扫描程序 xff0c 目
  • 【正点原子】手把手教你学FreeRTOS-01

    内容为 xff1a 正点原子FreeRTOS的视频前1 8 目的 xff1a 简单的回忆一下 xff0c 加深印象和理解 单片机的发展趋势 操作系统的核心就是 任务调度器 xff0c 关于这些特点 xff0c 也是我们学习FreeRTOS的
  • 【正点原子】手把手教你学FreeRTOS-02

    内容为 xff1a 正点原子FreeRTOS的视频第9 10节 一个任务所需要的资源这些东西在标准库需要我们自己写 xff0c 但是在MX软件中可以自己生成 四项基本 xff1a 优先级 堆栈大小 句柄 任务函数声明 一个XXX任务需要的资
  • 【正点原子】手把手教你学FreeRTOS-03

    基本内容 xff1a 任务的创建 控制块 删除 挂起 恢复的使用 创建任务函数的核心 栈的增长方向为向下的则portSTACK GROWTH gt 0 而我们stm32使用的就是向下因此执行这个 xff0c 下面的就是向上不执行 核心函数p
  • 【正点原子】手把手教你学FreeRTOS-04

    FreeRTOS的中断配置是一个很重要的内容 xff0c 需要根据所使用的MCU来具体配置 重点 xff1a 不同的MCU所在FreeRTOS的配置是不一样的 xff0c 当你使用了其他芯片 xff0c 配置就有所不同了 xff0c 不要固
  • 千锋教育+计算机四级网络-计算机网络学习-01

    目录 课程链接 最早的广域网 计算机网络发展阶段 计算机网络的定义与要点 英文单词网络术语与解释 计算机网络分类 广域网技术 城域网 局域网 个人局域网 五种基本的网络拓扑结构 误码率 电路交换网特点 分组交换 交换方式 TCP IP协议族
  • Keil + STM32学习嵌入式数据结构-01

    视频链接 初识数据结构 xff0c 十天搞定嵌入式数据结构 哔哩哔哩 bilibili 课程目的 学会嵌入式经常使用的数据结构 具备基础知识 具有C语言基础 xff08 结构体 指针 内存 xff08 malloc xff09 具有数据结构
  • 【网络】nmcli 网络管理工具|ip命令|ethtool 命令|centOS 8 重启网络服务 / 重启网卡

    目录 nmcli 命令 前提 重启网络服务 重启网卡 实例 nmcli输出说明 3种网络配置方法 nmcli的命令参数 Tips ethtool 命令 IP命令 添加网卡到配置文件 Linux系统怎么查看网卡的UUID nmcli 命令 原
  • 正点原子【第四期】手把手教你学 Linux之驱动开发篇-01

    学习目的 了解驱动开发和应用开发的过程 xff0c 具有一定的基础就行 第一讲 xff1a linux驱动开发与裸机开发区别 刚开始听不懂很正常 xff0c 等之后学了一点你就会知道它说啥了 第二讲 xff1a 字符设备驱动开发基础 字符设
  • 普中科技手把手教你学ESP32--基于MicroPython-02

    第四讲 xff1a LED灯实验 MicroPython函数使用 本来需要加入machine 的 xff0c 但是我引入了form machine import Pin就可以直接省略了 machine是一个模块 xff0c Pin是mach
  • 千锋教育嵌入式物联网教程之系统编程篇学习-05

    目录 无名管道 无名管道创建 pipe 管道重点问题 无名管道读写规律 fcntl设置文件阻塞特性 文件描述符概述 文件描述符的复制 dup和dup2 dup函数 dup2 无名管道 进程间的通信 xff0c 大部分都是使用内核空间进行操作
  • 黑马程序员-Linux系统编程-01

    课程链接 01 Linux命令基础习惯 Linux系统编程 哔哩哔哩 bilibili 课程重点笔记 01 linux命令基础习惯 终端 终端 xff1a 一切输入 输出的总称 xff0c 因此终端并不是一定指的是命令行 xff0c 只要是
  • RT-Thread初识学习-04-GPIO操作

    前言 xff1a 在裸机开发和FreeRTOS开发过程中 xff0c 我们使用的GPIO操作函数都是由stm32库函数提供 xff0c 如GPIO SetBits GPIO Init GPIO结构体对端口进行初始化 模式 速度 管脚号等操作

随机推荐