信号量——二值信号量

本文介绍了信号量的概念,重点讲解了二值信号量,包括其简述、创建、获取和释放等函数的使用,并通过一个具体的实验,展示了如何在主程序及串口中断服务函数中应用二值信号量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号量——二值信号量

信号量简介

信号量是操作系统的重要部分,信号量一般用来进行资源管理和任务同步。FreeRTOS中信号量分为二值信号量、互斥信号量、计数信号量和递归互斥信号量,应用场景各不同。

在这里插入图片描述

二值信号量

二值信号量简述

二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常相似,但互斥信号量有优先级,二值信号量没有。因此二值信号量更适合用于同步,而互斥信号量适用于简单的互斥访问。二值信号量就是只有一个队列项的队列,这个特殊队列只有两种情况满的或者空的。

二值信号量函数

二值信号量创建

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

二值信号量获取

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

二值信号量释放

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

二值信号量实验

要求

在这里插入图片描述

程序

主程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "key.h"
#include "beep.h"
#include "string.h"
#include "malloc.h"
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"


//优先级
#define START_TASK_PRIO		1
#define TASK1_TASK_PRIO		2
#define DATAPROCESS_TASK_PRIO 3

//堆栈大小
#define START_STK_SIZE 		256 
#define TASK1_STK_SIZE 		256  
#define DATAPROCESS_STK_SIZE  256  
//句柄
TaskHandle_t StartTask_Handler;
TaskHandle_t Task1Task_Handler;
TaskHandle_t DataProcess_Handler;
//任务函数
void start_task(void *pvParameters);
void task1_task(void *pvParameters);
void DataProcess_task(void *pvParameters);

//二值信号量句柄
SemaphoreHandle_t BinarySemaphore;	

//用于命令解析用的命令值
#define LED1ON	1
#define LED1OFF	2
#define BEEPON	3
#define BEEPOFF	4
#define COMMANDERR	0XFF

//字符串小写转大写
void LowerToCap(u8 *str,u8 len)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值