上位机图像处理和嵌入式模块部署(树莓派4b利用驱动实现进程数据共享)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们讨论过,目前在linux系统上面有很多办法可以实现多进程数据共享。这里面比如说管道,比如说共享内存,比如说网络等等。但是这几种方法,总觉得使用不是很方便。管道的话,需要了解对应api;共享内存,则需要了解boost库;而网络编程,一般都需要找一个比较靠谱一点的网络库。思来想去,完全可以通过驱动的方法,实现进程间通信。

1、设计一个字符设备的驱动

        我们都知道,linux下面有三种设备,分别是字符设备、块设备和网络设备。因为我们驱动设置的目的,主要就是为了共享内存使用的,所以这里选用最简单的字符设备就可以了。

sudo insmod share_memory.ko

2、驱动代替了消息分发的功能

        如果有了这个带消息分发功能的驱动,其实就没有必要存在消息分发的应用程序了。因为驱动本身就替我们完成了这样一个工作。驱动启动之后呢,就等着各个模块注册。每个模块自己需要哪些信息,会发送哪些信息,这部分都是可以自定义的。

3、模块收发两条线

        每个模块注册的时候,都要给两个内存,一个是发的memory,一个是收的memory。驱动收到对应的消息之后,会把这个消息转发给对应的模块。因此,每一个模块还要有一个收的memory,这个memory主要是用来接收从别的模块那里传递过来的消息。

4、需要一个分析和debug驱动的应用程序

        一开始的时候,肯定需要一个应用程序来分析一下驱动程序的功能和性能。比如,某个模块收不到消息,某个模块发不出去消息等等,都需要这个应用程序来看下。还有就是性能,理论上说速度是非常快的,但是这里面难免会出现代码bug的情况,所以有一个能调试的应用程序本身,还是非常有必要的。

5、各子程序安全推出阻塞函数

        既然是程序读写,就不可避免地遇到驱动的阻塞函数。这个时候如果强行kill的时候,一定要对现场进行清理和恢复工作。这样下次程序重新加载的时候,还能正常运行使用,不会遇到其他意想不到的问题。

6、辅助sdk的帮助

        除了上面的驱动代码之外,还需要一些辅助代码的帮助,这些主要体现在消息的接受上面,因为发送不会遇到这样的问题。假设我们消息接收的时候,希望有一些特定的函数去处理它,这个时候用户一般注册一个bind函数就好了。但是后台处理的时候,一般还需要sdk做一些额外的工作,比如说消息的bind,比如说函数的查找,再比如是不是需要多线程一起处理等等。这些工作对于使用的同学来说不一定是可见的,所以还需要sdk来进行相应的处理工作。

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

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

相关文章

anaconda的安装和Jupyter Notebook修改默认路径

anaconda的安装 就一个注意事项:在结尾时候记得配置系统环境变量 要是没有配置这个环境变量,后面就不能cmd启动Jupyter Notebook Jupyter Notebook修改默认路径 我们要找到Jupyter Notebook的配置文件 输入下面指令 jupyter notebook --generate-config就可以找到存放配置文…

去中心化自治组织(DAO)

文章目录 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 二、举例说明 1、例子1 2、例子2 总结 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 DAO是一种基于区块链平台上的组织结构,它通过智能合约来实现组织的…

lt Redis变慢的原因及排查解决方法

前言 Redis 作为优秀的内存数据库,其拥有非常高的性能,单个实例的 OPS 能够达到 10W 左右(5-10W)。但也正因此如此,当我们在使用 Redis 时,如果发现操作延迟变大的情况,就会与我们的预期不符。 你也许或多或少地&…

刚刚!MySQL8.4.0 LTS发布,接着再探

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

【Sentaurus TCAD仿真】学习2

Swb工具栏View简介 Swb 全称 Sentaurus Work Bench Flow Orientation 指得是 Tools 的方向。 Customize Current View 为自定义当前视图。去掉前面的勾,再Apply可以隐藏该变量。 Swb主页字体调整 多节点并行仿真

可平滑替代FTP的FTP替代解决方案,具有哪些强大功能?

FTP是一种广泛使用的文件传输协议,主要用于在网络上的计算机之间传输文件。具有以下特点: 1.简单易用:FTP协议相对简单,易于设置和使用,许多操作系统和应用程序都内置了对FTP的支持。 2.广泛的客户端支持&#xff1a…

机器学习 | 准确率、召回率、精准率、特异度傻傻分不清?ROC曲线怎么看?一篇文章帮你搞定

