关于庐山派多视频层(layer)和bind_layer的应用

嘉立创分了适配层和OSD(我称它为图片层)顾名思义,一个是能显示视频流到LCD屏幕,一个是只能显示照片,也就是你可以对不同层进行操作而不影响其他层,解决的场景就是用于你画了一个正方形在照片上,你现在不想要了,你删去那个正方形会导致你的拍摄图片缺了一块成为白色,这是因为你山区的就是那个像素点,你没有记录之前的像素点那就恢复不回去了,所以图像多层可以解决因为他两层之间毫不相关,你删去一层里的东西 不会影响其他层,其实若果你的图像实时更新的也可以覆盖的层删正方形的缺口,但是不是很保险,所以有了多层显示

这时候又出现一个bind_layer函数 
目前这个函数好像只能绑定视频流,图片不能绑定但能show_images到指定层

Display.bind_layer(**sensor_bind_info, layer = Display.LAYER_VIDEO1)

详细文章:
嘉立创庐山派K230程序加速,解决卡顿思想总结-CSDN博客

他的作用是:可以让我正在死循环中或者延时里都能持续显示图像,相当于多了一个线程
bind_layer函数通过硬件 DMA 或操作系统任务调度实现了视频的异步显示,使主线程能够在死循环或延时中继续执行其他任务,而视频显示不受影响。这是嵌入式系统中处理实时性任务(如视频、音频)的常见设计模式,本质上是利用硬件或系统的并行能力,而非真正的多线程。理解这一机制有助于优化系统资源,避免因主线程阻塞导致的显示卡顿。

所以如果你绑定视频流到lcd display,那以后你除非想要拥有拍摄的照片用来做某些分析操作的时候才需要调用sensor.snapshot 你显示函数也是只需要你想把你操作完的结果显示在lcd上时才调用show_image 其他情况下你都可以不用用它两就能实时显示图像到lcd了且不惧怕任何中断延时死循环还节省软件资源因为用了dma完全由硬件接管


实际案例:
1.将图像通道零的视频流绑定到lcd的display去
他这个绑定好象只能绑定小于RGB888大小的eg:RGB565 YUV420不然会报错太大



创建OSD图像:

然后在while中snapshot拍摄摄像头图像(也就是提取绑定好的视频流中的一帧)去完成一些视觉检测山的算法

最后将结果保留在IMAGE OSD照片上最后将照片显示在OSD层盖住绑定视频流显示在LCD上


这样你对照片的操作就不会影响到视频的显示而且完全不怕延时死循环
详细解释:

一、绑定视频流与 DMA 硬件接管的核心机制
当通过bind_layer将视频流绑定到 LCD 显示时,系统会利用DMA(直接内存访问)机制建立硬件级的数据传输通道,实现以下效果:

数据传输与显示的硬件化:
摄像头采集的视频数据通过 DMA 直接从传感器缓冲区传输到 LCD 显存,无需 CPU 干预。
显示控制器(如 LCD 驱动 IC)周期性读取显存数据并刷新屏幕,形成持续的视频流显示。
与sensor.snapshot()和show_image()的本质区别:
snapshot():主动捕获一帧图像(软件触发),需 CPU 参与数据读取。
show_image():将处理后的图像数据写入显存(软件控制),需 CPU 占用时间。
绑定 + DMA 模式:数据传输由硬件自动循环执行,CPU 仅需在初始化时配置参数,后续完全脱离显示流程。


二、为何无需调用snapshot和show_image即可实时显示?
传统显示流程的局限性:
plaintext
软件调用snapshot() → CPU读取图像数据 → 软件处理图像 → 调用show_image() → CPU写入显存 → 显示刷新  

每帧显示都需 CPU 全程参与,若 CPU 陷入死循环或延时,显示会卡顿。
DMA 绑定后的流程优化:
plaintext
初始化bind_layer() → DMA自动建立「摄像头缓冲区→LCD显存」传输通道 → 显示控制器周期性刷新显存  

关键变化:CPU 仅在初始化时配置 DMA 参数(如源地址、目标地址、传输大小),后续每帧数据的传输和显示由硬件自动完成,与 CPU 状态无关(即使 CPU 进入死循环,DMA 仍持续工作)。


