- 博客(27)
- 收藏
- 关注
原创 嵌入式Linux——RK 平台 MIPI 摄像头画面发绿排查与修复:从零到可用(IMX415 + /dev/video22)
摘要:本文针对RK平台(如RK3588)MIPI摄像头画面发绿问题提供完整解决方案。通过分析ISP架构和3A(AE/AWB/AF)机制,指出偏色主因是rkaiq_3A_server未正常运行。提供详细排查步骤:1)确认ISP输出节点;2)NV12抓帧验证;3)通过屏蔽多ISP节点和setpriv权限控制稳定启动3A服务。最终给出自动化脚本方案和修复验证方法,帮助开发者快速解决MIPI摄像头偏色问题。
2025-12-22 16:31:32
891
原创 嵌入式Linux——开发踩坑记:从 WebSocket 死锁到 PortAudio 音频丢包的硬核调试
本文记录了开发Linux AIChat客户端时遇到的三个典型Bug及其解决方案:1)通过原子变量实现异步通信解决WebSocket死锁问题;2)采用混合轮询模式平衡阻塞与非阻塞读取,避免音频采集线程死锁;3)正确处理ALSA驱动溢出错误,确保录音数据不丢失。这些案例揭示了多线程同步、驱动交互和错误处理的深层原理,为嵌入式音频应用开发提供了宝贵经验。
2025-12-03 20:56:53
648
原创 嵌入式Linux——Linux驱动中,read/write函数如何知道 open 打开了哪个设备?
摘要:Linux驱动中的文件私有数据(private_data)是struct file结构体的一个void*类型指针成员,用于在通用文件操作中关联具体设备实例。它通过open()函数将设备结构体指针存入filp->private_data,然后在后续read()、write()等操作中快速定位对应设备。该机制解决了多设备管理和会话状态维护问题,使驱动能准确识别操作目标设备。典型应用场景包括管理多个同类设备实例(如多个串口)和保存每个打开会话的独立状态信息(如读写模式)。
2025-11-28 14:46:45
761
原创 嵌入式C语言——拒绝死记硬背!从状态机实战彻底搞懂 C++ 多态与虚函数
本文通过状态机模块中的IState接口类,介绍了C++多态与接口的核心概念。接口类通过纯虚函数(=0)定义规范,强制子类实现特定功能。多态允许父类指针操作不同子类对象,实现代码解耦。文章还解释了虚析构函数的重要性,确保子类资源正确释放。最后通过表格总结关键术语:抽象基类(岗位说明)、纯虚函数(合同必填项)、多态指针(员工)和虚析构函数(离职清算),为理解面向对象编程提供生动类比。
2025-11-20 16:01:08
303
原创 嵌入式Linux——一文搞懂:Mutex与中断上下文、与下半部(Softirq/Tasklet/Workqueue)的关系
中断上下文中禁止使用互斥锁(mutex),因为互斥锁会导致睡眠,而中断上下文(包括上半部和大部分下半部)不允许睡眠。
2025-11-17 09:21:35
246
原创 嵌入式C语言——一文搞懂C与ARM汇编混合编程:从独立.s文件 到 内联asm()
本文介绍了内联汇编的概念及其在C语言中的应用。内联汇编允许直接在C代码中嵌入汇编指令,用于访问特定CPU寄存器、执行特殊指令或优化性能。文章通过两种方式实现加法运算:独立汇编文件遵循ARM调用约定;内联汇编使用占位符和约束条件实现C变量与寄存器的映射。重点阐述了两种方式的工作原理:独立汇编通过编译器自动生成寄存器加载指令,而内联汇编则由编译器自由分配寄存器。这些技术适用于需要直接控制硬件的底层开发场景。
2025-11-11 21:25:36
694
原创 嵌入式Linux——“大扳手”与“小螺丝”:为什么不该用信号量(Semaphore)去模拟“完成量”(Completion)
摘要:Linux中完成量(Completion)与信号量(Semaphore)的核心区别在于设计意图和使用场景。信号量主要用于资源访问控制,而完成量专为等待任务完成事件设计。
2025-11-09 22:02:23
735
原创 嵌入式Linux——深入 RCU 写端:synchronize_rcu() 和 call_rcu() 到底在干什么?
RCU机制中,写端释放旧数据有两种策略:同步RCU(synchronize_rcu)会阻塞等待所有读端退出宽限期,由调用者负责后续清理;挂接回调(call_rcu)采用异步方式,注册清理函数后立即返回,由RCU系统在宽限期结束后自动执行回调。同步RCU会阻塞线程且不能在中断上下文使用,而挂接回调不阻塞,适用于高性能场景,是RCU的关键优势所在。两种方法都确保在安全释放旧数据前等待所有读操作完成。
2025-11-07 09:55:26
514
原创 嵌入式Linux——rcu_read_lock() 到底在 “lock“ 什么?—— 理解 RCU 读端的真正代价
RCU读端机制解析 RCU读端操作rcu_read_lock()和rcu_read_unlock()并非传统意义上的锁机制,而是轻量级的抢占控制标记。它们的主要功能是防止内核抢占,而非阻塞其他CPU的操作。
2025-11-06 11:20:53
722
原创 嵌入式Linux——解密 ARM 性能优化:LDR 未命中时,为何 STR 还能“插队”?
摘要:ARM v6/v7处理器采用乱序执行优化技术。当LDR指令因缓存未命中而需要从内存加载数据时(包括缓存行填充过程),处理器会分析下一条STR指令不依赖LDR结果,于是优先执行STR指令而非等待。这类似于在烧水等待期间并行烤面包和拿果酱,通过识别无依赖指令并发执行来提升效率,显著减少CPU停顿时间。而早期ARM处理器则严格按序执行,必须等待前一条指令完成。
2025-11-05 15:29:23
913
原创 嵌入式Linux——LVGL从段错误到 lv_async_call:LVGL后台线程通知UI的正确姿势
在LVGL应用中,后台线程如果直接通过lv_obj_send_event通知UI线程会导致潜在的段错误和逻辑错误,因为GUI操作不是线程安全的。
2025-10-18 21:38:53
1155
原创 嵌入式Linux——软中断和硬中断的区别
Linux中断处理机制采用分层设计:硬中断(Hardirq)负责紧急硬件信号的即时响应,必须立即执行且不可被打断;软中断(Softirq)则由硬中断触发,在安全时间点进行较复杂但非紧急的任务处理。两者关系类似急诊流程:硬中断如护士进行快速急救,软中断如医生完成后续治疗。软中断执行时仍可被新的硬中断抢占,确保系统始终优先响应最紧急事件。这种设计既保证了实时性,又实现了任务的高效分层处理。
2025-10-11 21:55:45
186
原创 嵌入式Linux——如何在Linux内核中正确返回和处理错误码:IS_ERR 与 PTR_ERR 实战指南
Linux内核错误处理机制解析:Linux内核采用了一套明确的错误处理机制,通过返回负整数表示不同的错误类型,相比用户态程序返回-1或NULL,能提供更精确的错误信息。
2025-09-19 15:32:20
695
原创 嵌入式Linux——一行 dump_stack() 揭秘 Linux 驱动加载全过程
本文通过一个驱动模块示例展示了如何追踪内核函数调用堆栈。当驱动模块dump_stack_test.ko加载时,其hello_init函数调用dump_stack()打印内核调用堆栈信息。
2025-09-17 15:15:20
288
原创 嵌入式Linux——Linux 内核配置三剑客:一篇搞懂 Kconfig, .config 和 defconfig
本文介绍了Linux内核编译过程中三种关键配置文件的作用与关系
2025-09-15 10:34:32
1200
原创 嵌入式Linux——带环形缓冲区的按键中断驱动
本文介绍了带有环形缓冲区的按键驱动改进版本。针对旧版本使用单一全局变量导致按键事件丢失的问题,新版本引入环形缓冲区作为生产-消费模型的"传送带"。
2025-09-13 11:57:21
879
原创 [嵌入式][铁头山羊平衡车][Bug记录]PID控制失败:未引入math.h与SysTick中断隐患
在PID控制实验中,发现实际转速无法跟上目标转速的阶段性增加。经过分析,发现两个关键问题:首先,app_pwm.c文件中未引入math.h,导致fabsf()函数未正确计算浮点数的绝对值,进而影响ccr的计算,使得PID输出异常。其次,stm32f10x_it.c中SysTick_Handler未检查COUNTFLAG,导致ulTicks可能错误递增,影响时间间隔dt的准确性,进而影响PID控制器的积分和微分项计算。这些问题共同导致了控制系统的性能下降。
2025-05-10 16:21:29
1030
原创 [嵌入式][FreeRTOS]在FreeRTOS中如何优化中断相关的一系列FromISR的Api
如何优化中断相关的一系列FromISR的Api。
2025-03-21 20:25:41
307
原创 [嵌入式][FreeRTOS]在FreeRTOS中如何实现I2C的互斥访问
当你在一个FreeRTOS项目中多个任务需要用到I2C通讯时,I2C通信可能会乱套,可以用互斥量实现互斥。
2025-03-21 10:54:40
575
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