flash申请内存失败,导致老化问题解决

背景

  1. 在闪光灯初始化阶段客制化了一个buffer,下发到kernel的闪光灯驱动中用于保存读取闪光灯寄存器的值。
  2. 功能测试都是正常的,但是一旦开始批量跑产线老化测试会有1/4500左右概率的后主摄拍照卡住。
  3. 定位根因是闪光灯初始化失败,进一步原因就是客制化的buffer申请失败。

具体流程

camxsensornode.cpp: ProcessingNodeFinalizeInitialization()
camxsensornode.cpp -> camxsensornode.cpp: m_pThreadManager->RegisterJobFamily();\n线程回调函数
camxsensornode.cpp -> camxsensornode.cpp: SensorThreadJobCallback()
camxsensornode.cpp -> camxsensornode.cpp: case SensorPostJobCommand::InitializeSensor:
camxsensornode.cpp -> camxsensornode.cpp: case SensorPostJobCommand::SubModulesCreate:
camxsensornode.cpp -> camxsensornode.cpp: SensorNode::CreateSensorSubmodules()
camxsensornode.cpp -> camxsensornode.cpp: SensorNode::CreateFlashResources()
camxsensornode.cpp -> camxnode.cpp:  CreateCmdBufferManager() x n
camxnode.cpp -> camxcmdbuffermanager.cpp : CmdBufferManager::Create()
camxcmdbuffermanager.cpp -> camxcmdbuffermanager.cpp: pCmdBufferManager->\nInitialize(pBufferManagerName, pParams);
camxcmdbuffermanager.cpp -> camxcmdbuffermanager.cpp: InitializePool();
camxcmdbuffermanager.cpp -> camxcslhw.cpp: CSLAlloc()
note right of camxcslhw.cpp: CSLAllocHW()...
camxcmdbuffermanager.cpp <-- camxcslhw.cpp
camxnode.cpp <-- camxcmdbuffermanager.cpp
camxsensornode.cpp <-- camxnode.cpp:
camxsensornode.cpp -> camxflash.cpp: Flash::Create(&createData)
camxflash.cpp -> camxflash.cpp: pCreateData->pFlash->Initialize(pCreateData)
camxflash.cpp -> camxflash.cpp: CreateInitializePacket()
camxflash.cpp -> camxcmdbuffermanager.cpp: m_pPacketManager->GetBuffer(&pResource)
camxcmdbuffermanager.cpp --> camxflash.cpp
camxflash.cpp -> camxflash.cpp: PopulateImageBuffer()
camxflash.cpp -> camximagebuffermanager.cpp: ImageBufferManager::Create(\n"FlashRegisterRead",&createData,\npFlashImageBufferManager)
camximagebuffermanager.cpp -> camximagebuffermanager.cpp: pImageBufferManager->Initialize();
camximagebuffermanager.cpp -> camxmempoolmgr.cpp: MemPoolMgr::RegisterBufferManager();
camxmempoolmgr.cpp -> camxmempoolmgr.cpp: pMemPoolMgr->RegisterNewMemPoolGroup();
camxmempoolmgr.cpp -> camxmempoolgroup.cpp: pMemPoolGroup->Initialize()
camxmempoolgroup.cpp --> camxmempoolmgr.cpp
camxmempoolmgr.cpp -> camxmempoolgroup.cpp: pMemPoolGroup->RegisterBufferManager();
camxmempoolgroup.cpp --> camxmempoolmgr.cpp
camxmempoolmgr.cpp --> camximagebuffermanager.cpp
note left of camxmempoolmgr.cpp: ------------先注册内存池组,再进行初始化内存,通过FLAG来管理----------
camximagebuffermanager.cpp -> camximagebuffermanager.cpp: pImageBufferManager->InitializeBuffers();
camximagebuffermanager.cpp -> camximagebuffer.cpp: pBuffer->Allocate();
camximagebuffer.cpp -> camxmempoolmgr.cpp: MemPoolMgr::GetBufferFromPool();
camxmempoolmgr.cpp -> camxmempoolgroup.cpp: pMemPoolGroup->GetBufferFromPool()
camxmempoolgroup.cpp -> camxmempoolgroup.cpp: ActivateBufferManager();
camxmempoolgroup.cpp -> camxmempoolgroup.cpp: UpdateMemPoolGroupBufferCounts();
camxmempoolgroup.cpp -> camxmempoolgroup.cpp: AllocateBuffers(1);
camxmempoolgroup.cpp -> camxcsl.cpp: CSLAlloc(pBuffer->name,...)
camxcsl.cpp --> camxflash.cpp: 正确的分配完内存,可顺利打开相机拍照。FlashRegisterRead申请的内存池组的flag,有概率被异步的TFE修改会导致分配内存失败。可以通过添加标志位bNeedDedicatedBuffers=TRUE,来设置专属内存组
note right of camxsensornode.cpp: 开启新的线程
camxsensornode.cpp -> camxsensornode.cpp:SensorPostJobCommand::ConfigureSensor:
camxsensornode.cpp -> camxsensornode.cpp:SensorPostJobCommand::ReadRequest:...

