• FreeRTOS的学习(五)—— 信号量之计数信号量


    目录

    计数型信号量简介

    创建计数信号量

    1、函数 xSemaphoreCreateCounting() :动态创建 

    2、函数 xSemaphoreCreateCountingStatic():静态创建

    3、计数型信号量创建过程分析 


    计数型信号量简介

            有些资料中也将计数型信号量叫做数值信号量, 二值信号量相当于长度为 1 的队列,那么
    计数型信号量就是长度大于 1 的队列。 同二值信号量一样,用户不需要关心队列中存储了什么
    数据,只需要关心队列是否为空即可。 计数型信号量通常用于如下两个场合:

    1、事件计数
            在这个场合中, 每次事件发生的时候就在事件处理函数中释放信号量(增加信号量的计数
    值),其他任务会获取信号量(信号量计数值减一,信号量值就是队列结构体成员变量
    uxMessagesWaiting)来处理事件。在这种场合中创建的计数型信号量初始计数值为 0。

    2、资源管理

            在这个场合中,信号量值代表当前资源的可用数量,比如停车场当前剩余的停车位数量。
    一个任务要想获得资源的使用权,首先必须获取信号量,信号量获取成功以后信号量值就会减
    一。当信号量值为 0 的时候说明没有资源了。当一个任务使用完资源以后一定要释放信号量,
    释放信号量以后信号量值会加一。在这个场合中创建的计数型信号量初始值应该是资源的数量,
    比如停车场一共有 100 个停车位,那么创建信号量的时候信号量值就应该初始化为 100。

    创建计数信号量

             FreeRTOS 提供了两个计数型信号量创建函数。

    1、函数 xSemaphoreCreateCounting() :动态创建 

             此函数用于创建一个计数型信号量,所需要的内存通过动态内存管理方法分配。此函数本质是一个宏,真正完成信号量创建的是函数 xQueueCreateCountingSemaphore(),此函数原型如
    下:

    2、函数 xSemaphoreCreateCountingStatic():静态创建

            此函数也是用来创建计数型信号量的,使用此函数创建计数型信号量的时候所需要的内存
    需要由用户分配。此函数也是一个宏,真正执行的是函数xQueueCreateCountingSemaphoreStatic(),
    函数原型如下:

    3、计数型信号量创建过程分析 

    注:一定仔细看创建的过程,非常重要,后面还有注释 

            这里只分析动态创建计数型信号量函数 xSemaphoreCreateCounting(),此函数是个宏
     

             可以看出,真正干事的是函数 xQueueCreateCountingSemaphore(),此函数在文件 queue.c 中有如下定义:

            (1)、计数型信号量也是在队列的基础上实现的,所以需要调用函数 xQueueGenericCreate()
    创 建 一 个 队 列 , 队 列 长 度 为 uxMaxCount , 对 列 项 长 度 为
    queueSEMAPHORE_QUEUE_ITEM_LENGTH( 此 宏 为 0) , 队 列 的 类 型 为
    queueQUEUE_TYPE_COUNTING_SEMAPHORE,表示是个计数型信号量。
            (2)、队列结构体的成员变量 uxMessagesWaiting 用于计数型信号量的计数,根据计数型信
    号量的初始值来设置 uxMessagesWaiting。
     

  • 相关阅读:
    灵性图书馆:好书推荐-《王阳明全集》
    Spring Beans 官方文档翻译笔记
    Unix环境高级编程--8-进程控制---8.1-8.2进程标识-8.3fork函数-8.4 vfork函数
    竞赛 深度学习OCR中文识别 - opencv python
    好用的截图软件Snipaste2.7.3
    【Plus】五、常用注解
    Happens-Before规则详解
    网易游戏学院系列——书籍《游戏设计》【笔记】
    『python爬虫』xpath变化导致无法找到指定元素(持续更新中~)
    嵌入式图形开发框架Qt——强力助推袖珍型医疗超声扫描仪发展
  • 原文地址:https://blog.csdn.net/m0_58832575/article/details/126903649