1818_ChibiOS的计数信号量

news2024/9/22 15:33:09

         全部学习汇总: 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.coloradmin.cn/o/1144119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口自动化测试 —— JMeter断言基本使用!

断言 断言:就是让程序判断预期结果和实际结果是否一致 注意:请求发起成功了,不代表着一定符合预期的结果。 JMeter中常用断言 响应断言 JSON断言 持续时间断言 响应断言 步骤::线程组——HTTP取样器——断言—…

File相关方法2

一.获取当前目录下所有一级文件名称 1.代码 package org.example;import java.io.File;public class day03 {public static void main(String[] args) {//获取当前目录下所有一级文件名称final File f1 new File("d:/temp");final String[] name f1.list();for (…

【博士每天一篇文献-算法】Gradient Episodic Memory for Continual Learning

阅读时间:2023-10-26 1 介绍 年份:2017 作者:David Lopez-Paz, Marc’Aurelio Ranzato 期刊:Part of Advances in Neural Information Processing Systems 30 (NIPS 2017) 引用量:2044 针对持续学习中灾难性遗忘问题…

怎么在电脑上多屏播放和实时视频输入,ProVideoPlayer 功能介绍

ProVideoPlayer for mac简称pvp2,是一款Mac系统的多屏播放软件,可将视频映射(包括播放和实时视频输入)并实时控制到一个或多个输出端,实现包括实时效果、调度、网络同步和内容管理等多种效果,provideoplaye…

添加IDEA到右键打开里面

打开注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 首先新建IDEA 将第一个值修改为下面这个,这个是右键时候的显示 新建一个字符串,重命名为Icon(一般好像是这个,可能无所谓),然…

leetcode:1154. 一年中的第几天(python3解法)

难度:简单 给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1: 输入:date "2019-01-09" 输出:9 解释:给定日期是2019年的第九天。 示例…

分享一波操作系统、谢希仁版本计算机网络学习笔记【思维导图】

操作系统复习笔记 - 幕布第一章引论第二章处理器管理进程同步与通信https://www.mubu.com/doc/58qrnf20ndg 大纲 - 幕布物理层数据链路层网络层https://www.mubu.com/doc/1eo9_8TyUdg计算机网络-语雀https://www.yuque.com/yuqueyonghu6nc56e/dgg1dl/wx34gx72xpgmt598?singleD…

七人拼团模式:裂变式营销的奥秘,全面解析

在当今的商业市场中,拼团模式已经成为一种备受欢迎的营销策略。其中,七人拼团模式以其独特的玩法和优势,吸引了众多消费者的关注。本文将详细介绍七人拼团模式的玩法、规则、优势亮点以及金额参考,帮助大家更好地了解这种模式。 一…

OS的Alarm定时器调度机制

调度表触发的任务在编译时就被静态定义,任务的触发时间和执行顺序是固定的。这种方式适用于已知的、固定的任务触发模式,例如周期性任务或事件驱动任务。而使用 Alarm 机制触发的任务具有更大的灵活性。Alarm 允许在运行时动态地设置和修改任务的触发时间…

C++:stl中set(multiset)和map(multimap)的介绍和使用

本文主要从概念、常用接口和使用方法方面介绍set(multiset)和map(multimap)。 目录 一、概念介绍 1.关联式容器 2.键值对 3. 树形结构的关联式容器 二、set和multiset 1.set的介绍 2.set使用 1. set模板参数列表 2. set构造 3. set迭代器 4. set容量 5. set修改操…

解决恶意IP地址攻击:保卫网络安全的有效方法

随着互联网的发展,网络安全威胁变得日益复杂,其中包括恶意IP地址攻击。这些攻击通常是网络犯罪分子的手段之一,用于入侵系统、窃取数据或进行其他恶意活动。本文将探讨如何解决恶意IP地址攻击,以保护网络安全。 恶意IP地址攻击是…

气膜建筑的维护有哪些?

合理的使用和维护对保证气膜建筑的使用实名具有重要意义,气膜建筑的膜结构主体,索和索网、基础锚固、门禁系统、送风和自动控制系统以及其他所有的附加设备都必须保持良好的运行状态,这就需要操作和维护人员严格按照生产商提供的使用与维护手…

首次启动现存的QT项目

Build的时候,一定要先设置qmake,再设置make。Build的目录应该设置在整个文件的外面,与项目文件平行,互不干扰。 1、Build的构建目录与源代码目录在同一级; 2、选定Build的构建目录后,Excutable的目录自动分…

400G QSFP-DD SR8光模块应用场景解析

在9月份第24届CIOE展会中,我们可以看到大多数企业已全面推出400G系列光模块。本期文章小易将为大家全面分析易天光通信的400G QSFP-DD SR8光模块。作为一种高速率的光模块,400G QSFP-DD SR8光模块广泛应用于数据中心、云计算、企业级网络等领域&#xff…

【Linux】虚拟机安装Linux、客户端工具及Linux常用命令(详细教程)

目录 一、导言 1、引言 2、使用场景 二、Linux安装 1、安装 2、网络配置 2.1、查看网络配置 2.2、更改网络配置 三、安装客户端工具 1、介绍 2、安装MobaXterm 3、换源 4、拍照功能 四、常用命令 一、导言 1、引言 Linux是一个开源的操作系统内核,它最…

Linux C语言进阶

一、二维数组的定义和存储 一、二维数组的定义 1、二维数组的应用:图、方阵 2、数组元素的存放顺序:内存是一维的,二维数组:按行优先 a[1]:表示第一行,也表示a[1][]的所有元素 二、二维数组的初始化、遍历 1、元素的…

Docker swarm集群之compose启动多服务

Docker swarm集群之compose启动多服务 本篇文章是在搭建过Swarm集群基础上进行的,如未搭建过请移步 : [Docker swarm 集群搭建 - Wanwan’s Blog (wanwancloud.cn)] 环境信息 主机名IP主机配置master10.10.10.32c2gnode0110.10.10.42c2gnode0210.10.…

基于mysql的请假系统,java/springboot/jsp/javaweb/tomcat

系统分为 学生/辅导员/超级管理员 登录注册、修改头像、个人资料。 学生登录可以提交请假申请。 辅导员登录可以管理学生信息、管理班级信息、管理课程信息。 超级管理员登陆可以管理用户信息、管理学生信息、管理辅导员信息、管理班级信息、管理二级学院信息、管理课程信息、…

【python图像处理】模糊图像

模糊前 模糊后 模糊 import os from PIL import Image, ImageFilterfacesPath face # 图片文件夹路径 faces os.listdir(facesPath) for face in faces:facePath os.path.join(facesPath, face)image Image.open(facePath)blurred_image image.filter(ImageFilter.BLU…

【ARMv8 SIMD和浮点指令编程】NEON 存储指令——如何将数据从寄存器存储到内存?

和加载指令一样,NEON 有一系列的存储指令。比如 ST1、ST2、ST3、ST4。 1 ST1 (multiple structures) 从一个、两个、三个或四个寄存器存储多个单元素结构。该指令将元素从一个、两个、三个或四个 SIMD&FP 寄存器存储到内存,无需交错。每个寄存器的每个元素都被存储。 …