当前位置: 首页 > article >正文

1818_ChibiOS的计数信号量

         全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)

         之前见过计数信号量,也是在FreeRTOS中看到的。也看到过这样的功能在驱动设计中的应用,但是当时没有理解这个使用的方式。

1. 计数信号量可能有3种数值,如果数值为负数,那么代表有N个线程在等待信号;如果是0那么代表信号全都被取走了但是没有线程等待信号;如果是正数,那么代表信号可以被线程取N次。

2. 配置选项中,可以选择是否使用这个功能,也可以配置这个信号的获取是按照优先级还是FIFO的方式来获取。

相比基本的计数信号量,ChibiOS提供的技术信号量还做了一些增强。包括:支持复位成指定的数值;超时处理;消息返回;信号的操作以及等待处理做成了原子化的操作。

         这里举例说明了技术信号量的应用场景,典型的例子是DMA通道的分配。其实,类似的处理,CAN的邮箱buffer也是一个很典型的例子。

         ChibiOS的很多接口处理的对象都是线程而不是数据本身。这里的wait操作其实是让线程等待指定的信号。如果超时没等到,这里有一个报错的处理。如果等到了,则调用资源的分配接口提供对应的资源分配结果。

         当申请的资源用完了之后,可以通过释放信号的方式归还硬件资源。这个归还会触发一个信号的发生操作,以此提示等待或者即将等待的线程有资源可用。

         这是软件最初的初始化设计,初始化对应的信号。其实是创建了一个DMA资源与信号的绑定关系。其中,信号的初始值代表有多少资源可用。初始化的时候,DMA还没有被分配占用,因此这里的数目为DMA的通道数目。

         之前我看到的类似的处理是基于FreeRTOS的一个CAN发送buffer资源的分配。那时候也没有弄明白这样设计的理念,而且那时候一在调试的过程中也遇到不少问题。现在想来,大概率还是OS的功能没有正常初始化就已经使用了这样的信息导致。或许,回头重新调试一下这样的问题就很容易调试通过了。


http://www.kler.cn/a/107238.html

相关文章:

  • C#发票识别、发票查验接口集成、电子发票(航空运输电子行程单)
  • Fastapi使用MongoDB作为数据库
  • 知识图谱6:neo4j查询语句
  • 并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】
  • 大数据技术之HBase中的HRegion
  • 2024.11.12_大数据的诞生以及解决的问题
  • Jenkins CLI二次开发工具类
  • CANOE 仿真+测试
  • 高可用系统架构——关于语雀宕机的思考
  • 使用es实现轻量级分布式锁
  • 【python学习笔记——列表】
  • 【@EnableWebMvc的原理】
  • 【广州华锐互动】城市水处理VR仿真实训平台
  • 计算线阵相机 到 拍摄产品之间 摆放距离?(隐含条件:保证图像不变形)
  • C#开发的OpenRA游戏之金钱系统(6)
  • Java New对象分配内存流程
  • 【网络】详解http协议
  • Clion 初始化 QT
  • 怎么在电脑上多屏播放和实时视频输入,ProVideoPlayer 功能介绍
  • Linux权限及Xshell运行原理
  • AQS 为什么要使用双向链表?
  • win10下Mariadb绿色版安装步骤
  • 第二章前端开发ES6基础
  • matlab simulink 直线一级倒立摆控制(自起摆和稳态控制)
  • Java中split方法简介
  • gitlab简单搭建教程