上位机图像处理和嵌入式模块部署(树莓派4b和mcu的分工与配合)

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

        树莓派4b从广义上来说,它本身就是一个mini小电脑。我们需要什么软件,就可以apt install去下载即可。这和之前嵌入式linux开发方式有很大的不同。因为很早之前的嵌入式linux开发,都是自己从uboot、device tree、kernel、rootfs一步一步编译而来的,甚至于需要什么第三方软件,还要自己去编译、开发。mcu则不同,对于mcu而言,基本上不存在复杂的第三方软件,一般都是个人包圆了,甚至于个人硬件、软件一条龙去实现,也不是不可能。所以这里,我们从树莓派4b的角度看,两者应该怎么配合。

1、通信方式

        要说通信,最主要的通信方式还是232。本着越简单、越稳定的原则,如果对数据量本身没有太大的需求,那么还是用232这种方式进行通信比较稳妥。当然,通信方式只是第一步,通信后面的协议定义也是非常重要的。这里假定mcu也是我们自己开发的,所以协议通信这部分不是什么难点。

2、升级方式

        树莓派4b升级是比较容易的,因为它上面是上位机,上位机和它之间可以通过网络相连。但是mcu不一样,一般来说,树莓派和mcu之间只有串口通信的部分。所以,如果想要对mcu升级,首先是把firmware下载到树莓派上面,然后通过树莓派给mcu升级固件。

        当然这个时候,树莓派一般会对mcu发起一个重启的命令。mcu启动过程中,在确认需要update固件之后,就会进入升级状态,一步一步下载固件,最后重新启动最新的固件代码。当然现在很多的mcu也支持蓝牙,通过蓝牙下载也不是不可以,不过总觉得没有232放心。

3、功能交互

        树莓派上层对mcu的功能访问主要体现在这三个地方。第一个是固件升级,刚才已经讨论过。第二个是状态确认,如果固件有什么问题,那么需要通过树莓派的网络,及时向上report出来,毕竟大部分mcu不会自带网络的。第三个就是控制命令的下发,复杂的算法一般都是树莓派上计算好的,mcu拿到这个结果之后直接做对应的动作就可以了。如果mcu内部也有对应的算法,比如pid、mpc、lqr等等,最好直接通过串口和pc相连,然后进行标定和测试,这个时候就不要借助于树莓派转手一下了。

4、功能划分

        树莓派偏重于网络通信和算法计算,而mcu偏重于运动控制和结果执行。两者的定位是不一样的,两者之间无法相互取代的。像slam、camera图像、ai、视频编解码、3d、丰富网络协议、复杂图形界面,这些mcu干不了;实时运动控制,树莓派也做不了,除非它其他什么也不干。真的不需要算法计算的话,直接上位机连接mcu就好了,自然就不需要树莓派了。因此在前期验证和调试的时候,两者可以分开来开发。等到最终作为产品调试的时候,再merge到一起,这是比较合适的处理办法。

        像树莓派这种板子,自身就是linux系统,上面的软件代码任务会比较重一点,有可能会牵涉到不同的部门和开发人员。而mcu相对而言,功能单一,软件和硬件有可能都是同一个人开发的。所以这个时候,大家只要明确彼此之间的功能接口,就算人员很多,开发起来一般问题不大。

5、把接口的划分落实到文档上面

        树莓派的软件一般比较多,开发人员也就比较多;mcu的软件相对较少,所以开发人员也比较少。但真正树莓派接口层,和mcu的接口层,对接的内容未必有那么多。但是哪怕东西再少,也要转成一个标准的文档。只有变成专业的文档,大家才能对协议、接口、参数、流程等彼此之间需要协同的东西了然于心,而不是你做你的,我做我的。

其他:

        事实上除了mcu之外,有的时候soc还会和fpga进行协作。当然,通信的方式一般就是spi、232这样居多,zynq之类的fpga+soc组合体另当别论。一些对采样、控制和实时性有要求的场合,用fpga还是非常方便的。

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

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

相关文章

8G显存玩转AI换衣IDM-VTON(支持MAC、WIN)

最近AI换衣项目IDM-VTON挺火哈,我也火速体验了一把。效果也是很不错,相对OOTDiffusion的换衣效果提升了不少。 那部署的时候遇到比较大的问题是高显存占用!太吃配置了!24G的显卡占用了18G左右。于是花了点时间改成 使用了低精度模…

Python图形界面(GUI)Tkinter笔记(二):标签Label的基本应用

Label()方法用于在根窗口(根窗口可以想象成一个容器,一个画布,一个电路板;而标签Label()等等这些方法也叫控件或元件或组件,它们可以想象成装进容器的物品,或是想象成画在画布上的图形,或是想象成焊接在电路板上的电子元件)内建立“文字”或“图像”标签。 其余笔记:…

Wireshark Lua插件开发实战:应对TCP粘包问题

0. 概述 Wireshark提供了tcp_dissect_pdus()函数,可以帮助用户处理TCP粘包问题 1. 粘包问题的基本原理 TCP粘包问题本质上是数据包拼接和拆分的问题。当多个应用层数据包被封装成同一个TCP段时,就发生了粘包现象。在解析时,我们需要将粘在…

【linux kernel】杂项(misc)设备驱动总结

文章目录 一、杂项设备简介二、杂项设备API1、注册杂项设备2、注销杂项设备3、杂项设备模块助手函数 三、杂项设备初始化四、杂项设备示例五、杂项设备和字符设备 👉相关文件: drivers/char/misc.cinclude/linux/miscdevice.h 一、杂项设备简介 Linux …

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.5 更复杂的神经网络

