当前位置: 首页 > article >正文

上位机图像处理和嵌入式模块部署(软硬结合才是嵌入式的精髓)

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

        关于嵌入式,有很多的说法。有的认为stm32 mcu那种才是嵌入式;有的认为嵌入式linux也是嵌入式;也有的同学认为,嵌入式无非就是把pc的东西移植到嵌入式板子而已。这些想法,对,其实也不对。现在的很多linux板子,确实很多代码的确都是从pc电脑移植而来。但是如果仅仅是移植,而不做优化,其实是不合算的。

1、算法不能仅仅依靠cpu

        很多的算法,如果是运行在pc电脑上,问题不大。一方面,pc上面的cpu频率够、算力强;另外pc电脑一般连接着外部电源,没有省电的需求,所以算法跑在pc上面一点问题没有。但是如果算法port到嵌入式板子之后,还是靠cpu来运行的话,可能需要非常好的cpu才行,频率也要足够块。但是好的cpu往往价格不便宜,这是很大的一个限制条件。

2、低功耗要求我们cpu不能太快

        嵌入式很多设备是便携式设备,比如mp3、dv之类的设备。既然如此,那么上面的电池电量就是一定的。这就要求我们开发的时候有必要做好省电处理。大家比较了解的手机,其实就是这么处理的。玩游戏的时候,运行的cpu可能性能比较强;但是如果是平时一般操作,接接电话、发发微信,运行的cpu就会自动切入到低频的cpu来处理。

3、硬件加速是必选项

        很多的应用如果靠cpu运行,很多时候即使靠cpu,也是没有办法做到实时输出的。比如说某些需要定时输出的算法,例如定位、运动控制、图像处理等等。硬件加速具有天然的优势,这个时候如果可能把soc上面的硬件加速用起来,让cpu仅仅是负责控制功能,这还是非常方便的。

        有的同学也许会说,如果没有这样的IP怎么办?答案就是自己写一个,无论是外挂的fpga,还是内嵌fpga的zynq,都是不错的选择。

4、成本控制要求我们必须软硬结合

        前面说过,好的cpu往往都比较贵。如果我们又想性能好,又不想太贵,这个时候只能想尽办法把soc上面的资源都用起来。不管是cpu、gpu、dsp、mcu,还是自带的编码、解码、ai、isp算法,又或者是自己设计的fpga算法,只要是能解决问题,都应该为我们所有。算法如果仅仅可以跑在高端的soc上面,这其实不是自己的优势,而是soc芯片公司的优势。

5、软硬结合就是写驱动、做控制

        怎么做软硬结合,其实就是做驱动。软件从传感器拿到数据,放到指定内存,接下来送给硬件。硬件处理好了,通过中断告诉我们,我们再从指定内存获取结果。这就是一个循环往复的过程。有些同学如果还不理解的话,我们可以以网络为例进行说明,

        读书的时候,一般都认为网络有五层,分别是应用层、传输层、网络层、mac层和物理层。至下而上地去看,物理层是phy芯片完成,mac层是soc内部ip完成。这个时候的驱动,就是配置soc内部的ip,分别去访问mac层和物理层芯片。那传输层和网络层呢,就是kernel内部实现的tcp/ip协议。应用层,就是windows/linux上面写的application程序,这都是常规操作。

        这个时候,大家有没有想过,如果是想加快报文处理的速度,怎么用软硬结合实现呢?其实有一个思路是这样的,传输层只用udp,这样不用超时重传。网络层限制报文大小,这样不用分包。mac层和物理层呢,则不变。有了这个思路,其实就可以把应用层以下的code全部ip话,上层报文分发下来,直接udp送出去,没有了tcp/ip协议栈,每一步都是硬件完成,这样的处理速度,肯定是一般芯片没有办法比拟的。而上层应用来说,除了udp和报文大小做了一点限制之外,其他的使用基本和原来一样。但整体效率高了很多。


http://www.kler.cn/news/328216.html

相关文章:

  • Elasticsearch基础_2.数据类型
  • python网站创建001:内容概览
  • 机器学习常用的评价指标原理和代码
  • 支持分页的环形队列
  • SqlSugar使用
  • JMeter 性能测试基本过程及示例
  • Spring Web MVC课后作业
  • [前端][easyui]easyui select 默认值
  • Java 编码系列:泛型详解与面试题解析
  • 探索Android折叠屏设备的分屏适配
  • 熔断降级 请求合并 请求缓存 线程池隔离 信号量隔离 openfeign整合Hystrix
  • 2024年10月CISAW课程安排
  • 预处理详解
  • 深入浅出MongoDB(三)
  • Linux gadget 模拟触控屏 支持多点触控
  • 【监控体系搭建三】Docker部署PrometeusGrafana
  • Linux网络命令:用于管理和查询系统名称解析器(DNS)的实用工具resolvectl详解
  • 【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构
  • TypeScript 设计模式之【状态模式】
  • JavaScript Set基础与实战应用
  • 基于大数据的健身器材销售数据分析及可视化系统
  • Python:lambda 函数详解 以及使用
  • 如何在本地和远程删除 Git 分支
  • SQL,将多对多的关联记录按行输出
  • Qt Creator安卓环境配置【筑基篇】
  • 数据结构-4.1.特殊矩阵的压缩存储
  • 【STM32单片机_(HAL库)】4-3-2【定时器TIM】测量按键按下时间1——编程实现捕获功能
  • 在Unity编辑器中实现组件的复制与粘贴:完整指南
  • Vue3学习(六)Vue3 + ts几种写法
  • 深入工作流调度的内核