009、信号量(Semaphore):二进制与计数型

张开发
2026/4/10 20:53:50 15 分钟阅读

分享文章

009、信号量(Semaphore):二进制与计数型
009、信号量(Semaphore):二进制与计数型从一次深夜调试说起上周三凌晨两点,产线测试工站突然报警。设备在连续运行八小时后,偶尔会出现数据包丢失。现场日志显示,当无线模块和传感器同时上报数据时,有个数据队列会意外丢包。打开调试器跟踪,发现问题的核心在于两个任务抢同一个资源,而我们的“标志位”方案在高压下崩了。这就是今天要聊的信号量——FreeRTOS里最常用也最容易被误用的同步机制。信号量到底是什么?信号量本质上是个计数器,用来管理对共享资源的访问。想象一下停车场门口的剩余车位显示屏:车开进去减一,开出来加一。当显示为零时,后面的车就得等着。FreeRTOS里的信号量就是这个原理,只不过它管理的是任务对资源、事件或临界区的访问权。FreeRTOS提供两种信号量:二进制信号量和计数型信号量。很多人刚开始分不清,其实区别很简单。二进制信号量:一次只能一个人用二进制信号量只有两个状态:0(不可用)和1(可用)。它通常用于互斥访问或任务同步。// 创建二进制信号量SemaphoreHandle_t xBinarySemaphore;xBinarySemaphore=

更多文章