- 博客(50)
- 收藏
- 关注
原创 MIPI-CSI错误码
MIPI-CSI错误码的诊断需结合硬件信号分析寄存器状态监控和协议层抓包,逐层定位问题根源。例如,若出现FS/FE不匹配,需先检查传感器序列配置(协议层),再排查Lane阻抗(物理层),最后验证ISP资源分配(固件层)。对于高通平台,重点关注HS-Prepare时间和多通道配置差异;对于Rockchip平台,需优先解决VB时间不足和FIFO溢出问题。通过系统性的层级分析和针对性的参数调整,可显著提升MIPI-CSI链路的稳定性和可靠性。
2025-08-20 10:46:35
308
原创 通用的MIPI CSI错误码
MIPI CSI-2(Camera Serial Interface v2)的通用错误码由MIPI联盟规范定义,主要覆盖和三个层级,用于标准化错误检测与上报。
2025-08-20 10:45:43
189
原创 linux驱动问题汇总
知识体系构建:以《Linux设备驱动程序》为基础,结合内核源码(如目录)和实际项目加深理解。调试工具掌握:熟练使用printkgdbkgdbftraceperf,理解内核崩溃转储分析流程。技术趋势跟踪:关注eBPF、PREEMPT_RT、5G驱动等前沿领域,参与开源社区(如Linux内核邮件列表)获取最新动态。通过系统性梳理核心知识点,结合实际案例和调试经验,可有效应对Linux驱动面试中的技术挑战,展现扎实的工程能力和问题解决思维。
2025-08-19 12:58:28
619
原创 V4L2图像采集
V4L2应用层框架的核心是“IOCTL命令驱动的设备交互”和“缓冲区循环的高效数据采集从设备初始化到数据处理,每个步骤都通过标准化的结构体和命令实现,确保了对不同视频设备的兼容性。掌握缓冲区管理(mmap模式)和队列机制是理解V4L2的关键,实际开发中需结合设备能力查询和错误处理,确保采集流程稳定可靠。上述示例代码完整展示了V4L2采集流程:从设备打开、格式设置、缓冲区管理到数据采集,最终将100帧YUYV格式数据保存为YUV文件。编译时需链接系统库(如),运行前需确保摄像头设备存在()且有读写权限。
2025-08-19 11:18:32
309
原创 FFmpeg H264 编解码源码分析
FFmpeg 的 H.264 编解码实现严格遵循标准流程,通过管理解码状态,将复杂的解码过程拆解为 NAL 解析、Slice 解码、宏块处理等模块化步骤。理解这些核心数据结构和流程,是深入掌握 H.264 编解码及 FFmpeg 二次开发的基础。实际应用中,解码常用 FFmpeg 原生实现,编码则更多依赖 x264 等优化编码器。上述示例代码展示了使用 FFmpeg 解码 H.264 码流的基本流程:初始化解码器→读取码流→发送数据包→接收解码帧→输出 YUV 数据。
2025-08-19 11:12:52
421
原创 压缩比与码率相互作用分析
原始码率(R_raw)R_raw (Mbps) = 宽 × 高 × 帧率 × 位深 × 采样系数 ÷ 1e6(采样系数:YUV420为1.5,YUV444为3)压缩后码率(R_comp):编码输出的码率(单位:Mbps),即我们常说的“码率”。压缩比(CR)(压缩比越高,压缩效率越好)。
2025-08-19 11:06:33
416
原创 H265、H264编码原理
答:核心在于更灵活的编码单元(CTU 替代宏块)、更多预测模式(35 种帧内方向、1/8 像素运动向量)、优化的变换量化(可变大小变换)及新增工具(SAO、IBC 等),提升冗余去除效率,同等画质下码率降低 50% 左右。答:GOP 越长(I 帧间隔越大),码率越低(I 帧占比减少),但随机访问延迟越大(需解码到 I 帧才能开始),且丢包后错误扩散范围更大(P/B 帧依赖前帧);GOP 越短则相反,适合实时交互场景。答:QP 越小,量化越精细,残差数据越多,码率越高(近似 QP 每增 6,码率减半)。
2025-08-19 10:55:37
816
原创 音视频是如何同步
AV_SYNC_AUDIO_MASTER, // 以音频为基准(默认)AV_SYNC_VIDEO_MASTER, // 以视频为基准AV_SYNC_EXTERNAL_MASTER // 以外部时钟为基准} SyncType;音视频同步的核心是“用单调时钟生成一致的PTS,选择稳定的基准时钟(音频/外部),通过缓冲吸收瞬时波动,用动态调整对抗长期漂移深入理解需结合全链路的时间戳传递、缓冲管理和场景化策略,代码层面可参考FFmpeg的ffplay实现,重点关注时钟更新和偏差计算逻辑。
2025-08-19 10:49:02
721
原创 linux之V4L2源码分析
V4L2通过标准化框架(设备模型、缓冲区管理、子设备协作)实现视频设备的统一控制,而MIPI-CSI作为硬件接口提供高速数据传输能力。传感器驱动配置MIPI输出参数;CSI控制器驱动接收MIPI数据并通过DMA写入V4L2缓冲区;用户空间通过V4L2接口(ioctl/mmap)获取数据。核心源码围绕子设备管理()、缓冲区调度(videobuf2)、MIPI参数配置和DMA交互展开,最终实现高效的视频数据采集。
2025-08-19 09:54:23
858
原创 SDP详解
SDP(Session Description Protocol,会话描述协议)是一种用于描述媒体会话元数据的文本协议,其核心作用是(如媒体类型、编码格式、传输协议、网络地址等),但它本身不负责媒体数据的传输。
2025-08-19 09:41:10
332
原创 RTSP协议详解
RTSP(Real-Time Streaming Protocol,实时流协议)是一种应用层协议,由IETF定义(RFC 2326),主要用于实时媒体流(音视频)的控制,如播放、暂停、快进、后退等操作。核心定位:RTSP是“控制协议”,不直接传输媒体数据,而是通过指令协调媒体流的传输过程;实际媒体数据通常由RTP(实时传输协议)承载,配合RTCP(实时控制协议)监控传输质量。协议栈位置:工作在应用层,基于TCP(默认端口554)传输控制信令,媒体流(RTP)可基于UDP或TCP传输。答。
2025-08-19 09:39:06
521
原创 常见的流媒体传输协议
低延迟互动大规模直播/点播:HLS、DASH(兼容性强,延迟较高);传统直播推流:RTMP(逐渐被 HLS/DASH 替代,但仍用于中间转发);专业级传输:SRT、RTP/RTCP(广电、会议场景)。选择协议时需权衡延迟、兼容性、网络环境等因素。
2025-08-19 09:28:47
476
原创 弱网下的通信解决方式
:通过协议层减少握手/重传开销,数据层降低传输量,应用层适配离线/重传场景,最终实现“关键数据不丢、非关键数据可容忍延迟”的目标。减少心跳频率(如从10s一次改为30s),或用“静默心跳”(无数据传输时不发,有数据时附带状态),降低带宽消耗。弱网下TCP的“保守重传”和UDP的“无可靠性”都可能失效,需针对性优化或选择更适配的协议。弱网下重传可能加剧延迟和拥塞,需结合“主动纠错”和“智能重传”。弱网带宽有限,需通过“减负”和“拆包”降低传输压力。
2025-08-19 09:24:06
422
原创 TCP与UDP的区别
特性TCPUDP连接性面向连接(三次握手)无连接可靠性保证可靠(确认、重传)不保证(可能丢失/乱序)数据格式字节流(无边界)数据报(有边界)开销高(头部20字节+状态)低(头部8字节)速度较慢(受拥塞控制影响)较快(无额外控制)适用场景可靠传输(文件、网页)实时传输(音视频、游戏)
2025-08-19 09:17:54
165
原创 使用protobuf 解决TCP粘包问题
protoTCP 字节流特性:TCP 不区分 “消息边界”,发送方的多次 send 可能被合并为一个字节流。Nagle 算法:默认开启的 Nagle 算法会合并短时间内的小数据包(减少网络拥塞),加剧粘包。接收方缓冲:接收方的 TCP 缓冲区会累积数据,recv 调用仅读取当前缓冲区中的所有数据,不区分发送次数使用protobuf解决TCP粘包的核心是“长度前缀+序列化”的组合:长度前缀明确消息边界,protobuf负责高效的结构化数据转换。
2025-08-19 09:04:05
612
原创 Colcon介绍
Colcon(全称 “Collective Construction”)是一个跨构建系统的构建工具,主要用于管理包含多个软件包的项目。
2025-08-18 14:08:05
372
原创 fastRTPS介绍
早期ROS 2(如Crystal Clemmys版本)默认采用FastRTPS作为中间件,实现机器人各模块(传感器、控制器、规划器)的实时数据交互,例如无人机的姿态数据(1kHz频率)与避障指令的低延迟传输。基于Apache 2.0开源协议,代码可定制修改;在PLC、机械臂、传感器组成的工业网络中,通过FastRTPS的可靠传输模式(RELIABLE)确保控制指令不丢失,同时用尽力传输(BEST_EFFORT)传输非关键状态数据(如温度),平衡实时性与带宽。,以明确其对DDS标准的全面覆盖。
2025-08-18 14:07:20
250
原创 FastDDS介绍
支持DDS核心规范(如DCPS:Data-Centric Publish-Subscribe模型)、DDSI-RTPS协议(实时发布-订阅协议,定义了底层数据传输格式),以及扩展规范(如DDS Security、DDS for ROS 2等),确保与其他DDS实现(如RTI Connext、OpenDDS)的兼容性。数据通信的“标签”,定义了数据的类型(通过IDL描述)和名称,是发布者与订阅者匹配的依据(只有相同主题的节点才能通信)。同一域内的节点可相互通信,不同域的节点完全隔离(通过“域ID”区分)。
2025-08-18 13:55:29
401
原创 FastRTSP介绍
FastRTSP 通过分层架构、IO 多路复用、内存池等技术,实现了高性能和低延迟的 RTSP 传输能力。其模块化设计支持灵活扩展,可适配不同场景(如安防、直播、工业控制)。核心优化点在于网络 IO 效率、媒体流处理延迟及会话管理可靠性,同时严格遵循协议规范以保证兼容性。
2025-08-18 13:25:41
536
原创 ROS入门
ROS2 是新一代机器人操作系统,基于 DDS(数据分发服务)实现分布式通信,解决了 ROS1 的实时性差、依赖中心节点等问题,尤其适合工业级机器人和自动驾驶场景。通过以上路径,你将逐步掌握 ROS2 的核心机制、工具链和实战技能,最终具备开发复杂机器人系统的能力。:支持长时间运行任务的异步通信(如机器人导航),包含目标发送、进度反馈和结果回调。:同步请求-响应模式,用于远程过程调用(如控制机械臂运动)。:异步数据流,用于传感器数据传输(如激光雷达、摄像头)。:动态配置节点参数,支持运行时修改。
2025-08-15 08:54:26
623
原创 C++ 23种设计模式的分类总结
设计模式的核心是解耦与复用,需结合具体场景选择,避免过度设计。创建型模式关注“对象如何创建”,结构型模式关注“对象如何组合”,行为型模式关注“对象如何交互”。实际开发中优先使用C++标准库或成熟框架中已实现的模式(如STL迭代器、智能指针的RAII)。
2025-08-14 17:08:53
800
原创 C++设计模式
C++中常用的设计模式源于GoF(Gang of Four)定义的23种经典模式,这些模式可分为创建型、结构型和行为型三大类。以下按类别整理各模式的应用场景、代码示例及注意事项:创建型模式专注于对象创建过程的封装,降低耦合度。应用场景:全局只需要一个实例(如配置管理器、日志管理器、线程池)。代码示例:注意事项:应用场景:需要延迟对象创建到子类,且客户端无需知道具体产品类型(如日志系统支持文件/控制台输出)。代码示例:注意事项:应用场景:需要创建一系列相互关联的产品族(如跨平台UI组件:Windows
2025-08-14 17:06:43
978
原创 C++智能指针使用方法
unique_ptr:轻量、高效,适合独占资源,优先使用。shared_ptr:适合共享资源,但注意循环引用问题。weak_ptr:配合shared_ptr使用,解决循环引用,作为弱观察者。智能指针是C++内存管理的重要工具,但并非万能。理解其原理和适用场景,才能正确使用并避免潜在风险。
2025-08-13 11:25:40
790
原创 perf使用lock报错
原因是内核未开启和配置项。是内核中与相关的跟踪点(tracepoint),用于监控锁的获取行为(如哪个进程获取了锁、获取耗时等)。内核锁依赖检测框架,用于跟踪锁的依赖关系(如避免死锁),同时也是锁相关跟踪点的基础依赖。用于收集锁的统计信息(如获取次数、等待时间、争用次数等),是等跟踪点的功能载体。(隐含依赖):内核跟踪点的基础配置,所有 tracepoint 都需要此选项开启。
2025-08-13 10:43:55
411
原创 perf常用命令
用途:通过指定事件(如 CPU 周期、缓存未命中)采样程序运行时的行为,是后续分析的“数据采集器”。用途:嵌入式系统内存有限时,定位内核内存泄漏或分配效率问题(如频繁的页分配导致开销)。核心功能:跟踪和分析内核内存管理(如 slab 分配器、页分配的次数和耗时)。核心功能:列出当前系统支持的所有性能事件(硬件事件、软件事件、缓存事件等)。核心功能:分析内存访问行为(如加载/存储指令的地址、缓存命中/失效)。用途:定位最耗时的函数(用户态/内核态),是性能优化的“导航图”。
2025-08-13 10:33:58
325
原创 使用perf工具进行嵌入式Linux性能分析
在嵌入式Linux系统中,perf是一款轻量且强大的性能分析工具,基于内核性能计数器(PMU,Performance Monitoring Unit),可用于分析 CPU 热点、函数调用耗时、调度行为、中断开销等关键性能指标。相比其他工具(如gprof),perf对系统侵入性小,支持用户态和内核态分析,非常适合资源受限的嵌入式环境。perf在使用perf。
2025-08-12 16:26:00
878
原创 STL的六大组件
容器存储数据,算法处理数据,迭代器连接两者,仿函数扩展算法功能,适配器调整接口,分配器管理内存。它们的协同工作使STL成为C++中高效、可复用的通用编程工具。
2025-08-12 15:22:10
299
原创 如何验证TCP三次握手和四次挥手过程是否正常工作
用抓包工具捕获数据包,检查是否按“SYN→SYN+ACK→ACK”(三次握手)和“FIN+ACK→ACK→FIN+ACK→ACK”(四次挥手)的顺序交互,且确认号与序列号匹配。正常流程符合这个规律,异常则会出现标志位错误、顺序混乱或重传等情况。
2025-08-11 11:22:49
440
原创 MOE架构大模型
稀疏性增强:通过动态路由和负载均衡优化,在保持性能的同时降低计算成本(如Llama 4推理成本仅为GPT-4o的1/23)。架构融合:结合Transformer、Mamba等新型模块(如Hunyuan-TurboS),解决长序列处理和多模态对齐难题。硬件协同:华为Pangu Ultra MoE、Meta Llama 4等模型针对昇腾、H100等芯片进行深度优化,实现训练与推理效率的双重突破。
2025-08-11 09:23:05
1426
原创 C实现图像裁剪、缩放、OSD叠加、镜像和旋转功能
由于不使用任何图形库,我们将直接操作BMP格式的图像文件(因为BMP格式相对简单,像素数据通常是未压缩的)。下面实现基本的图像裁剪、缩放、OSD叠加、镜像和旋转功能。
2025-08-08 10:09:40
130
原创 TSAN检测多线程
使用TSAN(ThreadSanitizer)检测和解决多线程数据竞争问题,需要遵循“编译启用→运行检测→分析报告→修复问题”的流程。运行编译后的程序,TSAN会在运行时监控所有线程的内存访问和同步操作,一旦发现数据竞争就会输出详细报告。通过以上步骤,可有效利用TSAN定位并解决多线程程序中的数据竞争问题,显著提高并发代码的可靠性。通过“线程局部存储”或“消息传递”(如用队列传递数据),减少共享数据的使用,从根源避免竞争。通过这些信息,可直接定位到:两个线程在无同步的情况下,对。,避免高优化干扰检测)。
2025-08-07 09:32:36
285
原创 ASAN与TSAN的区别
当两个及以上线程在没有同步(如锁、信号量)的情况下,访问同一内存位置,且至少有一个是写入操作时,就会产生数据竞争。实际开发中,可根据程序问题类型选择工具(如怀疑内存问题用ASAN,怀疑并发问题用TSAN),两者也可结合使用(但性能开销会叠加)。使用时需通过编译选项启用(如。,尤其适合检测难以复现的越界、悬垂指针等问题(这类错误在普通调试中可能偶然“正常运行”,但会导致随机崩溃)。,用于定位数据竞争(这类错误通常不会直接崩溃,但会导致程序行为异常,是并发bug的常见根源)。
2025-08-07 08:15:55
275
原创 linux进程间通信原理和方式
要深化理解Linux进程间通信(IPC)的原理,需要从内核抽象、内存隔离本质、数据流转机制三个核心维度展开,剖析每种IPC方式在操作系统底层的实现逻辑。现代操作系统(包括Linux)通过虚拟内存机制实现进程隔离:因此,进程间通信必须依赖内核提供的“共享中介”——内核作为所有进程的“可信第三方”,管理用于通信的公共资源(如缓冲区、队列、内存块),并通过系统调用(syscall)向进程暴露操作接口。内核在IPC中的核心作用:内核实现:管道的本质是内核中的一块环形缓冲区(由结构体管理),包含:数据流转过程:匿名
2025-08-06 13:11:06
618
原创 AddressSanitizer与Valgrind的优劣势
ASan以“快”和“高效”取胜,是开发阶段的首选;Valgrind以“全”和“兼容”见长,适合深度检测和特殊场景。实际使用中常结合二者:开发时用ASan快速排查,发布前用Valgrind做兜底检查。
2025-08-06 11:05:55
658
原创 AddressSanitizer的工作原理
编译期插桩 + 运行时红区保护 + 影子内存监控,通过在内存分配时设置“警戒区”,在内存访问时检查合法性,实现对各类内存错误的实时检测。这种设计的代价是程序运行速度降低2-5倍、内存占用增加2-3倍,但换来的是开发阶段对内存错误的精准定位,大幅降低调试成本。
2025-08-06 10:57:11
551
原创 AddressSanitizer检测的类型
各类越界访问(缓冲区/容器溢出)指针非法操作(use-after-free、double free、invalid free等)作用域相关错误(use-after-scope)内存泄漏(需手动启用)这些检测能力使其成为开发阶段排查内存问题的核心工具,能大幅降低因内存错误导致的崩溃、数据损坏或安全风险。
2025-08-06 10:55:53
351
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人