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.mzph.cn/news/121622.shtml

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

相关文章

ChIP实验简介

ChIP实验简介 一、ChIP实验的作用 染色质免疫沉淀(ChIP)是研究体内蛋白质-DNA相互作用的一种有价值的方法,鉴定各种DNA相互作用蛋白(如转录因子和调节因子、修饰组蛋白和表观遗传修饰因子)的结合位点和模式是必不可少的。来自组织或培养细胞的交联(XChIP)或天然(NC…

由于找不到emp.dll无法继续执行此代码问题的五个解决方法

在玩游戏的过程中,我们常常会遇到一些错误提示,其中最常见的就是“找不到emp.dll”,这个问题我们的游戏无法启动运行。本文将分享我在解决这一问题过程中的方法,希望能对遇到类似问题的玩家有所帮助。 emp.dll是一个动态链接库文件…

python实现ModBusTCP协议的server

python实现ModBusTCP协议的server是一件简单的事情,只要通过pymodbus、pyModbusTCP等模块都可以实现,本文采用pymodbus。 相关文章见: python实现ModBusTCP协议的client-CSDN博客 一、了解pymodbus的Server 1、pymodbus.server的模块 pym…

【JAVA学习笔记】48 - 八大常用Wrapper类(包装类)

一、包装类 1.针对八种基本定义相应的引用类型一包装类 2.有了类的特点,就可以调用类中的方法。 黄色背景的表示父类是Number 二、包装类和基本数据的转换 演示包装类和基本数据类型的相互转换,这里以int和Integer演示。 1.jdk5前的手动装箱和拆箱方…

逆向第一课---安装ADB工具,并使用夜神模拟器连接

1、安装ADB 如果安装了Android SDK可以直接去android_sdk/platform-tools/目录下使用ADB命令。 如果没有安装Android SDK,需要先通过下面的地址下载ADB https://adbdownload.com/ 根据自己的系统点击下载,我这里使用Windows系统,所以下载Wi…

国产CAN总线收发芯片DP1042 兼容替换TJA1042

说明 1 简述 DP1042是一款应用于 CAN 协议控制器和物理总线之间的接口芯片,可应用于卡车、公交、小汽车、工业控制等领域,支持 5Mbps CAN FD 灵活数据速率,具有在总线与 CAN 协议控制器之间进行差分信号传输的能力,完全兼容“ISO…

安装clang

安装clang: scanscan-virtual-machine:~$ clang -v Ubuntu clang version 14.0.0-1ubuntu1.1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Selected GCC installatio…

【pytorch】torch.gather()函数

dim0时 index[ [x1,x2,x2],[y1,y2,y2],[z1,z2,z3] ]如果dim0 填入方式为: index[ [(x1,0),(x2,1),(x3,2)][(y1,0),(y2,1),(y3,2)][(z1,0),(z2,1),(z3,2)] ]input [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12] ] # shape(3,4) input torch.…

Spring Security —漏洞防护—跨站请求伪造(CSRF)

在终端用户可以 登录 的应用程序中,必须考虑如何防止 跨站请求伪造(CSRF)。 Spring Security 默认为 不安全的HTTP方法(如POST请求)提供CSRF攻击防护,因此无需额外代码。你可以使用下面的方法明确指定默认…

【Html】交通灯问题

效果 实现方式 计时器:setTimeout或setInterval来计时。setInterval和 setTimeout 在某些情况下可能会出现计时不准确的情况。这通常是由于JavaScript的事件循环机制和其他代码执行所需的时间造成的。 问询:通过getCurrentLight将每个状态的持续时间设置…

【纯离线】Ubuntu离线安装ntp时间同步服务

Ubuntu离线安装ntp服务 准备阶段:下载安装包 apt-get download ntp apt-get download ntpdate 一、服务端( 192.166.6.xx) 1、环境准备 先判断是否已安装 systemd-timesyncd systemctl is-active systemd-timesyncd 如果返回结果是 active,则表示…

ES 8 新特性

1. async 和 await async 和 await 两种语法结合可以让异步代码像同步代码一样。(即:看起来是同步的,实质上是异步的。) 先从字面意思理解,async 意为异步,可以用于声明一个函数前,该函数是异步的。await 意为等待,即等待一个异步方法完成。 1.1 async async 声明(…

spring boot利用redis作为缓存

一、缓存介绍 在 Spring Boot 中,可以使用 Spring Cache abstraction 来实现缓存功能。Spring Cache abstraction 是 Spring 框架提供的一个抽象层,它对底层缓存实现(如 Redis、Ehcache、Caffeine 等)进行了封装,使得在…

如何在VScode中让printf输出中文

如何在VScode中让printf输出中文? 1、在“Visual Studio Code”图标上右击,弹出对话框。见下图: 2、点击“以管理员身份运行”,得到下图: 3、点击“UTF-8”按钮,得到下图: 4、点击“通过编码重…

Docker创建mysql容器

1.递归创建目录,若上级目录不存在,会按目录层级自动创建目录 mkdir -p创建宿主机挂载文件夹 mkdir -p /data/docker/mysql/{conf,data,logs}/ 2.拉取mysql镜像 docker pull mysql:8.0 3.创建容器 docker run -itd --restartalways --name mysql8.…

电脑提示找不到msvcp140.dll无法继续执行代码的4种解决办法

今天我想和大家分享的是关于找不到msvcp140.dll无法继续执行代码的4种解决办法。在我们日常的教学和工作中,有时候会遇到这样的问题,让我们感到困惑和无奈。那么,msvcp140.dll究竟是什么?为什么会丢失呢?接下来&#x…

[hive] 窗口函数 ROW_NUMBER()

文章目录 ROW_NUMBER() 示例窗口函数 ROW_NUMBER() 在 Hive SQL 中,ROW_NUMBER()是一个用于生成行号的窗口函数。 它可以为查询结果集中的每一行分配一个唯一的行号。 以下是 ROW_NUMBER() 函数的基本语法: ROW_NUMBER() OVER (PARTITION BY column…

matlab simulink PMSM永磁电机DTC控制

1、内容简介 略 10-可以交流、咨询、答疑 2、内容说明 PMSM永磁电机DTC控制 PMSM、永磁电机、DTC控制 传 是 ,它的工作原理是:首先设定好运行期望值和滞环的容差值,然后把电机 到的差值 号输出,可以 示需要减小 大输出…

MySQL数据库备份实战

一、为什么进行数据库备份? 保证业务连续性:数据库中存储着企业的核心业务数据,如果数据丢失或损坏,将会对企业的业务运营产生重大影响。通过定期备份数据库,可以在系统故障或数据丢失时快速恢复数据,保证业务的连续性。 保护数据资产:数据库中存储着企业的重要数据资产…

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

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