1827_ChibiOS中OSLIB的邮箱机制

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

1. 邮箱其实是一个环形队列;

2. 使用场景上,邮箱主要是用来实现异步单向的一些消息或者数据处理的。在处理机制上,支持多对多的机制。

3. 与同步信号消息相比,传递消息的范围没有限制,不再是0,-1与-2这三个,可以支持更多。

1. 邮箱会结合buffer来用,而buffer也是环形的buffer,如果空间用满了之后继续请求使用会导致线程的等待。

2. 使用的过程中,由于又像是单向的,一般会有两个线程分别等待彼此的邮箱读写操作。

3. 如果邮箱进行了reset,那么在进行resume之前,任何操作都会失败,返回已经复位的消息提示。

这里的API分为发和收两部分。

         接下来的这个例子,我不在进行文档标注,直接来通过代码来做一个标注分析。

         最初的这一部分定义,我把叫做buffer的变量加了一个mailbox后缀,这样后面看代码的时候能够更好理解这些信息代表的含义。

         这部分是例程中的一个中断,中断负责的主要工作其实还是获取通信的数据以及状态。在这里的设计示范说明中,如果通过ISR发现了错误,那么会对填充邮箱进行复位。如果是收到了消息,那么会先把消息填充到对应的buffer中,这个buffer就是软件自己控制的不分了。之后,把这部分buffer的信息绑定到释放buffer信息的邮箱之中。绑定的方式就是发送一个邮箱消息。

         这是一个通过邮箱消息获取信号处理网络信息的一个设计模板。在这里面,先从填充邮箱中获取信息,如果检查到了邮箱RESET,那么需要进行错误处理。如果检查到有正常的信号,那么处理接收到的数据。处理完之后,说明现在的邮箱对应的buffer释放了一个。因此,给free buffer邮箱发送一个消息用以表征有新的资源可用了。

         这一部分,主要还是邮箱对象以及线程的初始化或者创建。比较常规的一些操作。

         以上就是邮箱的基本机制以及使用情况,看起来比较适合实现由小数据组合起来的长数据报文。后续的设计中,也可以尝试使用一下看看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/263687.html

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

相关文章

MyBatis 四大核心组件之 StatementHandler 源码解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

Java中的IO流②——字符集、字符流、缓冲流

主要的编码规范: GBK编码 Windows自带 Unicode编码 为什么会有乱码? 原因一 原因二 编码和解码的代码实现 字符流 FileReader read()细节: 一:默认也是一个字节一个字节的读取,如果遇到中文就会一次读取多个 二&a…

FastAPI请求体-多个参数

路径参数、查询参数,和请求体混合 首先,我们需要导入所需的库。我们将使用FastAPI、Path和Annotated来处理路由和参数,并使用BaseModel和Union来自定义数据模型。 完整示例代码 from typing import Annotated, Unionfrom fastapi import F…

【开源】基于JAVA语言的数字化社区网格管理系统

项目编号: S 042 ,文末获取源码。 \color{red}{项目编号:S042,文末获取源码。} 项目编号:S042,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5…

【工具】JS|浏览器脚本6分钟极速入门 · 开发一个限制自己刷b站的脚本

这张图花里胡哨的是让AI生成的,我觉得怪可爱的,就直接作为封面了。 这篇文章中会开发一个JS脚本,这是一个用来限制b站网页版功能的脚本,避免刷b站的时间过长。功能如下: 除了搜索、视频页、私信页之外的任何页都会被重…

[每周一更]-(第76期):Go源码阅读与分析的方式

读源码可以深层理解Go的编写方式,理解作者们的思维方式;也有助于对Go语法用法深刻的理解,我们从这一篇说一下如何读源码,从哪些源码着手,从 简单到深入的方式学习源码; 学习源码也是一个修炼过程&#xff0…

windows下 Tomcat启动黑框隐藏

进入到 tomcat/bin 目录下,找到此文件 setclasspath.bat ,右键文本打开 找到此属性 : set _RUNJAVA"%JRE_HOME%\bin\java.exe"修改成以下属性,保存文件,重启启动tomcat会发现黑框不默认弹出了: …

@德人合科技 | 数据透明加密防泄密系统\文件文档加密\设计图纸加密|源代码加密防泄密软件系统,——防止内部办公终端核心文件数据/资料外泄!

一款专业的数据防泄密管理系统,它采用了多种加密模式,包括透明加密、半透明加密和落地加密等,可以有效地保护企业的核心数据安全。 PC端访问地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee …

C++设计模式——Adapter(适配器)模式

一、Adapter模式是个啥? 适配器模式在软件开发的江湖里,可以说用途是非常广的。下面几个经典的场景来说明适配器模式的使用。 场景一 场景二 假如你正在开发一款股票市场监测程序, 它会从不同来源下载 XML 格式的股票数据, 然后…

[香橙派]orange pi zero 3 烧录Ubuntu系统镜像——无需HDMI数据线安装

一、前言 本文我们将介绍如何使用orange pi zero 3 安装Ubuntu系统,本文相关步骤均参考自开发手册。 二、实施准备 根据开发手册中所提到的,我们应该拥有如下配件: 1.orange pi zero 3 开发板 2.TF 卡——最小 8GB 容量的 class10 级或以上的高速闪迪卡。…

uniApp项目的创建,运行到小程序

一、项目创建 1. 打开 HBuilder X 2. 右击侧边栏点击新建,选择项目 3. 填写项目名,点击创建即可 注:uniapp中如果使用生命周期钩子函数,建议使用哪种 ?(建议使用Vue的) 二、运行 1. 运行前先登录 2. 登录后点击 manifest.js…

【数据结构 — 排序 — 选择排序】

数据结构 — 排序 — 选择排序 一.选择排序1.基本思想2.直接选择排序2.1算法讲解2.2.代码实现2.2.1.函数定义2.2.2.算法接口实现2.2.3.测试代码实现2.2.4.测试展示 3.堆排序3.1.算法讲解3.2.代码实现3.2.1.函数定义3.2.2.算法接口实现3.2.3.测试代码实现3.2.4.测试展示 一.选择…