在这里插入图片描述正确的分配完内存,可顺利打开相机拍照。FlashRegisterRead申请的内存池组的flag,有概率被异步的TFE修改会导致分配内存失败。可以通过添加标志位bNeedDedicatedBuffers=TRUE,来设置专属内存组

If self shrinking is disabled or heap type is EGL for this group, its better to have it as a dedicated
group for this Buffer Manager set m_bDedicatedGroup to TRUE in such case, so that IsMatchingGroup for
this group would fail for any future Buffer Manager registers

翻译如下:

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

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

相关文章

SherlockChain:基于高级AI实现的智能合约安全分析框架

关于SherlockChain SherlockChain是一款功能强大的智能合约安全分析框架&#xff0c;该工具整合了Slither工具&#xff08;一款针对智能合约的安全工具&#xff09;的功能&#xff0c;并引入了高级人工智能模型&#xff0c;旨在辅助广大研究人员针对Solidity、Vyper和Plutus智…

第六十九:iview 表格汇总怎么拿到传过来的数据,而不是自动累加,需要自定义方法

话不多少&#xff0c;先看官方解释 我这个简单&#xff0c;所以所有说明都在图上了 handleSummary({ columns, data }){console.log(columns, data)let sums {}columns.forEach((item,index)>{const key item.key;console.log("key",item)if(index 0){console.…

煤安防爆手机为什么能在煤矿井下使用

煤安防爆手机之所以能在煤矿井下使用&#xff0c;是因为它们经过特殊设计&#xff0c;符合严格的防爆安全标准&#xff0c;能够防止电火花引发爆炸&#xff0c;同时具备防尘防水、抗冲击等特性&#xff0c;确保在恶劣的煤矿环境中稳定可靠地运行&#xff0c;为工作人员提供安全…

【FFmpeg】avformat_open_input函数

【FFmpeg】avformat_open_input函数 1.avformat_open_input1.1 初始化输入格式&#xff08;init_input&#xff09;1.1.1 文件路径判断格式&#xff08;av_probe_input_format2&#xff09;1.1.1.1 格式探测&#xff08;read_probe&#xff09;1.1.1.2 扩展匹配检查&#xff08…

iOS 其他应用的文件如何在分享中使用自己的应用打开

废话少说 一、第一步&#xff1a;先配置好plist文件 右击info.plist如下图文件打开 根据自己需要配置支持的文件类型&#xff0c;也可使用property List中配置&#xff0c;一样的 其他的文件可是参考文档&#xff1a;System-Declared Uniform Type Identifiers 可复制的代码&am…

【前端】[vue3] [uni-app] 组件样式击穿:deep

我是在开发uni-app时测试的思路&#xff0c;大家可以借鉴一下。 我这边测试的是uni组件&#xff0c;但是我觉得即便你用element-plus之类的&#xff0c;样式击穿的思路都相同。 我自定义了一个全局样式scss文件&#xff0c;并引入到了项目中。(如图) 利用vue3 中的 deep 方式…

Java使用poi生成word文档的简单实例

Java使用poi生成word文档的简单实例 生成的效果如下&#xff1a; 用到的poi的简单的知识 新建一个word对象 //新建文件 XWPFDocument document new XWPFDocument();新建段落以及文字样式 //创建段落 XWPFParagraph paragraph document.createParagraph(); paragraph.se…

收银系统源码-开源收银系统-私有化独立部署

千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 如需了解请私信交流

电脑系统重装怎么操作?分享四个win10重装系统方法

“我遇到了一些笔记本电脑的问题&#xff0c;别人告诉我解决这个问题需要重新安装Win10电脑系统。但我不记得我把光盘放在哪里了&#xff0c;我能否在不丢失文件的情况下重新安装操作系统&#xff1f;电脑系统重装怎么操作&#xff1f;”虽然电脑自带系统中有多种方法可供选择&…

