基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(四)|| 同步 / 互斥 / 通信方法简介

本文概念部分粘贴自韦东山老师同步与互斥。
韦东山老师《FreeRTOS入门与工程实践(基于DshanMCU-103)》书籍获取

同步&互斥概念

一句话理解同步与互斥:我等你用完厕所,我再用厕所。
什么叫同步?就是:哎哎哎,我正在用厕所,你等会。
什么叫互斥?就是:哎哎哎,我正在用厕所,你不能进来。
同一时间只能有一个人使用的资源,被称为临界资源。

实现互斥操作的局限性方法

全局变量or静态变量 局限性

裸机程序,可以使用一个全局变量或静态变量实现互斥操作,比如要互斥地使用
LCD,可以使用如下代码:

int LCD_PrintString(int x, int y, char str)
{static int bCanUse = 1;if (bCanUse){bCanUse = 0;/ 使用LCD */bCanUse = 1;return 0;}return -1;}

这个代码在裸机程序中运行没有问题,但在FreeRTOS中运行可能会有问题
在裸机程序中,只有一个任务在运行,所以当你设置 bCanUse 变量时,没有其他任务会改变它的值。但在FreeRTOS中,有多个任务可能会并发运行,这会导致并发访问和修改 bCanUse 变量,造成竞态条件(Race Condition)。

使用中断 局限性

使用全局变量or静态变量的方法不能保证万无一失的原因在于:在判断过程中,被打断了。如果能保证这个过程不被打断,就可以了:通过关闭中断来实现。
在if判断前,使用disable_irq()关闭中断,判断结束后再使用enable_irq()打开中断。

但这样做也是有缺陷的,如图:
在这里插入图片描述

FreeRTOS的解决方法:正确 & 高效

互斥 -----实现—> 通信的正确性
阻塞唤醒 -----实现—> 提高效率

能实现同步、互斥的内核方法有:

  • 任务通知(task notification)
  • 队列(queue)
  • 事件组(event group)
  • 信号量(semaphoe)
  • 互斥量(mutex)

它们都有类似的操作方法:获取/释放、阻塞/唤醒、超时。
在这里插入图片描述
方法的具体对比:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中进程通信之信号

信号 信号通信,其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。 关于信号指令的查看:kill -l 例如我们之前使用的kill -9 pid用于杀死一个进程 使用一个死循环 成功发送kill -9指令&#x…

键盘输入数据的过程

当我们在键盘中按下按键的时候,键盘会向我们的 CPU 发送硬件中断(也就是给 CPU 特定的针脚发送信号),该硬件中断有着自己的中断号,然后 CPU 内的寄存器就会记录下该中断号,然后会在操作系统中的中断向量表&…

DNTRo

文章目录 AbstractMethodExperimentConclusioninnovation link code Abstract 本文旨在解决计算机视觉领域中微小物体检测的问题。由于图像数据中微小物体所占像素比例很小,因此精确地检测这些物体仍然是一个巨大的挑战。特别是在地理科学和遥感领域,高…

18现代循环神经网络—seq2seq与束搜索

1.序列到序列学习(seq2seq) 上图展示的是 DNA 转录,它也是一种序列到序列的学习机器翻译 seq2seq 最早是用来做机器翻译的,给定一个源句子,自动翻译成目标语言给定一个源语言的句子,自动翻译成目标语言机器翻译中的输入序列和输出序列都是长度可变的seq2seq seq2seq 指的…

AI+生命科学方向第一课【Datawhale AI夏令营】

[我是大佬的搬运工] 01 赛题背景解析 http://competition.sais.com.cn/competitionDetail/532230/format 翻译一下: mRNA:疾病基因 siRNA:药物基因 RNAi:药物基因作用于疾病基因的机制 我们要完成的任务:预测某类…

力扣高频SQL 50题(基础版)第二十六题

文章目录 力扣高频SQL 50题(基础版)第二十六题1667.修复表中的名字题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题(基础版)第二十六题 1667.修复表中的名字 题目说明 表: Users ----------------…

货拉拉论文入选亚太消费者研究会议及亚太营销国际学术会议

近日,亚太消费者研究会议(AP-ACR)召开。本次会议上,货拉拉和香港中文大学合作就论文《Why Showing Multiple Options Simultaneously Makes Customers Less Picky》(《为什么同步显示多个选项会使消费者变得更不挑剔》)进行主题报告。此前,本篇论文也曾在第二届亚太营销国际学术…

