(文章目录) 前言 本篇文章将为大家讲解信号量,源码分析。 在 FreeRTOS 中,信号量的实现基于队列。这种设计的思想是利用队列的特性来实现信号量,因为信号量可以被视为只能存储 0 或 1 个元素的特殊队列。 在 FreeRTOS 中,二进制信号量(Binary Semaphore)通常由一个队列和一个计数器组成。 计数信号量允许计数器的值大于 1,它通常用于管理多个相同资源的可用性。计数信号量的值表示可用资源的数量,多个任务可以同时获取不同数量的资源。当任务获取资源时,计数器减少,当任务释放资源时,计数器增加。 一.创建信号量 创建二进制信号量 xBinarySemaphore = xSemaphoreCreateBinary(); 创建信号量源码分析: 创建信号量时本质上还是使用到了xQueueGenericCreate队列相关的函数 信号量不能用来进行数据的传输,所以在创建信号量时Itemsize被设置为了0。 将pucQueueStorage指针指向队列的存储区域位置。 初始化队列: 根据uxItemSize是否为0调整pcHead的指向。...