前面介绍的队列(queue)可以用于传输数据:在任务之间、任务和中断之间。
消息队列用于传输多个数据,但是有时候我们只需要传递状态,这个状态值需要用一个数值表示,比如:
在这种情况下我们只需要维护一个数值,使用信号量效率更高、更节省内存 本章涉及如下内容:
12.1 信号量的特性
12.1.1 信号量的常规操作
信号量这个名字很恰当:
计数型信号量的典型场景是:
二进制信号量跟计数型的唯一差别,就是计数值的最大值被限定为1。
12.1.2 信号量跟队列的对比
差异列表如下:
12.1.3 两种信号量的对比
信号量的计数值都有限制:限定了最大值。如果最大值被限定为1,那么它就是二进制信号量;如果最大值不是1,它就是计数型信号量。
差别列表如下:
12.2 信号量函数
使用信号量时,先创建、然后去添加资源、获得资源。使用句柄来表示一个信号量。
12.2.1 创建
使用信号量之前,要先创建,得到一个句柄;使用信号量时,要使用句柄来表明使用哪个信号量。 对于二进制信号量、计数型信号量,它们的创建函数不一样:
创建二进制信号量的函数原型如下:
创建计数型信号量的函数原型如下:
12.2.2 删除
对于动态创建的信号量,不再需要它们时,可以删除它们以回收内存。
vSemaphoreDelete可以用来删除二进制信号量、计数型信号量,函数原型如下:
12.2.3 give/take
二进制信号量、计数型信号量的give、take操作函数是一样的。这些函数也分为2个版本:给任务使用,给ISR使用。列表如下:
xSemaphoreGive的函数原型如下:
xSemaphoreGive函数的参数与返回值列表如下:
pxHigherPriorityTaskWoken的函数原型如下:
xSemaphoreGiveFromISR函数的参数与返回值列表如下:
xSemaphoreTake的函数原型如下:
xSemaphoreTake函数的参数与返回值列表如下:
xSemaphoreTakeFromISR的函数原型如下:
xSemaphoreTakeFromISR函数的参数与返回值列表如下:
到此这篇环形队列有什么应用场景(环形队列有什么应用场景吗)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/kjbd-yiny/32533.html