FreeRTOS 信号量

信号量是操作系统中重要的一部分,信号量是任务间同步的一种机制,信号量可以用在多 任务访问同一资源时的资源管理。FreeRTOS 提供了多种信号量,按信号量的功能可分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。

使用信号量相关的函数是要在task.c中添加头文件semphr.h

信号量只有队列头部,并没有后面的环形存储区,也就是说信号量只负责消息传递,并不传递数据),当然这么多信号量也是有区别的,不同的信号量对应不同的应用场景,还是以源码分析为主,源码分析透了,这几种信号量的区别,或者特殊机制(互斥量的优先级继承)就一清二楚了。

信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问,其实信号量主要的功能就是实现任务之间的同步与互斥,实现的方式主要就是依靠队列(信号量是特殊的队列)的任务阻塞机制。

既然队列也可以实现同步与互斥那为什么还要信号量?
答:信号量相比队列更节省空间,因为实现同步与互斥不需要传递数据,所以信号量没有队列后面的环形存储区,信号量主要就是依靠计数值uxMessagesWaiting(在队列中表示队列现有消息个数,在信号量中表示有效信号量个数)

  • 同步
  • 这里以串口为例子,一个任务接收数据,一个任务处理数据,则处理数据的任务需要等待传感器去采用数据,则在FreeRTOS系统中等待不能干等着,在该任务等待的过程中,CPU转而可以去执行其他任务,则就可以提高效率,则就是队列的阻塞机制)。
  • 互斥
  • 比如说,抢厕所,厕所只有一个,一个人进去上了,另一个人也要上,则必须等待前人上完厕所才能上,等待的过程就是同步,而保护厕所的过程叫做互斥,则厕所就是所谓临界资源,同一时间只能一个人使用厕所,当然前人上完厕所应该提醒等待的人,厕所用完了可以上了,其中本质也是阻塞机制
  • 参考文章 FreeRTOS-信号量详解_freertos信号量-CSDN博客
相关推荐
海兰3 小时前
【Kafka学习2】Apache Kafka 典型应用场景
学习·kafka·apache
嵌入式阿蔡3 小时前
OTA 实战四:安全启动与固件签名(Secure Boot)—— 拒绝非法固件
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
LCMICRO-133108477463 小时前
国产长芯微LP8628完全P2P替代AD8628,零漂移、单电源、输入输出轨到轨高精度运放
arm开发·嵌入式硬件·fpga开发·硬件工程·精密运放·ad8628
边境悍匪3 小时前
蜗牛学苑 Java 学习 Day23|SpringBoot 思维导图复盘
学习
xx~t4 小时前
嵌入式学习22
数据结构·学习·算法·排序算法
DevHub4 小时前
电视盒子刷 Armbian 教程:30 元旧盒子变 NAS 跑 Docker,200+ 机型可刷
linux·嵌入式硬件·docker·容器·开源·电视盒子
Linux-lucky12 小时前
21-Linux学习之旅之HTTPS和安全加固
linux·运维·学习·ubuntu·https
wuyk55512 小时前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
学运维的Kysan14 小时前
暑假运维学习打卡第二十六天8.17
学习
天空'之城14 小时前
单片机基础核心知识点汇总(五)
单片机·嵌入式硬件