006-Zynq图像传输中cache刷新对视频的影响(讲究一个恰到好处)

文章目录

  • 前言
  • 一、cache是什么玩意儿?
  • 二、解决方法
    • 1.Xil_DCacheInvalidateRange函数
    • 2.未刷新前的问题
    • 3.带刷新后的效果
  • 总结


前言

也是移植过程中遇到的一个问题,尝试了一些解决方案,也算是解决了这个问题。
这个问题出现在通过以太网传输分辨率为1280*720,帧率为30Fps的图像过程中。在初始化的时候,初始了Xil_DCacheDisable(void)这个函数,相当于直接用CPU去读数据不经过Cache,直接访问PS端的DDR3,初始化了以后在图像传输的过程中会出现帧率突然下降到原先一半的问题,然后又恢复正常。大概猜到了问题应该是在CPU直接读取DDR,速率受到限制导致的。后面把这个注释了以后,视频倒是能够正常显示了,但如果运动过快,屏幕就会出现白色的划痕,画面呈现撕裂的感觉。后面怀疑是还是cache的问题,后面加入了一个刷新cache的函数。终于算解决了这个问题。


一、cache是什么玩意儿?

这个网上也有说,这个问题也是比较普遍的问题,专业名词:cache一致性问题。按照我的理解就是,我们Zynq的PS端有双核CPU,这个速度是比DDR3写入数据的速度要快的。为了解决CPU读取和DDR写入这个过程中速度不一致的问题,就需要一个中间商,用来协调这个速度不一致的问题,这个中间商就是cache。

通过这个cache,把DDR中一批次的数据缓存到这个里面,那么通过cpu去读取的时候他就能对我们去访问这一批次的数据进行加速,相当于提高了CPU的利用率,使得其两者之间能够更加高效的通信,但这玩意儿也随之带来的影响是:当你CPU需要对大量数据进行读取的时候,DDR3那边的数据已经通过AXI总线写入了数据,但此刻还没有被加载到cache上面,因此你通过CPU去读取cache上面的数据可能就是之前的老数据,影响到视频的显示和输出。同样,如果你通过CPU将数据写入DDR3中,DDR3那边也不能立即收到这个数据。所以我们需要及时的去根据我们的需求及时的释放cache上的数据,或者将DDR3的数据加载到cache上,这样就能解决这个过程中造成的图像撕裂的问题。

二、解决方法

1.Xil_DCacheInvalidateRange函数

这个函数就是将DDR3上某个地址的数据,刷新到cache中,这样我们通过USB或者以太网进行数据传输的时候,当需要传输这一行数据的时候将DDR3中的数据刷新到cache中,这样就能避免撕裂的问题。

如下面的代码所示。wr_index_gray是我们读取帧缓存号,根据当前的帧缓存号从而确定我们要写入数据的地址。tx_addr就是根据我们不同的帧缓存号赋值得出的图像传输地址。pkg_size为一行图像大小,值为1280。pkg_num为总行数,在此处为720,pkg_cnt代表我们当前的行数。通过xil_DCachelnvalidateRange函数,tx_addr为刷新的基地址,1280为刷新的数据长度,每刷新一次传输的一行地址,我们就通过这个函数将DDR的数据存入缓存中。

	if(wr_index_gray>1)
	{
		tx_addr = tx_base_addr+(wr_index_gray-2)*pkg_size*pkg_num+pkg_size*pkg_cnt;
	}
	else
	{
		tx_addr = tx_base_addr+2*pkg_size*pkg_num+pkg_size*pkg_cnt;
	}
	Xil_DCacheInvalidateRange(tx_addr & 0xffffffc0,1280);

2.未刷新前的问题

在这里插入图片描述

3.带刷新后的效果

在这里插入图片描述


总结

今天的牛肉+豆腐拌饭,味道非常的巴适,每次有豆腐的时候,饭总是不够吃,吃饭的时候还是得带点拌饭的东西,不然吃起来牛肉干巴巴的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么要使用云原生数据库?云原生数据库具体有哪些功能?

相比于托管型关系型数据库,云原生数据库极大地提高了MySQL数据库的上限能力,是云数据库划代的产品;云原生数据库最早的产品是AWS的 Aurora。AWS Aurora提出来的 The log is the database的理念,实现存储计算分离,把大量…

基于YOLOv8全系列【n/s/m/l/x】开发构建道路交通场景下CCTSDB2021交通标识检测识别系统

交通标志检测是交通标志识别系统中的一项重要任务。与其他国家的交通标志相比,中国的交通标志有其独特的特点。卷积神经网络(CNN)在计算机视觉任务中取得了突破性进展,在交通标志分类方面取得了巨大的成功。CCTSDB 数据集是由长沙…

CodeGPT,你的智能编码助手—CSDN出品

CodeGPT是由CSDN打造的一款生成式AI产品,专为开发者量身定制。 无论是在学习新技术还是在实际工作中遇到的各类计算机和开发难题,CodeGPT都能提供强大的支持。其涵盖的功能包括代码优化、续写、解释、提问等,还能生成精准的注释和创作相关内…

分布式系统架构设计之分布式消息队列架构解析

分布式消息队列架构是构建在分布式系统之上的消息队列架构,旨在提高高性能、高可用性和可伸缩性。它包括以下架构相关部分: 1、架构优势 分布式消息队列架构的优势主要体现在以下几个方面: 01 高可用性 在分布式消息队列架构中&#xff0…

十九:爬虫最终篇-平安银行商城实战

