第十四课 二进制信号量

#include "freertos/semphr.h"

xSemaphoreCreateBinary();
SemphoreHandle_t Handle;//二进制信号量
Handle = xSemaphoreCreateBinary();//创建
xSemaphoreGive(Handle);//释放
在任务中:
xSemaphoreTake(Handle,portMAX_DELAY);

通过二进制信号量可以实现对全局变量的操作,使用二进制信号量,一个任务在操作全部变量时,可以保护这个变量的内存不被其他任务所读取,实现内存保护

第十五课 计数型信号量

count=xSemaphoreGetCount(二进制信号量句柄)//获取信号量的个数
xSemaphoreTake(二进制信号量句柄,timeout);//减少
xSemaphoreGive(二进制信号量句柄,timeout);//增加

Handle=xSemaphoreCreateCounting(最大值,初始值);//创建计数型信号量
xSemaphoreGive(Handle);//释放二进制信号量

第十六课 Mutex互斥量

与二进制信号量相似
互斥量可以使得继承互斥量的任务获得上一任务的优先级
使用xSemaphoreCreateMutex();

第十七课 递归互斥量

内存中的资源在任务调用时是加锁的
xSemaphoreCreateRecursiveMutex();
xSemaphoreTakeRecursive(); //取得锁
xSemaphoreGiveRecursive();//释放锁
递归互斥量是在同一个任务中,重复加锁