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.pswp.cn/diannao/36415.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36415.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36415.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django實現博客標簽字符串拆分功能

在Django模板中&#xff0c;可以使用自定義的模板過濾器來實現字符串的拆分。以下是一個簡單的示例&#xff0c;演示如何根據特定的分隔符拆分字符串并在模板中顯示。 首先&#xff0c;在Django應用的templatetags目錄中&#xff0c;創建一個Python模塊&#xff0c;例如extras…

C++中的網絡協議和網絡框架TCP和HTTP

一.OSI七層網絡模型 即開放式系統互連。 一般都叫OSI參考模型&#xff0c;是ISO組織在1985年研究的網絡互連模型。該體系結構標準定義了網絡互連的七層框架&#xff08;物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層&#xff09;&#xff0c;即OSI開放系統互連…

牛筋面,一口難忘的勁道滋味

在眾多的平涼美食中&#xff0c;牛筋面以其獨特的口感和豐富的口味&#xff0c;贏得了無數食客的喜愛。牛筋面&#xff0c;這一名字就給人一種堅韌、有嚼勁的印象。它并非由牛筋制成&#xff0c;而是因其面條的口感如牛筋般勁道而得名。牛筋面的制作過程頗具巧思。選用優質的面…

sheng的學習筆記-AI-K均值算法

ai目錄&#xff1a;sheng的學習筆記-AI目錄-CSDN博客 需要學習前置知識&#xff1a;聚類&#xff0c;可參考 sheng的學習筆記-聚類(Clustering)-CSDN博客 目錄 什么是k均值算法 流程 偽代碼 數據集 偽代碼 代碼解釋 劃分示意圖 優化目標 隨機初始化 選擇聚類數…

工作目錄問題,明明有該文件卻import錯誤?

背景 最近在進行多模塊集成的時候&#xff0c;出現了import錯誤的現象&#xff0c;雖然直接用絕對目錄解決了&#xff0c;但是顯然不優雅&#xff0c;在復習了有關工作目錄的知識后&#xff0c;了解到了問題所在。故寫此博客&#xff0c;希望對讀者有所幫助。 場景說明 有兩…

Interposer, 基板,轉接板

2. 結構與材料 3. 應用領域 4. 總結 Interposer、基板和轉接板在電子封裝和連接技術中各自扮演著不同的角色,以下是對它們之間區別的清晰解釋: 1. 定義與功能 Interposer: 定義:Interposer是一種中介層技術,用于實現芯片之間的水平互連和垂直互連。功能:通常是一個薄型的…

鴻蒙期末項目(3)

服務器搭建完成之后&#xff0c;編寫了諸多api用于數據傳輸工作&#xff08;略&#xff09; 編寫完成之后&#xff0c;回到鴻蒙開發工具&#xff0c;開始編寫搜索頁面的代碼。 打開搜索頁面時&#xff0c;先會展示歷史搜索記錄&#xff08;如果有的話&#xff09;&#xff0c;…

Kafka入門到精通(四)-SpringBoot+Kafka

一丶IDEA創建一個空項目 二丶添加相關依賴 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springf…

SQL 查詢中 (+) 符號的含義

您已經很好地解釋了 SQL 查詢中 () 符號的含義&#xff0c;它確實用于表示左外連接&#xff08;LEFT OUTER JOIN&#xff09;&#xff0c;這是 SQL 中的一種連接操作。以下是對您提供的信息的補充和完善&#xff1a; ### 左外連接&#xff08;LEFT OUTER JOIN&#xff09;&…

hudi系列-schema evolution(一)

hudi+flink在非schema on read模式下也表現出了支持一部分的schema evolution功能,本篇中測試一下在非schema on read模式下,發生各種列變更情況時數據寫入與讀取情況。 flink 1.14.5hudi 0.13.1mor表思路: 選擇mor表是因為它的數據文件有avro和parquet兩種格式,能覆蓋得更…

java中常用集合(邊補充)