一、真正类、假负类、假正类与真负类 二、准确率、召回率、精准率、特异度与假正率 1. 准确率 (Accuracy) 准确率表明成功预测(预测为负或为正)的结果占总样本的百分比。 准确率 , 2. 召回率/查全率/灵敏度/真正率(Recall&a…

OpenTK:安装和说明

OpenTK介绍 OpenTK是一个开源、跨平台的游戏开发库,由MonoGame团队创建。它为C#开发者提供了一个简单易用的接口,以便使用OpenGL、OpenAL和OpenCL进行3D渲染、音频处理和并行计算。OpenTK的目标是提供一个一致且高效的框架,让开发者能够专注于…

联想小新PRO16 ARM-7换固态硬盘和装双系统win11和ubuntu2022.04

联想小新PRO16 ARM-7换固态硬盘和装双系统win11和ubuntu2022.04 前言 记录一下其中的好几个坑。耗时4天,新旧硬盘拆拆卸卸的不止二十次。希望能给各位一点帮助。 步骤 1. 买硬盘 查看电脑后壳的S\N号,在联想官网上查找自己电脑的相关信息:…

【无标题】场外个股期权多少钱才能做?个人能做吗?

场外个股期权的交易门槛相对较高,主要面向符合特定条件的机构投资者。一般来说,法人或合伙企业等组织参与的,需要满足最近1年末净资产不低于5000万元人民币、金融资产不低于2000万元人民币的条件,并具备3年以上证券、基金、期货、…

@mixins混用样式:示例:修改el-select里面的滚动条样式

项目场景: 使用混入样式修改el-select下拉菜单里面的滚动条样式 解决方案: // 混入-滚动条样式 mixin scroll-css {&::-webkit-scrollbar-track-piece {background: red;}&::-webkit-scrollbar {width: 6px;}&::-webkit-scrollbar-thumb {b…

供应链投毒预警:恶意Py包伪装HTTP组件开展CStealer窃密后门攻击

概述 近日(2024年4月25号),悬镜供应链安全情报中心在Pypi官方仓库(https://pypi.org/)中捕获1起CStealer窃密后门投毒事件,投毒者连续发布6个不同版本的恶意Py包multiplerequests,目标针对windo…

一种基于YOLOv8改进的高精度红外小目标检测算法 (原创自研)

💡💡💡本文摘要:一种基于YOLOv8改进的高精度小目标检测算法, 在红外小目标检测任务中实现暴力涨点; 💡💡💡创新点: 1)SPD-Conv特别是在处理低分…

Spring中实现策略模式的几种方式

Spring中实现策略模式的几种方式 一.背景 在写业务代码的时候,难免会遇到很多if-else,这个时候如果if-else不是很多可以用if-else。如果此时场景过多,太多的if-else会导致代码比较臃肿,所以这个时候就需要抽象化,将每…

Git分支策略与工作流

Git分支策略与工作流 - GitFlow工作流介绍 GitFlow工作流是一种在软件开发中广泛使用的Git分支策略和工作流。它在2010年由Vincent Driessen提出,并在开源社区中广泛接受和采用。 GitFlow工作流使用两个主要分支——master和develop。master分支用于发布稳定的版…

WebGL开发框架对比

WebGL开发框架提供了一套丰富的工具和API,使得在Web浏览器中创建和操作3D图形变得更加容易。以下是一些流行的WebGL开发框架及其各自的优缺点,选择哪个框架取决于项目的具体需求、团队的技术背景以及对特定特性的偏好。例如,如果你需要一个强…

04.17_111期_C++_继承多态_虚表

如果想实现不同的类的对象调用不同的虚函数 可以通过 协变 这种形式 在父类Person中的虚函数的返回值 的数据类型是一个 父类(任意一个父类σ就行) 在子类Student中的虚函数的返回值 的数据类型是一个 继承了σ的子类 class Student : public …

Maven基础使用

第一章> 1、配置阿里云 2、搭建私服 **************************************************************************************************************************************************************************** 1、Maven仓库指向阿里云 #(1&…

公文写作笔记

标题 最后一行的日期,后边占4个格子。两个数字占一格。落款单位在日期的正上方。 格式积累 内容: ①开头:缘由 ②主题:对策(别人做得好,就借鉴) ③结尾:简单的总结(字…

Qt :浅谈在大型项目中使用信号管理器

一、引言 在大型的Qt项目中,我们往往涉及到很多不同类型的对象之间通信交互,这时候,仍旧采用小项目使用的哪里使用,哪里关联的方法,在复杂的场景下将是无穷无尽的折磨。 下面我们给出一种苦难的场景。 class A: public QObject {Q_OBJECT public:A(QObject *parent = nu…