信号量——二值信号量
信号量简介
信号量是操作系统的重要部分,信号量一般用来进行资源管理和任务同步。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)