【Docomo】优质 4G

https://www.docomo.ne.jp/area/premium_4g/?icidCRP_AREA_technology_to_CRP_AREA_premium_4g 优质 4G 移动通信速度超过千兆字节LTE加速的主要基础技术256QAM44 MIMO(麦莫) 移动通信速度超过千兆字节 从 2020 年 3 月起将提供高达 1.7Gbps 的接收速度…

IoTDB 入门教程 实战篇⑤——Python示例(开源)

文章目录 一、前文二、新建Python项目三、安装依赖四、示例源码五、参考 一、前文 IoTDB入门教程——导读 本文详细阐述了如何通过一个Python项目成功连接到IoTDB时序数据库,进而展示了如何向该数据库高效地写入数据以及执行精确的数据查询操作。 此示例旨在为读者提…

云计算实训16——关于web,http协议,https协议,apache,nginx的学习与认知

一、web基本概念和常识 1.Web Web 服务是动态的、可交互的、跨平台的和图形化的为⽤户提供的⼀种在互联⽹上浏览信息的服务。 2.web服务器(web server) 也称HTTP服务器(HTTP server),主要有 Nginx、Apache、Tomcat 等。…

程序员学长 | 快速学会一个算法,ANN

本文来源公众号“程序员学长”,仅用于学术分享,侵权删,干货满满。 原文链接:快速学会一个算法,ANN 今天给大家分享一个强大的算法模型,ANN。 人工神经网络 (ANN) 是一种深度学习方法,源自人类…

5种IO模型简述

文章目录 前言什么是IO模型?阻塞IO非阻塞IO多路复用IO信号驱动IO异步IO 结语 前言 最近学netty,当然无法避免IO模型这部分知识。 我尽量用最简洁的语言来讲清楚这个东西。 什么是IO模型? 既然最近学netty,就拿它来举例子。 比如…

计算机网络必会面经

1.键入网址到网页显示,期间发生了什么 2.在TCP/IP网络模型中。TCP将数据进行分段后,为什么还需要IP层继续分片 3.详细说明tcp三次握手,为什么是三次,若每次握手丢了,解决办法是什么 4.详细说明tcp四次挥手&#xff…

【JS|第22期】深入理解跨域

日期:2024年7月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xff…

esp-idf-v5.1.1所有官方例程讲解(esp32、esp32-C2、esp32-S3)之 a2dp_sink 详解

目录 1. 获取ESP-IDF和示例代码 2. 导航到示例代码 3. 示例代码结构 4. 关键文件解析 main.c 初始化和配置: bt_app_core.c 和 bt_app_core.h bt_app_av.c 和 bt_app_av.h A2DP事件处理: AVRCP事件处理: bt_app_sink.c 和 bt_app_sink.h 5. 编译和烧录 6. 测试…

新一代打工人用什么电脑桌面提醒的备忘录比较好?

在这个为了生活而起早贪黑的时代,新一代的打工人每天都需要处理大量的工作和信息。为了提高工作效率,选择一款合适的电脑桌面备忘录工具显得尤为重要。那么,什么样的备忘录工具才是最适合我们的呢? 首先,我们需要的是…

【研发日记】Matlab/Simulink技能解锁(十一)——Stateflow中的en、du、ex应用对比

文章目录 前言 项目背景 en类型 du类型 ex类型 组合类型 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simul…

机械拆装-基于Unity-本地数据持久化

目录 1. 数据结构简介:数据的集合 1.1 线性数据结构 1.2 非线性数据结构 2. 对数据集合的操作: 3. 数据持久化 3.1 数据的序列化存储 3.2 JSON文件硬盘存储 3.2.1 Json文件允许存储的数据类型 3.2.2 Json文件的语法格式 3.2.3 Json文件的读取 3.2.4 …

【C#】ThreadPool的使用

1.Thread的使用 Thread的使用参考:【C#】Thread的使用 2.ThreadPool的使用 .NET Framework 和 .NET Core 提供了 System.Threading.ThreadPool 类来帮助开发者以一种高效的方式管理线程。ThreadPool 是一个线程池,它能够根据需要动态地分配和回收线程…

yolov8pose 部署rknn(rk3588)、部署地平线Horizon、部署TensorRT,部署工程难度小、模型推理速度快,DFL放后处理中

特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。 模型和完整仿真测试代码,放在github上参考链接 模型和代码。 之前写了yolov8、yolov8seg、yolov8obb 的 DFL 放在模型中和放在后处理…