三、DMA 接管的优势与适用场景
资源节省与实时性提升:
CPU 占用率降低:传统方案中 CPU 需处理每帧图像的读取和写入,而 DMA 模式下 CPU 可专注于其他任务(如算法处理、通信控制)。
抗干扰能力强:中断、延时、死循环等软件层面的阻塞不会影响 DMA 传输,确保显示流畅(例如,在处理传感器数据的同时,LCD 仍实时显示视频)。
适用场景:
实时监控系统:需持续显示摄像头画面,同时 CPU 处理报警逻辑、数据上传等任务。
资源受限的嵌入式设备:如单片机(STM32、ESP32),需在有限 RAM 和 CPU 算力下实现视频显示。
低功耗应用:DMA 传输功耗远低于 CPU 参与的数据搬运,适合电池供电设备。


四、何时仍需调用snapshot和show_image?
需要处理单帧图像时:
例如,抓拍照片用于 AI 分析(如人脸识别、物体检测),此时需用snapshot()获取特定时刻的图像数据。
显示非实时内容时:
如显示 UI 界面、处理后的图像(如添加文字标注、滤镜效果),需用show_image()将软件处理后的结果写入显存。
多图层混合显示:
若需在视频流上叠加菜单、数据图表等 UI 元素,通常需要:
视频流通过 DMA 绑定到底层显示层(如 LAYER_VIDEO)。
UI 元素通过show_image()绘制到顶层显示层(如 LAYER_UI),实现图层叠加。
五、总结:DMA 绑定的技术本质
通过bind_layer实现的实时显示,本质是将「软件驱动显示」转换为「硬件驱动显示」:

传统方案:软件是显示的 “主动执行者”(调用函数控制每一步)。
DMA 方案:软件仅作为 “配置者”(初始化绑定参数),硬件成为显示的 “主动执行者”(DMA + 显示控制器自动循环)。

这种模式充分利用了硬件并行处理能力,在嵌入式系统中是平衡性能、功耗和开发效率的优选方案。

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

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

相关文章

多传感器标定简介

目录 标定内容及方法 雷达内参标定 IMU内参标定 编码器内参标定 相机内参标定 雷达和相机外参标定 多雷达外参标定 手眼标定 融合中标定 总结 连续时间 标定内容及方法 雷达内参标定 1) 目的 由于安装原因,线束之间的夹角和设计不一致,会导致…

day46/60

浙大疏锦行 DAY 46 通道注意力(SE注意力) 知识点回顾: 不同CNN层的特征图:不同通道的特征图什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。通道注意力:模型的定义和插…

提升创作效率:轻松调用固定素材与模板

日常工作和生活中,我们经常需要复制粘贴不同类型的数据,如文本、图片、文件等。使用剪切板管理工具可以快速访问之前复制的内容,而无需反复切换应用进行复制操作。 这款绿色便携版应用,无需安装,双击即开,…

【C++】组合模式

目录 一、模式核心概念与结构二、C 实现示例:文件系统三、组合模式的关键特性四、应用场景五、组合模式与其他设计模式的关系六、C 标准库中的组合模式应用七、优缺点分析八、实战案例:图形编辑器九、实现注意事项如果这篇文章对你有所帮助,渴…

C++包管理工具:conan2持续集成 (CI) 教程

1.持续集成 (CI) ​ 这是一个高级主题,需要具备 Conan 的基础知识。请先阅读并练习用户教程。本节面向设计和实施涉及 Conan 包的生产 CI 管道的 DevOps 和构建工程师。如果不是这种情况,您可以跳过本节。 持续集成 (CI) 对不同用户和组织有不同的含义…

免费SSL证书一键申请与自动续期

免费SSL证书申请与自动续期教程 本文介绍如何通过乐此加密(www.letsencrypt.top) 实现免费SSL证书一键配置和自动续期 一、准备工作 服务器要求 Linux 系统(推荐 Ubuntu/CentOS)已安装 curl 和 crontab拥有 sudo 权限的用户 域名验证 确保域…

【NLP】自然语言项目设计

目录 项目简介 要求 需要考虑的问题 硬件需求和环境配置 n卡驱动配置 以cuda11.8 版本为例 下载对应的cudnn(version11) 安装GPU版本的torch 安装gpu版本的TensorFlow 检查cuda安装情况 项目简介 训练一个模型,实现歌词仿写生成 任务类型:文本…

设计模式:观察者模式 (Observer) 案例详解