目录 示例填写第三层的层数1.问题2.答案 公式:计算任意层的激活值激活函数 示例 层数有4层,不包括输入层。 填写第三层的层数 1.问题 你能把第二个神经元的上标和下标填写出来吗? 2.答案 根据公式g(wxb),这里的x对应的是上…

Nacos支持哪些集群部署模式?

Nacos集群部署模式详解 在微服务架构中,服务注册与发现、配置管理以及服务治理是确保系统稳定、高效运行的关键环节。Nacos作为阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,为微服务架构提供了强大的支持。 一、Na…

pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步

pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步 单文件转换多文件转换 代码:https://github.com/coolwanglu/pdf2htmlEX 拉取pdf2htmlEX 的 Docker: docker pull bwits/pdf2htmlex # 拉取 bwits/pdf2htmlex不用进入容器&…

mysql oceanbase数据库alter语句阻塞,解决方案

获取当前阻塞事件 select d.trx_started, a.thread_id, b.processlist_id, a.SQL_text from performance_schema.events_statements_current ajoin performance_schema.threads b on a.thread_id b.thread_idjoin information_schema.processlist c on b.processlist_id c.i…

最稳定的VPS有哪些?2024年稳定服务器推荐

最稳定的VPS有:DigitalOcean、萤光云、Vultr、Linode、AWS。 VPS的硬件质量、网络稳定性、数据中心设施、数据中心位置等都是评估VPS好坏的重要条件,接下来为一起来看看5个2024年稳定服务器厂商,大家可以自己对比一下。 2024年稳定服务器推荐…

【Vue3】setup通过defineProps获取props为null

我做的功能是父组件往子组件传值 父组件&#xff1a; <MapComponent :zbx"zbx" :zby"zby" /> 子组件&#xff1a; setup(props) {// 定义接收到的 propsconst propsObj defineProps({zbx: Number,zby: Number});console.log(propsObj) // null …

MySql表的增删查改(CRUD)

对表中的数据操作分为4大类&#xff0c;增加数据&#xff0c;删除数据&#xff0c;查找数据&#xff0c;修改数据。对表中的数据进行增删查改操作简称为CRUD。Create(增),Retrieve(查找),Updata(修改&#xff09;,Delete(删除)CRUD的操作是对表中的数据进行操作的&#xff0c;是…

【Ajax零基础教程】-----第三课 FastJson

一、Fastjson 是什么 Fastjson 是阿里巴巴的开源jSON解析库&#xff0c;它可以解析JSON格式的字符串&#xff0c;支持将javaBean序列化为JSON字符串&#xff0c;也可以从jSON字符串反序列化到javaBean。 二、Fastjson使用场景 Fastjson已经被广泛使用在各种场景&#xff0c;包…

【随笔】Git 高级篇 -- 上传命令的参数 (下)git push(三十七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

探索Java 18:未来技术趋势与革新之路

Java&#xff0c;作为一门历史悠久而又历久弥新的编程语言&#xff0c;始终站在技术发展的前沿&#xff0c;引领着软件开发的潮流。随着Java 18的发布&#xff0c;我们再次见证了这门语言的自我迭代与革新。本文将深入探讨Java 18带来的新特性、技术趋势&#xff0c;以及它如何…

Java反射机制的实战应用:探索其魅力与局限

引言 Java作为一种面向对象的编程语言&#xff0c;其灵活性和强大的功能使其成为众多开发者的首选。而Java反射机制作为Java语言中的一项重要特性&#xff0c;为程序员提供了一种在运行时检查和操作类、方法、属性等信息的能力。本文旨在深入探讨Java反射机制的实战应用&#…

单节锂电池充电芯片H4054无需外接检测电阻500mA电流7V输入

锂电池充电芯片的主要功能如下&#xff1a; 充电管理功能&#xff1a;充电芯片能够对锂电池进行智能化管理&#xff0c;根据电池的状态和需求&#xff0c;调节充电电流和电压&#xff0c;以实现快速充电、恒流充电、恒压充电等不同的充电模式。通过合理控制充电过程&#xff0…

想要在 Python 中格式化输出字符串,看这一篇就够了(方法大全)

目录&#xff1a; 使用百分号&#xff08;%&#xff09;格式化字符串使用 format()格式化字符串使用 f-string 格式化字符串使用 string.Template 格式化字符串使用 center() 格式化字符串Python 字符串格式化方法的比较 在本文中介绍不同的方法进行字符串格式化输出。包括百分…

为什么C++11还要复杂的提出右值引用?

C11引入右值引用&#xff08;使用 && 声明&#xff09;是为了解决C98中无法直接表达某些对象为“临时的”或“可移动的”这一限制&#xff0c;以及提高程序性能。右值引用的引入使得移动语义&#xff08;Move Semantics&#xff09;和完美转发&#xff08;Perfect Forw…

Excel 查找值的位置后再用位置取值Excel处理

例题描述 Excel 文件中有下图所示的 3 个片区数据 (不同颜色标明)。 现在要算出1-12对应的一列数据&#xff0c;计算规则&#xff1a;在片区3中依次查找1-12&#xff0c;找到后在片区1对应位置取数&#xff0c;如果是0则取片区2同位置的数&#xff0c;如果是1则取F当前查找数。…

算法训练Day48 | ● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()1, vector<int>(word2.size()1,0));for(int i1; i<word1.size(); i){for(int j1; j<word2.size(); j){if(word…