海思 DVB 播放超时与 C 语言同名函数冲突排查
概要本文记录一次海思 DVB 直接播放失败的定位过程。程序最初出现HI_UNF_TUNER_SetAttr failed修正前端参数后又出现HIADP_Search_GetAllPmt failed和DMX_DataRead timeout。进一步分析发现unf_abs.c与hi_adp_demux.c中存在同名函数导致全局符号冲突程序可能绑定到非预期实现。通过为仅供unf_abs.c内部使用的函数增加static限制其链接范围最终恢复正常播放。本文重点解释static的内部链接机制及其排查方法。1. 从表面超时追踪到实际调用路径测试sample_dvbplay时日志依次出现HI_UNF_TUNER_SetAttr failed HIADP_Search_GetAllPmt failed DMX_DataRead timeout第一条错误说明 Tuner/Demod 参数可能不匹配需要检查Tuner 类型 Demod 类型 I2C 地址 I2C 通道 复位 GPIO TS 端口修正参数后程序能够继续执行但节目搜索失败。这说明问题已经从“前端初始化”进入“Demux 获取节目表”阶段。日志中的DMX_DataRead timeout对应源码device/hisilicon/bigfish/sdk/source/msp/api/abs/unf_abs.c函数DMX_DataRead()会通过HI_UNF_DMX_AcquireBuf(...)读取 Demux Section 数据。如果在超时时间内没有获取完整 PAT/PMT就会返回失败。此时不能只判断为“没有信号”还需要确认实际执行了哪个函数。2. 发现两个同名函数搜索函数定义后发现unf_abs.c hi_adp_demux.c中都存在DMX_SectionStartDataFilter(...)同时unf_abs.c中的DMX_SectionStartDataFilter()会调用本文件的DMX_DataRead(...)而sample_dvbplay预期使用的是hi_adp_demux.c中的 Demux 处理逻辑。如果这些函数都没有加static它们默认具有 external linkage会作为全局符号参与链接。多个目标文件导出同名函数时可能出现链接器报告重复定义静态库提取顺序影响最终实现调用者绑定到非预期函数编译成功但运行时出现异常。C 语言要求一个程序中不能存在多个冲突的外部定义。不同工具链和链接方式下表现可能是直接报错也可能表现为符号解析结果不符合预期。3.static为什么可以解决问题修改前HI_S32 DMX_SectionStartDataFilter(...) { ... }修改后static HI_S32 DMX_SectionStartDataFilter(...) { ... }文件作用域函数前的static会让函数具有 internal linkage函数只在当前 .c 文件可见 不会导出为全局链接符号 不会与其他文件中的同名函数竞争因此unf_abs.c 内部 DMX_SectionStartDataFilter() └── DMX_DataRead() hi_adp_demux.c 对外提供 DMX_SectionStartDataFilter()两个函数虽然名字相同但已经属于不同的符号作用域不再发生全局冲突。需要注意static不会改变函数内部算法也不是运行时权限控制。它改变的是编译和链接阶段的符号可见性。4. 如何验证是否存在符号冲突可以在目标文件或库文件上执行nm unf_abs.o | grep DMX_SectionStartDataFilter readelf -Ws unf_abs.o | grep DMX_SectionStartDataFilter通常大写 T全局函数符号 小写 t文件内局部函数符号增加static后函数应从全局符号变为局部符号。也可以搜索整个工程rg -n DMX_SectionStartDataFilter|DMX_DataRead .排查重点包括是否存在多个同名定义哪些文件真正调用了该函数函数是否只在当前文件使用是否应该放入公共头文件最终链接的库和目标文件来自哪里。5. 什么时候应该使用static如果函数只服务于当前源文件应优先声明为static HI_S32 helper(...);适合使用static的对象包括文件内部辅助函数文件内部状态变量不应暴露给其他模块的实现细节。不应随意加static的情况包括函数需要被其他源文件调用函数是公共 API函数已经在头文件中作为外部接口声明。6. 经验总结本次故障的排查链路是Tuner 参数错误 ↓ 修正前端配置 ↓ Demux 节目搜索失败 ↓ DMX 数据读取超时 ↓ 追踪日志对应函数 ↓ 发现同名全局符号 ↓ 使用 static 限制函数作用域这次问题说明底层超时不一定只是硬件或信号问题也可能是软件模块边界不清晰导致的错误调用。在大型 C 工程中建议遵循两个原则只在当前文件使用的函数默认加 static 遇到异常日志时同时检查函数实现和最终链接符号这样可以减少全局符号污染也能避免因为同名函数、库顺序或历史代码复用造成难以定位的运行时问题。

相关新闻

IoT OTA 灰度发布与回滚:从设备分组到故障收敛

