自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(566)
  • 收藏
  • 关注

原创 嵌入式IAP/OTA升级方案全景综述:从串口到5G,从裸写到工业级安全

IAP/OTA不是一个单一技术,而是一个技术栈传输层选什么通道(串口/WiFi/4G/…)存储层怎么放固件(单分区/A/B/外部Flash)安全层怎么防攻击(签名/加密/安全启动)可靠性层怎么防变砖(校验/回滚/断点续传)入门用串口Ymodem,半天就能跑通;工业级方案需要A/B+差分+签名+回滚,可能需要几周甚至几个月。不要一上来就做最复杂的,根据产品阶段和可靠性需求,逐步迭代。先跑通基础升级,再加安全,最后加A/B和差分。你现在用的是哪种升级方案?遇到了什么坑?欢迎评论区交流。

2026-08-13 13:35:02 40

原创 STM32 底层原理详解:从硅片到代码的完整旅程

STM32 的本质是 ARM Cortex-M 内核 + ST 设计的外设矩阵 封装在一块硅片上。关键总线说明:STM32 的时钟系统极其复杂,这是理解底层的关键。时钟源层级:为什么需要这么复杂的时钟树?当你按下复位键,发生了一系列硬件级别的操作:内存映射关键点:二、软件层面:代码是怎么"跑"起来的2.1 编译链接的幕后你写的 C 代码要变成芯片能懂的机器码,经历以下过程:链接脚本(.ld)的关键作用:链接器根据脚本决定:Cortex-M 内核内置了 NVIC(Nested Vectored

2026-08-10 11:23:59 207

原创 McASP 音频接口详解:从小白到能配寄存器

/ 释放帧同步复位,启动 McASP// 帧同步发生器启动// 再确认串行器释放// 使能 TX/RX// 清状态// McASP 开始跑了!① GBLCTL = 0 (全局复位)② 设置 PLL 和 AUXCLK (时钟源)③ 配 SRCTLn (引脚功能)④ 配 TXFMT / RXFMT (数据格式)⑤ 配 ACLKXCTL / AHCLKXCTL / AFSXCTL (时钟和帧同步)⑥ 按顺序释放 GBLCTL 各子模块复位 (使能硬件)

2026-08-10 10:34:54 228

原创 电源电路设计从入门到精通:LDO 与 DC-DC 完全指南

稳定:负载突变后,输出电压很快回到设定值不稳定(振荡):输出电压以某个频率持续正弦波动,幅值几十到几百 mV原因:反馈环路的相位裕度不足→ 输出变化 → 反馈检测 → 芯片调整 → 传递到输出→ 如果每一步的延迟累积使得"负反馈"在某个频率变成了"正反馈"→ 振荡!1. 输入是什么?范围多大?→ 定拓扑(Buck / Boost / Buck-Boost / LDO)2. 输出需要多少电压、多少电流?→ 定功率等级,判断 LDO 能否扛住3. 噪声要求多高?

2026-08-06 10:50:43 206

原创 GD32单片机开发实战:从STM32/CubeMX 迁移到快速上手

从 STM32/CubeMX 切换到 GD32,最大的变化不是技术栈,而是心态不要期待 100% 对等的图形化工具标准库开发反而更贴近底层,更可控GD32 Embedded Builder 在快速进步,可作为辅助核心口诀下库 → 建工程 → 配路径 → 写 GPIO → 加延时 → 扩外设 → 看手册按照这个流程,3 天内你就能从 STM32 开发者变成 GD32 开发者。

2026-08-03 16:09:10 209

原创 UIO 驱动 vs 传统内核驱动

传统内核驱动UIO 驱动内核代码行数~200 行~40 行用户态代码行数~20 行(应用层)~40 行(就是驱动本身)总代码量~220 行~80 行需要理解的概念ioremapiowrite32、字符设备注册、主次设备号openmmap、指针操作硬件寄存器操作方式(和普通 C 变量一样)每次 I/O 的系统调用每次read()write()都走只在mmap时走一次调试printkdmesgprintfgdb传统内核驱动 = 住在内核里,性能高但开发难、崩了死系统。

2026-07-29 14:46:21 241

原创 嵌入式调试技巧:影子寄存器——不靠 printf,也能看清芯片“脑子里“被写了什么

/ 覆盖写入,只保留最新值适合:排查"最终配置是什么"、“哪个值被覆盖了”维度printf影子寄存器性能开销大(串口 IO)无(RAM 写入)对时序的影响严重无信息量单次全量历史回溯能力无随时查看开关成本改代码、重编译一行注释/宏适用场景慢速业务流程硬件寄存器配置、时序敏感代码核心思想:用 RAM 空间换调试可见性。1KB 的 RAM 在 STM32 上可能不算小,但比起"花两天时间排查一个时序 bug",这 1KB 的代价太值得了。

2026-07-27 17:49:57 12

原创 CAT24C16 EEPROM 驱动开发指南:从数据手册到工程代码

CAT24C16 的 11 位地址 = I2C 设备地址的低 3 位(A10~A8)+ Word Address 的 8 位(A7~A0)I2C 总线上实际发送:└── I2C 设备地址 ──┘ └──── Word Address ────┘│ CAT24C16 EEPROM 驱动开发要点 ││ ││ 1. 2KB = 2048 字节 = 128 页 × 16 字节 ││ ││ 2. I2C 地址 = 0xA0 | ((addr >> 7) & 0x0E) │。

2026-07-23 17:18:52 334

原创 STM32 IAP + Modbus 踩坑日记:四天四夜,腱鞘囊肿都犯了

STM32 + FreeRTOS 项目,强烈建议勾选 Micro LIB内存分配都走 FreeRTOS,不需要 C 库堆printf只用来打调试日志,Micro LIB 足够用省代码体积,少出问题printf即使是调试日志,也可能在运行时被调用即使只有出错重试才会打,那也是会被调用的第一次调用就触发 stdio 初始化,就可能出问题不用就注释掉,用了就要考虑后果启动文件堆大小检查一下默认 512 字节真的不够标准库用如果非要用标准库,至少改成0x2000(8KB)

2026-07-06 15:34:11 28

原创 从数据手册到代码:MCU 外设驱动开发指南

数据手册 C 代码时序图(Figure) ──翻译──→ read() / write() ← 第2层寄存器表(Table) ──翻译──→ .h 宏定义 ← 第0层上电时序 ──翻译──→ init() ← 第5层传输函数(公式) ──翻译──→ set_value() ← 第4层量程参数 ──翻译──→ set_range() / priv ← 第4/1层换一颗芯片,变的只是第0层和第2层,第3~5层的结构完全不变。

2026-06-24 16:52:23 27

原创 FPGA比特流(Bitstream)深度解析:从门电路到硬件配置的魔法

FPGA比特流(Bitstream)是一个二进制数据文件,包含了配置FPGA(现场可编程门阵列)内部所有可编程元素的完整信息。简单来说,它就是FPGA的"DNA"——决定了FPGA将实现什么具体的数字电路功能。FPGA比特流是连接软件设计和硬件实现的桥梁,它不仅仅是简单的二进制文件,而是包含了FPGA所有可编程资源的完整配置信息。设计优化:了解比特流结构有助于优化资源利用率调试加速:直接分析比特流可以快速定位硬件问题安全加固:正确使用加密和认证保护知识产权动态重构:利用部分重配置实现灵活的系统架构。

2026-06-15 18:00:46 298

原创 (K12)static 局部变量什么时候会出问题?

static 安全性判断该函数是否可能被多个执行上下文同时调用?│┌──── 否 ─┤──── 是 ──┐│ │ │▼ │ ▼✅ 安全 │ ❌ 不安全可用 static │ 会数据竞争│ │ ││ │ ▼│ │ 必须选择以下方案之一:│ │ │ 方案A: 改回局部变量 ││ │ │ 方案B: 加互斥锁 ││ │ │ 方案C: 每个任务各持一份 ││ │▼ ▼"同时调用"的具体含义:│ 1. 两个不同任务调用同一函数 ││ 2. 任务 + 中断调用同一函数 │。

2026-06-12 10:49:47 21

原创 (K12)嵌入式 FreeRTOS 堆栈配置与 static 优化实战指南

核心原则一句话栈配置先估算调用链,再分配栈,最后用 WaterMark 验证static 优化> 64B 且在深层调用链且单任务调用的局部变量 → 改 static + memset溢出检测方法2 全程开启,Hook 函数做安全停机,不要关Heap 配置按需计算 × 1.5~2.0 安全系数记住:嵌入式系统中,栈溢出不会报编译错误,但它会在你最不希望的时候,以最难调试的方式杀死你的系统。预防远比调试重要。

2026-06-12 10:34:35 21

原创 [特殊字符] 嵌入式开发踩坑记:一个全局变量引发的血案

与发送次数相关:问题与配置命令的发送次数强相关,与运行时间弱相关无硬件故障迹象:所有硬件信号测量正常软件层面卡死:系统在函数调用中"消失",无崩溃、无重启难以稳定复现:增加了调试的难度和成本这个问题的诡异之处在于,它既不像典型的硬件故障(信号异常),也不像常见的软件错误(内存溢出、死锁有明显特征)。下一节我们将深入分析这个问题的根本原因。简单说,就是两个或多个执行路径同时访问同一份数据,导致数据被意外覆盖。问题点修复方案效果全局变量冲突使用局部静态变量txPack隔离发送数据状态被破坏。

2026-06-08 15:51:58 26

原创 【嵌入式开发】FreeRTOS 性能优化与调试技巧

优化方向技巧任务调度合理优先级、减少任务数、精确周期内存管理静态分配、内存池、合理堆大小中断处理保持简短、合理优先级代码优化高效数据结构、减少浮点运算调试工具SystemView、GDB、栈检测核心原则测量先行:优化前先测量性能指标定位瓶颈:找到性能瓶颈再优化循序渐进:小步优化,逐步验证希望这些技巧能帮助你打造更高效、更稳定的 FreeRTOS 系统!系列文章回顾FreeRTOS 实战入门:从项目代码学起FreeRTOS 任务调度原理与优先级设置实战FreeRTOS 内存管理策略与实战。

2026-05-11 15:01:29 725

原创 【嵌入式开发】FreeRTOS 实战项目架构设计

架构要素设计要点分层架构应用层 → 服务层 → 驱动层任务划分单一职责,合理优先级通信机制队列传递数据,事件组同步状态错误处理分类处理,看门狗保护资源管理静态分配为主,动态分配为辅可扩展性命令注册机制,状态机模式架构设计 checklist✅ 是否遵循单一职责原则?✅ 模块间耦合是否最小化?✅ 任务优先级是否合理?✅ 通信机制是否选择恰当?✅ 是否有完善的错误处理?✅ 是否有监控和调试手段?一个好的架构能让你的项目事半功倍。希望这篇文章能帮助你设计出优秀的 FreeRTOS 项目!

2026-05-11 14:58:23 459

原创 【嵌入式开发】FreeRTOS 任务间通信方式全解析

通信方式核心用途关键字队列固定大小数据传递事件组多事件同步信号量资源计数互斥锁临界区保护任务通知轻量级通知消息缓冲区变长消息流缓冲区流式数据选择建议简单通知→ 任务通知数据传递→ 队列多条件等待→ 事件组资源保护→ 互斥锁资源池→ 计数信号量变长数据→ 消息缓冲区流式数据→ 流缓冲区掌握这些通信方式,你就能灵活地设计任务间的协作机制了!下一篇预告:FreeRTOS 实战项目架构设计📝作者注:任务间通信方式的选择需要结合实际需求,没有绝对的优劣之分。

2026-05-11 14:49:22 488

原创 【嵌入式开发】FreeRTOS 中断管理与临界区保护实战

临界区是一段代码,在执行期间不能被中断打断,否则会导致数据不一致。// 临界区示例:共享资源访问// 临界区开始// 读取temp++;// 修改// 写回// 临界区结束如果在执行这段代码时被中断打断,可能会导致计数器值错误。概念要点中断安全函数使用xxxFromISR版本临界区保护或互斥锁中断优先级低于才能调用 APIISR 原则保持简短,快速退出核心原则中断中只能调用中断安全的 API临界区代码要尽可能短使用队列实现 ISR 与任务的通信合理设置中断优先级。

2026-05-11 14:45:54 282

原创 【嵌入式开发】FreeRTOS 内存管理策略与实战

内存分配方式优点缺点适用场景动态分配灵活,按需分配内存碎片,不确定时间复杂系统,需要动态创建静态分配安全,确定时间不灵活,编译时确定资源受限,实时性要求高最佳实践建议优先静态分配:任务、队列、信号量等优先使用静态方式合理估算内存:根据任务复杂度设置栈大小启用检测钩子:栈溢出、内存分配失败检测定期检查内存:使用监控掌握内存管理是嵌入式开发的必修课。合理的内存管理策略能让你的系统更加稳定可靠。下一篇预告:FreeRTOS 中断管理与临界区保护实战📝作者注。

2026-05-11 14:39:09 431

原创 【嵌入式开发】FreeRTOS 任务调度原理与优先级设置实战

概念要点调度策略抢占式,高优先级优先优先级数值越大优先级越高任务函数必须是,包含初始化和主循环上下文切换保存/恢复寄存器,实现任务切换关键函数vTaskDelay优先级设置原则紧急任务高优先级:如协议解析、中断处理周期性任务中优先级:如数据采集、通信后台任务低优先级:如状态监控、日志记录掌握任务调度原理和优先级设置,是成为优秀嵌入式开发者的必经之路。希望这篇文章能帮助你!📝 :任务优先级设置没有绝对标准,需要根据项目实际需求调整。建议从简单的优先级划分开始,逐步优化。

2026-05-11 14:35:33 329

原创 【嵌入式开发】FreeRTOS实战入门:从项目代码学起

/ 用位表示不同事件1// 用位表示不同事件 # define PROTOCOL_EVENT_ERR(1 << 0) // 第0位:错误事件 # define PROTOCOL_EVENT_OK(1 << 1) // 第1位:成功事件<<// 用位表示不同事件 # define PROTOCOL_EVENT_ERR(1 << 0) // 第0位:错误事件 # define PROTOCOL_EVENT_OK(1 << 1) // 第1位:成功事件0// 第0位:错误事件1。

2026-05-11 14:26:45 556

原创 奈奎斯特采样定理实战复盘:1kHz采样率采1kHz正弦波,为啥采出来全是0?

作为一名振动测试、数据采集行业的工程师,本以为奈奎斯特采样定理是本科数字信号处理入门基础,早已刻在脑子里。直到前几天现场调试数据采集仪,默认设置兰了采样率1kHz,去采集标准1kHz正弦波信号,结果上位机波形全程是一条零电平直线,完全看不到波形变化。我第一反应是传感器故障、接线接触不良,折腾半天找不到原因。奈奎斯特采样定理都忘了?瞬间尴尬到无言以对。理论背了无数遍,一到工程实操直接踩坑。为了彻底吃透原理、避免以后再犯低级错误,我把。

2026-05-08 09:27:22 110

原创 字节序问题分析:不同数据构建方式导致的结果差异

不同的数据构建方式会导致不同的结果。理解字节序的原理,选择合适的数据构建方法,对于确保通信协议的正确性至关重要。通过这个案例,我们可以看到,即使是看似简单的数据构建操作,也需要考虑字节序等底层细节,这正是嵌入式开发的魅力所在。正确的选择取决于目标设备或协议所要求的字节序格式。对于ADS125H02芯片,根据注释和测试代码,应该使用。存储数据,因为数组元素在内存中是连续存储的。构建数据,每个字节的位置都是固定的。

2026-04-24 11:37:02 274

原创 嵌入式Web服务器CGI机制深度解析:从浏览器请求到Linux板卡执行全流程

││──────────────────▶ │嵌入式Linux板卡││用户浏览器││┌────────────────────────────┐ │││◀────────────────── ││嵌入式Web服务器 (HTTPD)│ │└─────────────────┘HTTP响应││• 监听80端口│ │││• 解析HTTP请求│ │┌─────────────────┐││• 执行CGI程序│ ││客户端││┌──────────▼─────────────────┐ │。

2026-04-21 11:15:46 472

原创 我的创作纪念日

在有限的精力下,我选择轻量化、高质量的创作节奏:白天专注本职开发工作,利用夜晚、周末的碎片时间,梳理当天的实战案例、调试踩坑点与学习笔记。对我而言,写博客不仅是内容分享,更是自我复盘、梳理知识体系的绝佳方式,让碎片化的开发经验形成系统化沉淀。,精进 STM32 裸机开发、嵌入式Linux驱动开发、工业实时通信、硬件底层优化等核心能力,持续打磨寄存器操作、内核并发、外设驱动等硬核技术,拓宽技术深度与广度。,整理文章的过程,让我对底层硬件、代码逻辑、协议原理的理解更加扎实,实现了技术与认知的双向提升。

2026-04-16 11:33:00 358

原创 指针使用详解:从基础到实践

指针是地址:存储的是内存地址,不是实际值解引用获取值:使用操作符获取指针指向的实际值取地址获取指针:使用操作符获取变量的地址类型匹配:确保指针类型与指向的数据类型一致空指针检查:使用指针前检查是否为NULL内存安全:避免野指针和越界访问指针是C语言的强大特性,正确使用可以提高代码效率和灵活性,特别是在嵌入式系统开发中。通过理解指针的基本概念和常见用法,你可以写出更高效、更可靠的代码。

2026-04-16 09:24:12 245

原创 STM32 开发Modbus必看基础:寄存器、功能码、踩坑点全梳理

Modbus单个寄存器16位,STM32定义缓存必须用uint16_t数组存储;32位变量(uint32_tfloat),需要强制转uint8_t*拆分字节,再组合两个16位寄存器解析;不要用32位变量直接接收Modbus 16位数据,会出现数据错位。Modbus寄存器固定16位,是通信协议标准,和STM32 32位硬件寄存器无关;四大寄存器+对应功能码,是Modbus通信的核心,绝对不能混用;手册地址从1开始,代码地址从0开始,-1偏移是必做步骤;

2026-04-15 16:13:45 511

原创 Keil5调试避坑:函数return值监控全攻略(附实际问题解决)

很多开发者会遇到「断点打不上」「return值显示」「R0寄存器值异常」等问题,本文结合实际调试场景,总结return值监控的正确方法、常见坑及解决方案,帮你高效定位问题。「现象」:断点触发后,查看R0寄存器,显示值为0x08009634这类以0x0800开头的地址,而非HAL_OK(0x00)、HAL_ERROR(0x01)等预期返回值。「根本原因」:断点触发时,变量尚未创建。跳出后,直接查看R0寄存器,值即为函数return值(此时函数已执行完毕,R0稳定存储return值)。

2026-04-13 15:47:56 75

原创 从Linux小白到驱动开发者:为什么我必须在驱动中使用private_data

基于我的经验,我总结出了使用总是在open函数中设置private_data在其他操作函数中通过private_data获取设备信息配合适当的锁机制保护共享数据为多设备实例设计合适的数据结构在release函数中清理资源从最初的困惑到现在的熟练运用,机制让我深刻理解了Linux内核设计的精妙之处。它不仅仅是技术实现,更是一种设计哲学的体现。希望我的经验能够帮助更多开发者理解并正确使用这个重要的机制。记住:好的驱动代码,从正确使用private_data开始!

2026-04-09 14:39:57 248

原创 深入理解CRC校验算法:从CRC-8-ATM到通用实现原理

CRC校验算法是数据通信和存储中不可或缺的错误检测机制。CRC-8-ATM算法原理:多项式x⁸+x²+x+1,初始值0xFFADS125H02 CRC-2实现:基于CRC-8-ATM,取高2位作为2位CRC多种实现方法:位操作法、查表法、切片查表法其他常见CRC算法:CRC-8、CRC-16、CRC-32及其应用场景性能优化技巧:查表法提升性能,硬件加速方案实际应用案例:SPI通信、Modbus、以太网等错误检测能力:CRC位数越多,检测能力越强计算复杂度:嵌入式系统需要权衡性能与资源。

2026-04-08 10:55:05 529

原创 数电模电核心概念梳理:从基础到共模/差模

差模信号 (Differential Mode)定义:两个输入端信号大小相等、相位相反的分量物理意义:有用的信号,希望被放大数学表示电路符号:通常用Vin+和Vin-表示共模信号 (Common Mode)定义:两个输入端信号大小相等、相位相同的分量物理意义:噪声或干扰,希望被抑制数学表示例子:电源噪声、温度漂移、地线干扰模电处理连续世界,讲究精度、带宽、噪声数电处理离散世界,讲究速度、时序、逻辑共模/差模是连接两者的重要概念:,差模信号承载信息,共模信号承载噪声。

2026-04-02 19:03:50 301

原创 三极管详解

1.核心本质:三极管是电流控制型器件(B极小电流控制CE极大电流),这与MOSFET(电压控制型)不同。2.三种状态截止(关)、放大(线性控制)、饱和(开)。务必理解!3.两大用途开关和放大。4.NPN更常用:先吃透NPN型,PNP原理类似,只是电流方向和电源极性相反。5.动手是关键:用电路仿真软件(如EveryCircuit、LTspice)或买一个三极管套件(如S8050, 9013),按照开关电路接一下,用万用表测测各点的电压变化,理解会深刻十倍!

2026-04-02 18:57:54 522

原创 电路隔离:原理、实现与电路分析详解

特性光耦隔离变压器隔离电容隔离数字隔离器隔离电压中高高中中高速度慢-中中快很快功耗中高中低低成本低中中高集成度低低中高寿命有限长长长电路隔离是现代电子系统设计中不可或缺的技术,它平衡了信号/能量传输需求与电气隔离要求。正确理解和应用隔离技术,能够显著提高系统的可靠性、安全性和抗干扰能力。在实际设计中,需要根据具体应用场景,综合考虑隔离等级、速度、功耗、成本和尺寸等因素,选择最合适的隔离方案。

2026-04-02 18:53:46 558

原创 Linux 驱动开发流程(带最小可运行代码 + 通俗类比)

这个设备能干什么(open/read/write)cdev = 内核里的“设备通讯录”设备号 → file_operationsLinux 字符设备驱动的核心是通过 cdev,将设备号映射到 file_operations,从而让用户空间调用最终执行驱动代码。

2026-04-02 14:34:34 276

原创 【Linux驱动开发完全指南】从零开始搞定IMX6ULL驱动开发——小白入门 + 完整流程 + 面试攻略

多动手、多看内核源码。这篇文章从环境搭建到ADC/PWM子系统,基本覆盖了嵌入式Linux驱动入门所需的核心知识。但真正的理解必须来自实际敲代码、碰到报错、翻内核源码解决问题的过程。hello驱动→ LED驱动(GPIO子系统)→ 设备树重构LED驱动→ GPIO中断(按键)→ 中断消抖(定时器)→ 阻塞/非阻塞/poll/异步通知→ input子系统→ PWM/ADC子系统每一步都要真正跑通,不只是复制代码。🚀参考资料《Linux设备驱动程序》(LDD3)

2026-04-02 13:37:43 350

原创 VDAC和IDAC区别

电流信号在长线缆传输中,不受线缆电阻引起的压降影响,对电磁干扰也不敏感。:在工业控制中(如驱动4-20mA变送器),一个IDAC加一个精密电阻,可以构成非常简洁、线性的V-I转换电路。它直接输出电流,没有低阻抗输出级。在它的驱动能力内,无论负载电阻如何变化(在一定范围内),它都输出一个固定电压。:负载电阻过大时,输出电压可能超过其最大合规电压,导致电流无法维持恒定。:驱动重负载(低电阻)时,需要提供大电流,可能造成电压跌落或器件发热。在它的合规电压范围内,无论负载电阻如何变化,它都输出一个固定电流。

2026-04-02 13:28:24 498

原创 从手动注册到自动枚举:聊聊 Linux 设备发现的三种境界

没有自我介绍能力。CPU 无法通过物理总线直接问:“嘿,你是什么设备?”(比如 I2C 接口,CPU 只知道地址,不知道接的是电容屏还是加速度计)。I2C、SPI、LCD 屏、GPIO 控制的 LED/按键。在.dts或.dtsi文件中编写node。内核启动时解析 DTS,将其转换成结构体,随后与匹配。设备类型是否需 DTS 节点发现机制备注是DTS 解析匹配现代嵌入式开发核心USB/PCIe否协议自动枚举硬件自报家门旧式 Platform否静态 C 代码注册已基本淘汰,面试需知。

2026-04-02 11:27:39 271

原创 Linux 驱动文件操作函数全解析:小白理解

这些函数就像是一套。

2026-04-01 17:07:29 196

原创 OMAP-L138 McBSP与深度睡眠模式详解

McBSP是一种高速、全双工的串行通信接口,专为与音频编解码器、数据转换器等串行设备连接而设计。全双工通信:支持同时收发数据协议兼容性:支持TDM、I2S、SPI等多种串行协议独立时钟系统:收发时钟和帧同步信号独立可控数据处理能力:支持μ-law/A-law数据压缩扩展通道扩展性:最多支持128通道的多通道选择模式性能优化:内置缓冲FIFO,支持EDMA事件触发OMAP-L138的McBSP接口和深度睡眠模式是其在音频处理和低功耗应用中的核心优势。

2026-04-01 15:24:19 328

原创 C语言数组参数传递详解:从DAC53204驱动看指针与数组的关系

首先,让我们看看modeDAC53204_MODE_IOUT, /* CH0 电流输出 */DAC53204_MODE_IOUT, /* CH1 电流输出 */DAC53204_MODE_OFF, /* CH2 关闭 */DAC53204_MODE_OFF /* CH3 关闭 */CH0和CH1设置为电流输出模式CH2和CH3设置为关闭状态数组名自动转换为指针:传递的是数组首元素地址无数组拷贝:提高了函数调用效率函数接收指针:可以通过指针运算访问数组元素长度信息丢失。

2026-04-01 13:47:35 506

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除