自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一道多选题,理清CMOS的静态功耗与动态功耗

CMOS电路功耗分为静态与动态两类。静态功耗源于截止晶体管的亚阈值漏电、PN结反向漏电及栅极漏电,即使在稳定状态仍存在。动态功耗则发生在电平切换时,主要包括负载电容充放电(主要来源)和PMOS与NMOS短暂同时导通产生的短路电流。本题中,“状态转换瞬间MOS管导通”和“负载电容充放电”均属动态功耗,正确答案为A、C。

2026-09-16 15:38:06 207

原创 一道错题讲透SRAM、DRAM与FPGA存储资源

本文通过一道错题深入解析 SRAM 与 DRAM 的本质差异:SRAM 以 6T 锁存结构实现高速、非破坏性读写,无需刷新,适合高速缓存;而 DRAM 采用 1T1C 电容结构,集成度高、成本低,但需定期刷新且读取为破坏性。两者在速度、容量、成本和应用场景上形成互补。结合存储层次结构,阐明了寄存器、Cache(SRAM)、主存(DRAM)、Flash(非易失)的分工逻辑。最终指出,正确答案“存取速度更快”源于 SRAM 的物理结构优势,而非成本或集成度。

2026-09-16 15:23:05 417

原创 `if` 没写 `else` 为什么有时没事:Verilog 组合、时序逻辑与 Latch

Verilog中if无else是否产生latch,关键在于代码描述的是组合逻辑还是时序逻辑。组合逻辑若存在未覆盖的输入分支,综合器会推导出latch以保持状态;而时序逻辑(如边沿触发寄存器)本就具备保持功能,因此缺else不会引入latch。核心原则是:组合逻辑必须确保所有路径均有明确输出值,否则易生成意外latch。 推荐在组合逻辑中先给输出默认值,避免遗漏分支,提升代码可读性与安全性。

2026-09-15 15:37:05 306

原创 U-Boot顶层Makefile怎么读:从变量展开到u-boot.imx

本文针对U-Boot Makefile的阅读难点,提出了一套实用分析方法。全文通过10个核心问题展开: 解析与执行分离:Makefile不是顺序执行的脚本,而是先构建依赖图再选择性执行 变量展开时机;区分=、:=、?=、+=四种赋值的核心差异; 条件判断主体:识别Make与Shell的条件语句; 自动变量替换,理解$@、$<等变量的实时含义等内容

2026-08-06 23:18:15 563

原创 `u-boot.imx` 要镜像头,`printf.bin` 为什么可以直接 `go`?

i.MX6ULL启动镜像需要IVT和DCD的原因在于系统启动阶段的不同需求。BootROM作为上电后的首个执行者,需要通过IVT(镜像向量表)获取镜像布局信息,通过DCD(设备配置数据)初始化DDR等硬件,才能加载并运行U-Boot。而进入U-Boot后,go命令可直接跳转到指定地址执行裸机程序,因为此时DDR已就绪,不再需要这些启动辅助结构。

2026-08-05 22:52:14 593

原创 #define后面没值也能控制功能:C存在性宏追踪实战

本文探讨了嵌入式开发中常见的"存在性宏"(如#define CONFIG_CMD_USB)的工作原理和应用场景。文章首先解释了空宏定义的本质——它仅表示宏名的存在,而不赋予具体值。随后对比了宏与C变量的区别,强调了预处理阶段的特性。文章详细介绍了三种宏判断写法(#ifdef、#ifndef、#if defined)的适用场景,并指出空宏不能直接用作数值判断的注意事项。通过U-Boot启动流程和USB功能两个典型案例,文章展示了宏如何影响代码编译和执行路径,并提出了完整的五层验证链(配置层、预处理层、

2026-08-04 20:50:01 348

原创 `errno` 不是算命先生:嵌入式 Linux C 错误处理实战

在C语言中,错误处理需要遵循特定步骤:首先检查函数返回值判断成功与否,再根据接口类型选择对应的错误获取方式。

2026-08-03 16:18:34 401

原创 48MHz时钟为何用×1探头测不准?一次示波器测量踩坑复盘

调试FPGA板卡时,48MHz时钟信号在示波器×1和×10档下显示差异显著,原因在于探头输入参数不同:×1档输入电容大(约100pF)、带宽低(5-15MHz),导致高频负载重、波形失真;×10档电容小(约12pF)、带宽高(100-500MHz),测量更准确。48MHz信号下,探头电容容抗仅33Ω(×1)vs 276Ω(×10),且长接地线会引入电感干扰。建议测量时使用×10档、地弹簧短接,并确保探头补偿和示波器设置匹配。普通无源探头不适用于高阻抗或差分信号,需换用专用探头。

2026-07-29 21:51:24 578

原创 别再把所有命令塞进 `main()`:用函数指针设计可扩展的 Linux 命令表

本文介绍了一种使用函数指针设计可扩展Linux命令表的方法,解决了传统if-else分支代码臃肿的问题。主要内容包括: 问题分析:传统main()中堆积if-else会导致代码难以维护和扩展 参数处理:正确理解argc/argv的计算方式 函数指针:详解函数指针声明和使用方法 命令表设计: 使用typedef定义统一命令处理器类型 创建命令描述结构体和命令表数组以及分层架构等

2026-07-21 21:48:15 372

原创 Linux 板卡网络不通,别一上来就 ping 百度

本文介绍了Linux板卡网络问题的系统化排查方法。不同于直接ping百度的笼统做法,作者提出分层验证策略:从网卡识别(ip link)、IP配置(ip addr)、局域网连通性(ping同网段)、网关测试(ip route),到外网IP测试(223.5.5.5),最后DNS验证(www.baidu.com)。每个环节通过特定命令快速定位故障层级,如只有lo接口需查驱动,有IP但ping不通网关需查路由表。文末总结了7条核心排查命令,强调"上层不通不查下层"的原则,避免无效操作。

2026-07-19 11:29:35 479

原创 Vivado FPGA 项目 `.gitignore` 到底该怎么写?

本文详细介绍了如何为FPGA项目中的Vivado工程编写合理的.gitignore文件。核心原则是:仅保留手工编写的RTL代码、约束文件、IP配置等"设计意图"内容,忽略工具自动生成的中间文件和构建产物。重点解析了IP目录的特殊处理方式,提供了一份可直接复用的.gitignore模板,并推荐将IP配置文件(.xci)和手写封装分离存放。通过合理配置.gitignore,可以显著减小仓库体积,提高协作效率。

2026-07-18 14:39:44 597

原创 从 `hello.c` 到 ELF:亲手走一遍 GCC 编译、汇编与链接全过程

本文通过一个简单的 hello.c 程序,详细分析了 GCC 编译过程的四个阶段:预处理、编译、汇编和链接。作者使用 gcc -E 生成了预处理文件,观察到头文件展开导致代码膨胀;通过 gcc -S 得到汇编代码,了解优化级别对生成指令的影响;使用 gcc -c 生成目标文件,解释了可重定位文件为何不能直接执行;最后通过链接生成可执行文件,对比了动态链接和静态链接的体积差异。文章还介绍了如何使用 objdump、readelf 等工具分析 ELF 文件结构、符号表和重定位信息,帮助读者深入理解 GCC 编译

2026-07-17 09:18:16 424

原创 FPGA 上到底有哪些硬件资源?这次一次性整理清楚

学习FPGA不仅要掌握Verilog语法,更要理解代码如何映射到底层硬件资源。本文系统梳理了FPGA的各类核心资源:基础逻辑(LUT/FF/进位链)、存储(BRAM/分布式RAM)、时钟(PLL/缓冲)、I/O(Bank/电平标准)、DSP、互连布线等,并指出资源认知对时序优化、接口设计的关键作用。建议开发者建立"RTL→硬件"的思维,从基础逻辑开始,逐步掌握各类资源的适用场景,才能从"能写代码"进阶到"能做好设计"。

2026-07-07 23:38:45 537

原创 写C/C++总分不清头文件来源?这篇速查表帮你理顺

stdio.h><stdlib.h><string.h>:标准 C<unistd.h><sys/*.h>:POSIX / Unix 系统接口:Linux 专属<vector><string><thread>:C++ 标准库平时一眼先分层,再去查具体函数,就不会那么乱。C 与 C++ 头文件最容易让人混的地方,不在于名字难记,而在于它们背后的层级不同。哪些是标准 C哪些是 POSIX哪些是 Linux 专属哪些是 C++ 标准库。

2026-07-06 11:25:32 337

原创 一篇讲清 C 语言正则表达式:`regcomp`、`regexec`、`regfree` 怎么用

本文介绍C语言中使用正则表达式的基础知识和实践方法。主要内容包括:1. 正则表达式的基本概念和常用元字符(如.、*、+、^、$等);2. C语言中处理正则的核心函数(regcomp、regexec、regfree、regerror)及其用法;3. 一个完整的URL匹配示例代码;4. 初学者常见问题和适用场景。文章强调从简单校验场景入手,注意C字符串转义问题,并建议根据实际问题复杂度选择是否使用正则表达式。掌握这些基础后,读者可以处理常见的字符串匹配和校验需求。

2026-06-27 19:00:48 507

原创 Vivado 里的 Testbench 到底在干什么?一篇带你看懂每一部分

用通俗易懂的语言讲解了Verilog testbench的核心概念和使用方法: Testbench本质:是仿真测试脚本,负责给设计模块喂数据、观察输出、判断对错,相当于出题人+监考+阅卷角色。 关键三要素: 激励(Stimulus):主动给DUT的输入动作(如赋值、配置) 监视(Monitor):观察DUT输出 校验(Check):判断输出是否符合预期

2026-06-25 19:54:40 600

原创 Verilog 里 function 和 task 怎么写?.v 文件里能不能放?

本文简要介绍了Verilog中function和task的区别与使用场景。主要要点包括:1)两者都必须定义在module内部;2)function适用于组合逻辑,只能返回单值且不包含时序控制;3)task更灵活,支持多输出和时序控制,但带有延时的task通常仅用于仿真;4)选择依据:单返回值用function,多输出或仿真激励用task。文章还提供了标准写法示例和综合/仿真场景下的典型用法说明。

2026-06-25 19:38:32 389

原创 一篇讲清不同温度锡膏:原理、差异、优缺点和使用建议

低温锡膏更适合怕热器件,回流温度低,对器件更温和中温锡膏通常是通用型选择,很多常规项目最后都会落到这一类高温锡膏更适合后续还有高温工序,或者本身对耐热性要求更高的场景所以这件事本质上不是在比谁更高级,而是在看哪一种更适合你现在这块板子、这批器件和这条工艺链。不同温度锡膏真正拉开差距的,不只是回流温度本身,而是它们对应的整套工艺条件和最终应用场景。低温更温和,适合怕热器件中温更均衡,适合大多数常规场景高温更耐热,适合高温工艺和高可靠需求。

2026-06-22 21:03:52 427

原创 Github Copilot 新手极速上手指南

在日常开发中,最打断心流的往往不是复杂的算法逻辑,而是那些重复性的样板代码、繁琐的单元测试编写,或是突然卡壳忘记某个 API 的具体参数。很多时候,我们花费大量时间在查阅文档和敲击基础语法上,导致真正用于思考架构和业务逻辑的时间被压缩。随着 AI 辅助编程工具的普及,这种情况正在发生改变。通过合理配置和使用智能编码助手,开发者可以将注意力重新聚焦于核心问题的解决,让机器去处理那些机械化的工作。这篇文章将基于实际开发场景,详细拆解如何从零开始搭建并高效利用一款主流 AI 编程插件。

2026-06-17 16:00:00 236

原创 为什么我在 Qt 里做文件传输时,最先补的是协议层

这次在 Qt 里做文件传输,我最大的收获不是终于把文件发出去了,而是重新认识了一遍 TCP。它不是消息队列,也不是文件协议,它只是字节流。上层如果真的想传文件,就得自己把协议补上去。如果你也在做串口、TCP、上位机、嵌入式文件传输,别急着先堆功能。先把协议说清楚,问题会少很多。

2026-06-17 10:54:09 300

空空如也

空空如也

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

TA关注的人

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