目录 一、引言:为什么需要观察者模式? 二、观察者模式的核心原理 1. 角色划分 2. 类图关系 三、经典案例解析 案例1:天气监测系统 案例2:股票价格监控系统 案例3:MVC架构中的模型-视图分离 案例4:J…

CTF-Misc:开启全方位解题之旅

目录 一、CTF-Misc 入门指引二、基础技能储备2.1 文件格式识别2.2 基础工具使用 三、信息搜集技巧3.1 搜索引擎技巧3.2 网络信息挖掘 四、编码转换奥秘4.1 常见编码类型4.2 编码转换工具 五、隐写分析秘籍5.1 图片隐写5.1.1 LSB 隐写5.1.2 颜色通道与 Exif 信息5.1.3 图片修复与…

Adobe创意套件深度挖掘:效率倍增与灵感迸发的新玩法

最近在深入体验奥地利Blueskyy艺术学院的Adobe正版教育订阅,并研究全家桶时有不少新发现,忍不住想和大家分享一下。 先简单说下这个订阅的感受: Firefly 积分。 这应该是我用过Firefly积分最多的版本,1500点/周。对于我们这些创意…

左神算法之有序二维矩阵中的目标值查找

有序二维矩阵中的目标值查找 目录 有序二维矩阵中的目标值查找1. 题目描述2. 问题解释3. 解决思路方法一:逐行二分查找(适合行数较少的情况)方法二:利用行列有序特性(最优解) 4. 代码实现5. 总结 1. 题目描…

深入理解AVL树及其旋转操作

AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单枝树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种方法…

URL带有中文会引入哪些问题

处理含中文字符的 URL 1 为什么会出现“乱码”或崩溃? URL 标准(RFC 3986)规定:除少数保留字符外,URL 只能包含 ASCII。中文属于 Unicode,因此必须先转换。如果直接把 https://example.com/路径/ 这样的字…

结构体字段能否单独加 mut

你问的这个问题在 Rust 里很常见: 一、结构体字段能否单独加 mut 1. 结构体字段能否单独加 mut? 不能。Rust 中,mut 是用来修饰变量绑定的,可变性是绑定的属性,而不是结构体字段本身的属性。 你不能写: …

scGPT-spatial 复现

文章目录 ✅ 总体流程总览(从 H5AD 到模型训练)🔧 步骤 1:读取 H5AD 文件并做基础预处理🧱 步骤 2:构造训练样本输入(token、value)📦 步骤 3:使用 DataColla…

运放电压跟随器为什么要加电阻

运放电压跟随器为什么要加电阻 我们常见运放的电压跟随器如下: 有时候会看见电路中加两个电阻: 作用就是保护运放,起限流电阻的作用。 当输入电压高的时候,运放内部存在钳位二极管,此电阻就能限流。 并不是所有运放…

MinerU 2.0部署

简介 MinerU 2.0使用sglang加速,与之前差别较大,建议按照官方的Docker镜像的方式启动。 Docker镜像 Dockerfile 这是官方的Dockerfile # Use the official sglang image FROM lmsysorg/sglang:v0.4.7-cu124# install mineru latest RUN python3 -m …

黑马python(十七)

目录: 1.数据可视化-地图-基础案例 2.全国疫情地图 3.河南省疫情地图绘制 4.基础柱状图构建 5.基础时间线柱状图绘制 6.动态GDP柱状图绘制 1.数据可视化-地图-基础案例 图示有点对的不准,可以通过后面的参数 2.全国疫情地图 3.河南省疫情地图绘制…

Segment Anything in High Quality之SAM-HQ论文阅读

摘要 最近的 Segment Anything Model(SAM)在扩展分割模型规模方面取得了重大突破,具备强大的零样本能力和灵活的提示机制。尽管 SAM 在训练时使用了 11 亿个掩码,其掩码预测质量在许多情况下仍不理想,尤其是对于结构复杂的目标。我们提出了 HQ-SAM,使 SAM 能够精确地分割…

深入理解_FreeRTOS的内部实现(2)

1.事件组 事件组结构体: 事件组 “不关中断” 的核心逻辑 事件组操作时,优先选择 “关调度器” 而非 “关中断” ,原因和实现如下: 关调度器(而非关中断) FreeRTOS 提供 taskENTER_CRITICAL()(…