恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

海思 DVB 播放超时与 C 语言同名函数冲突排查

  • 首页
  • 资讯中心
  • /
  • 海思 DVB 播放超时与 C 语言同名函数冲突排查

相关资讯

IoT OTA 灰度发布与回滚:从设备分组到故障收敛 2026/8/26 18:52:26
【超详细】搞懂tar、tgz、zip、rar、7z归档压缩格式,理清跨平台踩坑根源 2026/8/26 18:52:26
Langchain学习笔记(4) ---rag基础和向量数据库 2026/8/26 18:52:26

最新资讯

彻底卸载奇安信天擎:从密码破解到强制清除的完整指南
Vidu Q3:从文生图到多模态“造剧”,AIGC如何重塑内容创作工作流
五大实战场景,直接上手 DSH:让 AI 从 “会聊天“ 到 “能干活“(DeepSeek Harness实战指南)
SpringBoot自动配置原理浅析:它到底帮你做了什么
基于STM32与半导体制冷片的DIY智能温控小冰箱全流程实战
数学建模竞赛必备:Lingo优化软件从入门到实战指南

今日推荐

Python random 模块常用函数详解:从入门到实战
Hermes接入团队协作后,我推翻了三个效率假设
免费AI大模型调教指南:打造专属网文写作助手

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

海思 DVB 播放超时与 C 语言同名函数冲突排查

发布时间:2026/8/26 18:52:26
海思 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 遇到异常日志时同时检查函数实现和最终链接符号这样可以减少全局符号污染也能避免因为同名函数、库顺序或历史代码复用造成难以定位的运行时问题。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号