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

news2025/1/12 8:59:26

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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.coloradmin.cn/o/1635668.html

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

相关文章

Electron开发 umi react 应用

Electron 是一个跨平台桌面端的应用框架,electron 底层依赖3 个核心组件 Chromium、Node.js、Electron API,Chromium 是 Chrome 的开源版本,Node.js可以编写后台应用程序,集成 Node.js 到 Electron,使得 Electron 可以…

21.哀家要长脑子了!

1.21. 合并两个有序链表 - 力扣(LeetCode) 我做过啊,为什么还是不能独立做出来,为什么为什么啊啊啊 嘻嘻奔向五一 是这样的: 要按升序连接,以链表2头结点作为开端,哪个小就先连接哪个&#xff…

75、堆-前K个高频元素

思路 这道题还是使用优先队列,是要大根堆,然后创建一个类,成员变量值和次数。大根堆基于次数排序。前k个就拿出前k的类的值即可。代码如下: class Solution {public int[] topKFrequent(int[] nums, int k) {if (nums null || …

半导体机台文件导出,如何实现统一管理减轻运维压力?

半导体机台在半导体制造过程中会产生多种数据,这些数据对于设备的运行、监控、优化和故障诊断等方面都具有重要意义。以下是半导体机台可能产生的一些主要数据类型: 工艺控制数据:这包括在制造过程中的各个工艺步骤(如光刻、蚀刻、…

垃圾中转站远程监控运维管理系统解决方案

在城市环卫体系中,垃圾中转站作为连接居民区与末端处理设施的关键节点,其高效稳定运行对于保障城市环境清洁、推动垃圾分类与资源化利用具有重要意义。然而,传统的管理模式往往存在实时监控不足、运维效率低下等问题。 一、设计理念 1. 实时…

【派兹互连·SailWind】美国瞄准“小华为”

有“小华为”之称的海能达遭遇了来自美国方面的压力。 近日,海能达紧急发公告称,公司收到美国法院的判令,临时被禁止在全球范围内销售双向无线电技术的产品,并处以每天100万美元的罚款,直至公司完全遵守禁诉令之时止。…

Go Web开发【xorm 框架】

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射,并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

C语言:选择结构

选择结构 1.if 语句1.1.if1.2.if-else1.3.if的嵌套举例示例结果分析 举例示例结果 2.switch语句举例示例结果分析 C语言中的选择结构用于根据特定条件执行不同的代码段。选择结构是C语言编程中实现程序逻辑流程控制的基础,它们能够使程序根据不同的输入或条件执行不…

《霍格沃茨之遗》找不到emp.dll如何修复?分享5种亲测有效的方法

在我们享受电脑游戏带来的乐趣时,偶尔会遇到一些技术上问题,具体来说,当你启动一款游戏,系统却弹出一个提示“由于找不到emp.dll文件,因此无法继续执行代码”,这样的情况确实让人感到扫兴。这究竟是什么原因…

【五一特惠活动】FME视频教程限时回馈大优惠

目录 一、FME视频教程五一限定套餐 二、购买方式 为感谢各位粉丝的持续支持,让大家学好用好FME,轻松工作、少加班,特推出FME视频教程五一限定套餐,套餐包括FME入门视频教程、FME进阶视频教程、FME案例实战教程,总共三…

Objenesis 底层探究

Objenesis 简介 Objenesis 是一个 Java 库,用于在不调用构造方法的情况下创建对象。由于绕过了构造方法,所以无法调用构造方法中的初始化逻辑。相应的,Objenesis 无法创建抽象类、枚举、接口的实例对象。 起源 与其称之为起源,…

特斯拉与百度合作;字节正全力追赶AI业务;小红书内测自研大模型

特斯拉中国版 FSD 或与百度合作 根据彭博社的报道,特斯拉将通过于百度公司达成地图和导航协议,扫清在中国推出 FSD 功能的关键障碍。 此前,中国汽车工业协会、国家计算机网络应急技术处理协调中心发布《关于汽车数据处理 4 项安全要求检测情…

ThingsBoard PE专业版解决方案技术文档——温度湿度

1、项目总览 2、设备接入 3、设备告警 3.1 高温告警 创建一个Flag作为标杆,作为开启告警的开关。 3.2 低湿度告警

【STM32】快速使用F407通用定时器输出可变PWM

网上的文章太啰嗦,这里直接开始。 使用的是STM32CubeIDE,HAL。以通用定时器TIM12在 通道2上输出1KHz的PWM为例。 要确定输出的引脚、定时器连接在哪里。 TIM2、3、4、5、12、13、14在APB1上,最大计数频率84M。 TIM1、8、9、10、11在APB2…

【Unity动画系统】动画状态转换详解

动画状态转换 此空处可以改换新转换名字。 表示有多个转换,播放顺序不可调整。 Solo:表示只执行它们,其他没勾选的不考虑;都勾选了,哪个转换条件先满足,就先执行哪个转换;如果同时满足,那就按顺序执行。 M…

【笔试训练】day15

1.平方数 水题直接看代码 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<math.h> #include<algorithm> using namespace std; typedef long long ll; int main() {ll x;cin >> x;ll a sqrt(x);if (abs(a * a -…

新冠轻症康复者病毒仍在复制 新冠抗病毒药先诺欣和乐睿灵怎么选?

近日,国家疾控局发布的通知显示,当前我国新冠疫情持续保持低水平波浪式流行态势,但新冠病毒仍在变异,疫情仍存在一定的反复性。“五一”假期人员流动性上升和聚集性活动增加,可能加大疫情传播风险,防控任务艰巨复杂。 新冠病毒该怎么防?感染新冠后又当如何用药?对新冠病毒的…

C语言指针和数组的一些笔试题

文章目录 前言一、一维数组二、字符数组-1三、字符数组-2总结 前言 C语言指针和数组的一些笔试题 一、一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n…

LLM之RAG理论(十一)| 面向生产的RAG应用程序的12种调整策略指南

本文对文本RAG涉及到的主要12种关键“超参数”进行简单总结&#xff0c;主要包括摄取阶段&#xff08;数据清洗、数据分块、embedding模型选择、元数据过滤、多重索引和索引算法&#xff09;和推理阶段【检索和生成】&#xff08;查询转换、检索参数、高级检索策略、重排序、大…

Java中优雅实现泛型类型的强制转换

在Java中经常遇到将对象强制转换成泛型类的情况&#xff1a; Map<String, Object> data Map.of("name", "XiaoMing","age", 17,"scores", List.of(80, 90, 70) );List<Integer> scores (List<Integer>) data.get…