平安银行商场实战 需求 获取该商城商品信息 目标网址 https://m.yqb.com/bank/product-item-50301196.html?mcId1583912328849970&loginModepab&historyy&sceneModem&traceid30187_4dXJVel1iop详细步骤 1、寻找数据接口 2、对比payload寻找可疑参数 3、多…

上海亚商投顾:沪指再度失守2900点 全市场超4800只个股下跌

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日继续调整,沪指跌超1%再度失守2900点,深成指、创业板指均创出调整新低&…

【算法练习】leetcode算法题合集之二叉树篇

递归遍历基础篇 前序遍历,中序遍历,后序遍历是根据处理根节点的位置来命名的。 树的处理大多用到了递归,递归需要知道终止条件。 前序遍历(中左右) 144.二叉树的前序遍历 中左右,先处理根节点,…

ASP .net core微服务实战

>>>>>>>>>>>>>>开发<<<<<<<<<<<<<<<< 0)用户 用户到nginx之间需要用https&#xff0c;避免被监听。 1)nginx // 做统一的分发&#xff0c;到微服务&#xff0c;相当于网关,提供统…

异常处理:全面覆盖与精细化管理的平衡

异常处理&#xff1a;全面覆盖与精细化管理的平衡 在软件开发中&#xff0c;异常处理是保证系统稳定性和用户体验的重要环节。对于是否应当全面覆盖所有异常并设立兜底机制&#xff0c;业界存在着两种主流思路&#xff1a;全面覆盖原则和精细化处理。如何在这两者间取得平衡&a…

Unity文字转语音(使用RT-Voice PRO [2023.1.0])

参考文章Unity插件——文字转朗读语音RtVioce插件功能/用法/下载_rtvoice-CSDN博客 一、使用步骤 1.导入进Unity&#xff08;插件形式为 .unitypackage&#xff09; https://download.csdn.net/download/luckydog1120446388/88717512 2.添加所需Prefab 1&#xff09;.右键可…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第22套

少儿编程 蓝桥杯青少组科技素养题真题及解析第22套 1、植物的叶子多为绿色,这主要是因为它们含有 A、绿色色素 B、叶绿素 C、花青素 D、细胞 答案:B 考点分析:主要考查小朋友们生物知识的储备;叶绿素是植物叶子中的一种色素,它可以吸收太阳光中的能量并转化为植物所…

【深度学习:Domain Adversarial Neural Networks (DANN) 】领域对抗神经网络简介

【深度学习&#xff1a;Domain Adversarial Neural Networks】领域对抗神经网络简介 前言领域对抗神经网络DANN 模型架构DANN 训练流程DANN示例 GPT示例 前言 领域适应&#xff08;DA&#xff09;指的是当不同数据集的输入分布发生变化&#xff08;这种变化通常被称为共变量变…

synchronized和lock的区别

synchronized和lock的区别 1&#xff09;synchronized是一个关键字&#xff0c;lock是一个java类&#xff1b; 2&#xff09;synchronized无法判断获取锁的状态&#xff0c;lock可以判断是否获取到了锁&#xff1b; 3&#xff09;synchronized会自动释放锁&#xff0c;lock必须…

《罗素论教育》笔记

目录 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 教育的目的 二、品性的教育 一岁前的教育 主要是2岁到6岁的教育 三、智力教育 14岁前的课程安排 最后的学年 大学教育 四、结束语 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 1、我…

Python从入门到网络爬虫(读写Excel详解)

前言 Python操作Excel的模块有很多&#xff0c;并且各有优劣&#xff0c;不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas&#xff0c;下面是各个模块的支持情况&#xff1a; 工具名称.xls.xlsx获取文件内容写入…

LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理

目录 问题描述上代码测试代码各位看官&#xff0c;打赏个1元吧 Json数据格式是大家在游戏开中常量用的一种数据格式&#xff0c;某种程度上可以说是必备的。对unity开发来说&#xff0c;LitJson这个json库应该是被使用最多的json库了。 问题描述 今天说要的其中的这个api: Jso…

2024年中国电子学会青少年编程等级考试安排的通知

各有关单位、全体考生: 中国电子学会青少年等级考试&#xff08;以下简称等级考试&#xff09;是中国电子学会为落实《全民科学素质行动规划纲要》&#xff0c;提升青少年电子信息科学素质水平而开展的社会化评价项目。等级考试自2011年启动以来&#xff0c;作为中国电子学会科…

AGV用120°激光扫描避障雷达传感器DE系列功能与通道切换操作说明

AGV用120激光扫描避障雷达传感器DE系列&#xff0c;包含DE-4211、DE-4611、DE-4311、DE-4511等型号&#xff0c;可帮助AGV/AMR/机器人快速精准地检测障碍物&#xff0c;确保系统运行安全&#xff0c;帮助智能停车系统完成准确的数据判定&#xff0c;实现车位或充电桩占用检测等…

Linux 期末复习

Linux 期末复习 计算机历史 硬件基础 1&#xff0c;计算机硬件的五大部件&#xff1a;控制器、运算器、存储器、输入输出设备 2&#xff0c;cpu分为精简指令集(RISC)和复杂指令集(CISC) 3&#xff0c;硬件只认识0和1&#xff0c;最小单位是bit&#xff0c;最小存储单位是字…

【设计模式】一文理解记住设计模式的原则

目录——阅读所需预计5-10分钟 &#x1f396;️前言&#x1f3af;单一职责原则&#x1f4e3;1. 定义&#x1f49e;2. 定义很抽象&#xff0c;咱继续看&#x1f389;3. 举几个栗子&#x1f49e;4. 以上栗子出现了一个问题&#xff0c;单一职责的划分究竟可以分多细&#x1f449;…