Freertos学习笔记(五)二进制信号量 计数型信号量 Mutex互斥量 递归互斥量
第十四课 二进制信号量
#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();//释放锁
递归互斥量是在同一个任务中,重复加锁
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。