信号量用来进行资源管理和任务同步
信号量分为 二值信号量,计数型信号量,互斥信号量,递归互斥信号量
二值信号量通常用于互斥访问或同步。二值信号量和互斥信号量非常类似
互斥信号量拥有优先级继承机制。二值信号量没有优先级继承、
因此二值信号更适合用于同步,二互斥信号量适用于简单的互斥访问。
信号量和队列一样,他的API 函数允许设置一个阻塞时间。阻塞时间是当任务获取信号量的时候由于信号量无效而导致任务进入阻塞态的最大时钟节拍数。
二值信号量其实就是一个队列项的队列,这个队列要么是空,要么是满。任务和中断使用这个特许队列时并不在意队列中存的是什么消息,值需要知道这个队列时空的还是满的。
中断服务函数发送信号量可以使用函数xSemaphoreGiveFromISR(),也可以使用任务通知功能来替代二值信号量。
创建二值信号量函数:
vSemaphoreCreateBinary() 老版本
xSemaphoreCreateBinary() 新版本
xSemaphoreCreateBinaryStatic()
释放信号量(不管二信号量,计数信号量,互斥信号量都用这个函数)
xSemaphoreGive()
xSemaphoreGiveFromISR()
获取信号量(不管二信号量,计数信号量,互斥信号量都用这个函数)
xSemaphoreTake()
xSemaphoreTakeFromISR()