【最佳实践】前端如何搭建自己的cli命令行工具,让自己编码的时候如虎添翼

作为前端开发人员&#xff0c;搭建自己的前端CLI工具是一个有趣且有意义的事情。以下是一篇详细的教程&#xff0c;包括使用场景和案例。 使用场景 假设你是一个前端团队的一员&#xff0c;需要频繁地在不同的项目中执行一些标准化的任务&#xff0c;比如&#xff1a; 根据模…

【02-02】SpringMVC基于注解的应用

一、请求处理 1、常用注解 RequestMapping 作用&#xff1a;用来匹配客户端发送的请求&#xff08;用来处理URL映射&#xff0c;将请求映射到处理方法中&#xff09;&#xff0c;可以在类或者方法上使用。 用在类上&#xff0c;可以将请求模块化&#xff0c;避免请求方法中的…

前端 Array.sort() 源码学习

源码地址 V8源码Array 710行开始为sort()相关 Array.sort()方法是那种排序呢&#xff1f; 去看源码主要是源于这个问题 // In-place QuickSort algorithm. // For short (length < 22) arrays, insertion sort is used for efficiency.源码中的第一句话就回答了我的问题…

微软发布Phi-3系列语言模型:手机端的强大AI助手

大模型&#xff08;LLMs&#xff09;在处理复杂任务时展现出的巨大潜力&#xff0c;但却需要庞大的计算资源和存储空间&#xff0c;限制了它们在移动设备等资源受限环境中的应用。微软公司最新发布的Phi-3系列语言模型&#xff0c;以其卓越的性能和小巧的体积&#xff0c;打破了…

FairGuard游戏加固无缝兼容 Android 15 预览版

2024年6月25日&#xff0c;谷歌发布了 Android 15 Beta 3 &#xff0c;作为Android 15 “平台稳定性”的里程碑版本&#xff0c;谷歌建议所有应用、游戏、SDK、库和游戏引擎开发者都将“平台稳定性”里程碑版本作为规划最终兼容性测试和公开发布的目标。 安卓开发者博客提供的版…

积分的可视化

积分的可视化 flyfish 考虑平方根函数 f ( x ) x f(x) \sqrt{x} f(x)x ​&#xff0c;其中 x ∈ [ 0 , 1 ] x \in [0, 1] x∈[0,1] 。在区间 [ 0 , 1 ] [0, 1] [0,1] 上&#xff0c;函数 f f f 下方的面积是指函数 y f ( x ) y f(x) yf(x) 的图像与 x x x 轴之间的部…

【微服务网关——中间件实现】

1.中间件的意义 避免成为if狂魔提高复用、隔离业务调用清晰、组合随意 2.实现原理 中间件一般都封装在路由上&#xff0c;路由是URL请求分发的管理器中间件选型 基于链表构建中间件 基于责任链的实现缺点&#xff1a;实现复杂&#xff0c;调用方式不灵活 使用数组构建中间件 控…

cad怎么导出为图片?分享四种导出方法

cad怎么导出为图片&#xff1f;在工程设计、建筑设计、机械设计等领域&#xff0c;CAD图纸的编辑和分享是一项日常工作。然而&#xff0c;如何将CAD图纸高效、准确地导出为图片格式&#xff0c;一直是设计师们关注的焦点。今天&#xff0c;就为大家推荐四款强大的CAD导出图片软…

连接Huggingface报requests.exceptions.SSLError错误

最近在学习使用 SHAP 算法解释 BERT 模型的输出结果&#xff0c;然而在从 Huggingface 上导入模型和数据集的过程中出现了网络连接相关的错误&#xff0c;本文用于记录错误类型和解决错误的方法。 1 代码示例 SHAP 官方展示的代码如下&#xff1a; import datasets import nu…

企业微信内嵌H5项目接入聊天功能

产品需求是,在列表中把符合条件的列表接入聊天功能,以下是详细步骤: 1.引入企业微信 <script src"https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script> 2.获取wx签名(必须要) /*** 获取wx签名**/ export function getWxJsApi(data) {r…

如何在信创领域中做好防泄露

随着信息技术的迅猛发展&#xff0c;数据安全和防泄露成为了企业和政府机构面临的重大挑战。在信创&#xff08;Creative and Innovative Intelligent Products&#xff09;领域中&#xff0c;沙箱技术以其独特的隔离和保护机制&#xff0c;成为了防泄露的关键手段之一。 一、沙…