java中開發常用集合&#xff08;邊補充&#xff09; 一、單列集合Collection1.1List接口1.1.1 ArrayList1.1.2 LinkedList1.1.3 Vector&#xff08;線程安全&#xff09;1.1.4 CopyOnWriteArrayList&#xff08;線程安全&#xff09; 1.2 Set接口1.2.1 HashSet1.2.2 LinkedHash…

用戶訂單管理API:輕松管理,購物無憂

在當今數字化時代&#xff0c;電子商務已經成為人們購物的首選方式。與傳統的實體店相比&#xff0c;電商的優勢在于便捷、快速、多樣化等特點&#xff0c;使得更多的消費者選擇了通過網絡購物。而作為電商平臺&#xff0c;如何提供更好的購物體驗&#xff0c;是每個平臺都需要…

企業工程項目管理系統源碼:Java版源碼解析

一、項目概述 鴻鵠工程項目管理系統是基于Spring Cloud、Spring Boot、Mybatis、Vue和ElementUI技術棧&#xff0c;采用前后端分離架構構建的工程管理軟件。它旨在應對企業快速發展中的管理挑戰&#xff0c;提升工程管理效率&#xff0c;減輕工作負擔&#xff0c;加速信息處理…

一次關于k8s的node節點NotReady的故障排查

master現象 分析 kubectl get nodes -A 看了下pod的狀態&#xff0c;好多CrashLoopBackOff kubectl get nodes -o wide 定位到那個具體node的IP地址&#xff0c;登錄對應的IP去查看為什么會這樣 node節點 journalctl -xe -f -u kubelet 查看此節點的 kubelet 服務&#xff…

基于SpringBoot的藏區特產銷售平臺

你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a; Java 數據庫&#xff1a; MySQL 技術&#xff1a; SpringBoot框架 工具&#xff1a; MyEclipse 系統展示 首頁 個人中心 特產信息管理 訂單管…

華寬通中標長沙市政務共性能力建設項目,助力智慧政務建設新飛躍

在數字化浪潮的推動下&#xff0c;長沙市政府正積極擁抱智慧城市建設&#xff0c;以科技力量提升政務服務效能。華寬通憑借其卓越的技術實力與豐富的項目經驗&#xff0c;成功中標長沙市政務共性能力建設項目&#xff0c;這無疑是對華寬通在智慧城市領域實力的高度認可。 華寬…

huggingface_hub 設置國內鏡像

要設置HuggingFace Hub的國內鏡像&#xff0c;你可以按照以下步驟進行操作&#xff0c;以確保從國內鏡像站點下載Hugging Face模型和數據集。 1. 安裝依賴 首先&#xff0c;確保你已經安裝了huggingface_hub庫。如果沒有&#xff0c;可以通過pip進行安裝&#xff1a; bash復制…

背部筋膜炎最有效的治療方法

背部筋膜炎的引起原因可以歸結為多個方面&#xff0c;以下是詳細的分點表示和歸納&#xff1a; 1、慢性勞損&#xff1a;長時間使用背部&#xff0c;如經常按摩背部&#xff0c;會導致筋膜老化、發炎&#xff0c;進而引發背部筋膜炎。癥狀可能包括背部疼痛、痙攣、肌肉無力感等…

Python 判斷for循環最后一次的6種方法

在Python中&#xff0c;通常我們不會直接判斷for循環是否正在執行最后一次迭代&#xff0c;因為Python的for循環是基于可迭代對象的&#xff0c;它不知道也不關心迭代的內部狀態&#xff08;比如當前是第幾次迭代&#xff09;。但是&#xff0c;我們可以使用一些技巧來間接地實…

uboot環境變量操作命令setenv和saveenv

uboot啟動的時候會將環境變量從flash讀取到DRAM中,使用命令 setenv修改的是DRAM中環境變量,修改以后要使用saveenv命令將修改 后的環境變量保存到flash中,否則的話uboot下一次重啟會繼續使用以前的環境變量值.setenv setenv - set environment variables Usage: setenv seten…