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

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.lryc.cn/news/209335.html

相关文章:

  • 企业微信接入芋道SpringBoot项目
  • 群晖上搭建teamspeak3语音服务器
  • Python爬虫(二十四)_selenium案例:执行javascript脚本
  • Devops团队
  • 力扣labuladong——一刷day10
  • https下载图片
  • 二叉树的后续遍历(迭代法)
  • CVE-2021-41773/42013 apache路径穿越漏洞
  • 前端性能测试工具WebPagetest
  • 易语言软件定制软件开发脚本开发协议软件电脑网站APP应用视频制作工程制作
  • Windows上配置IP端口转发
  • 韦东山D1S板子——汇编启动代码第一行分析(.long 0x0300006f)
  • 了解单域名证书和通配符证书的区别,选择合适的SSL证书解决方案
  • 【LeetCode】7. 整数反转
  • 防止请求重复提交:注解+拦截器的实现方案
  • C#使用mysql-connector-net驱动连接mariadb报错
  • SpringBoot 定时任务:@EnableScheduling @Scheduled
  • Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同
  • Python Selenium 之数据驱动测试的实现!
  • 【Proteus仿真】【STM32单片机】智能语音家居陪护机器人
  • C#上位机序列10: 批量读写+点对点更新+数据类型处理
  • MySQL 概述 数据库表操作 数据增删改
  • 存储器概述
  • Fabric.js 使用自定义字体
  • 【C++项目】高并发内存池第七讲性能分析
  • 【JavaScript】快速学习JS
  • 控制输入流,从控制台打印到文件中,更改输出的位置
  • 计算线阵相机 到 拍摄产品之间 摆放距离?(隐含条件:保证图像不变形)
  • 【网络】详解http协议
  • 1819_ChibiOS的互斥信号与条件变量