IoT OTA 灰度发布与回滚:从设备分组到故障收敛

一次固件在实验室成功升级,只证明“这台设备在这次条件下写入并启动了新镜像”。它没有证明车队里不同硬件修订、运营商网络、剩余电量、存储磨损、现场外设和长时间离线设备都能安全升级。真正的 IoT OTA 系统不是文件分发器,而是一套限制故障半径、判断…

2026/8/26 18:52:29 阅读更多 →
【超详细】搞懂tar、tgz、zip、rar、7z归档压缩格式,理清跨平台踩坑根源

【超详细】搞懂tar、tgz、zip、rar、7z归档压缩格式,理清跨平台踩坑根源

文章目录1、先分清归档与压缩,很多初学者的概念误区1.1 归档与压缩二者完全是两件独立工作1.2 两套技术路线诞生的历史背景2、tar家族格式完整拆解:tar / tar.gz / tgz / tar.bz2 / tar.xz2.1 tar归档格式,只打包不压缩2.2 gzip介入之后&…

2026/8/26 18:52:29 阅读更多 →
Langchain学习笔记(4) ---rag基础和向量数据库

Langchain学习笔记(4) ---rag基础和向量数据库

一、文档加载与切分二、Embeddingfrom langchain_milvus.vectorstores.milvus import Milvus from utils.rag_factory import get_milvus_client# 获取milvus客户端 vector_store: Milvus get_milvus_client("employee_handbook",is_deleteFalse) results vector…

2026/8/26 18:52:29 阅读更多 →

最新新闻

mes厂家有哪些?从开发与二次开发灵活性看mes厂家的业务适配深度

mes厂家有哪些?从开发与二次开发灵活性看mes厂家的业务适配深度

半导体制造是一个工艺流程高度差异化的领域。同样是封测环节,做引线键合和做倒装焊的工序逻辑完全不同;即便是同一种封装形式,不同工厂的设备配置、物料编码规则、质量判定标准也各有差异。标准化的mes产品往往只能覆盖通用流程,而…

2026/8/26 20:27:53 阅读更多 →
[AutoSar]BSW_Com010 CAN IF 模块介绍

[AutoSar]BSW_Com010 CAN IF 模块介绍

目录关键词平台说明一、CAN IF 所在架构位置二、CAN interface 简介三、CAN interface 主要功能描述3.1 CANIF 被调用方式3.1.1 中断模式3.1.2 轮询模式3.1.3 混合模式3.2 Hardware object handles(HO)3.4 Dynamic L-PDUs3.4.1 Dynamic Transmit L-PDUs3…

2026/8/26 20:27:53 阅读更多 →
IMA 零代码搭建财务制度 RAG 问答助手(“AI+财务“最经典应用)

IMA 零代码搭建财务制度 RAG 问答助手(“AI+财务“最经典应用)

IMA 零代码搭财务制度 RAG 问答助手 从文档导入到检索调优,一套照着做的极简落地法。 很多人一听到 “RAG” 就头大:向量库、Embedding、重排序、余弦相似度……感觉非得会 Python、会部署才能玩。其实对大多数职场人来说,个人知识库 垂直问…

2026/8/26 20:27:53 阅读更多 →
数字化转型:转什么、怎么转?

数字化转型:转什么、怎么转?

一、引言:为什么今天必须认真讨论数字化转型过去十年,“数字化转型”从一个概念热词,逐渐变成了企业无法回避的战略命题。无论是制造业、零售业、金融业,还是公共服务、农业和医疗领域,几乎所有行业都在谈论数字化。然…

2026/8/26 20:27:53 阅读更多 →
天猫店群自动化管理系统:20核并发不抢焦,单机跑通百店零报错

天猫店群自动化管理系统:20核并发不抢焦,单机跑通百店零报错

天猫店群自动化管理系统:20核并发不抢焦,单机跑通百店零报错 做店群的老板都知道,天猫的同行数据截流,是店群运营中最耗人力也最容易出错的环节。 同行截流是店群最核心的引流手段。别人花大价钱投流的爆款,你把他的…

2026/8/26 20:27:53 阅读更多 →
cumulus collator-selection Pallet 解析:Parachain 如何实现开放出块与提名集(完整指南)

cumulus collator-selection Pallet 解析:Parachain 如何实现开放出块与提名集(完整指南)

cumulus collator-selection Pallet 解析:Parachain 如何实现开放出块与提名集(完整指南) 【免费下载链接】cumulus Write Parachains on Substrate 项目地址: https://gitcode.com/gh_mirrors/cum/cumulus cumulus 是 Polkadot 生态中…

2026/8/26 20:26:53 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →