电子产品设计开发管理流程:从需求到量产的落地拆解与避坑指南
简介这份文档面向电子产品研发团队与项目管理者系统梳理了从市场需求到量产验收的完整设计开发管理流程适合硬件、软件、结构、测试及采购等多角色协同参考。内容围绕产品经理、工程经理、软件与硬件工程师等职责划分展开涵盖工程立项报告、产品需求规格说明书、软硬件方案设计、原理图与PCB制作、BOM单编制、样机联调、测试验收等关键环节并给出需求获取、分析、变更与跟踪的具体方法以及设计原则和评审要点。资源包共1个docx文件约43KB以文字流程与职责说明为主便于直接查阅或作为内部流程模板参考。目前已有117人学习适合需要建立规范化研发管理体系、明确岗位分工与阶段交付物的团队借鉴使用。1. 电子产品设计开发管理流程从需求到量产的落地拆解很多团队在电子产品设计开发管理流程上翻车不是因为技术不行而是因为流程没有落到可执行的颗粒度。一个典型的场景是硬件工程师画完原理图直接投板软件工程师拿到样机才发现接口定义对不上结构工程师最后发现外壳装不进去。这种“串行开发、各自为战”的模式在消费电子、工业控制、物联网终端等领域反复上演。电子产品设计开发管理流程要解决的核心问题就是把需求、硬件、软件、结构、测试、试产、量产这几个环节的输入输出关系定义清楚让每个阶段有明确的交付物和评审节点。这套流程适合硬件产品经理、研发主管、项目经理以及从软件转硬件管理的工程师。接下来我会按阶段拆解每个环节该做什么、怎么做、参数怎么定、坑在哪里。2. 需求冻结与系统架构把“大概”变成“可验证”2.1 需求冻结的三个硬性条件需求冻结不是开一次会就能搞定的事。我一般要求团队在冻结前满足三个条件第一功能清单有优先级标注P0/P1/P2P0功能必须有明确的验收标准第二关键器件的选型有至少两个备选方案且交期和成本已确认第三接口定义文档电气特性、通信协议、机械尺寸完成交叉评审。很多团队跳过第三步结果硬件和软件对同一个GPIO的理解不一致调试时浪费大量时间。需求冻结的输出物通常包括产品需求文档PRD、系统架构图、接口控制文档ICD、关键器件清单BOM初稿。这些文档不需要多厚但每个参数都要可追溯。比如电源管理部分不能只写“支持5V输入”要写“输入电压范围4.5V-5.5V过压保护阈值5.8V欠压锁定4.2V”。2.2 系统架构评审的检查清单架构评审是需求冻结后的第一道技术关卡。我通常用一份检查清单来驱动评审避免遗漏检查项具体内容常见问题电源域划分各模块供电电压、电流预算、上下电时序上电时序不匹配导致闩锁时钟树主时钟源、分频比、抖动要求时钟走线过长导致EMI超标通信总线I2C/SPI/UART/CAN的地址分配和速率地址冲突、总线负载过高中断优先级MCU中断向量分配和响应时间高优先级中断阻塞关键任务调试接口SWD/JTAG/串口日志的引出方式量产阶段无法在线升级这份清单在评审时逐项过每个问题指定责任人和关闭时间。架构评审不通过不进入详细设计阶段。这个规则听起来简单但很多团队为了赶进度会跳过后面付出的代价往往是改板、改结构、改固件三线并行。2.3 用Python做需求追溯矩阵的最小实现需求追溯矩阵RTM是管理需求变更的核心工具。下面是一个用Python生成RTM的简化脚本输入是需求列表和测试用例列表输出是覆盖关系表# rtm_builder.py # 输入需求列表和测试用例列表输出需求-测试覆盖矩阵 requirements [ {id: REQ-001, desc: 输入电压范围4.5V-5.5V, priority: P0}, {id: REQ-002, desc: 待机电流小于50uA, priority: P0}, {id: REQ-003, desc: 支持UART固件升级, priority: P1}, ] test_cases [ {id: TC-001, covers: [REQ-001], method: 可编程电源扫描}, {id: TC-002, covers: [REQ-002], method: 高精度电流表测量}, {id: TC-003, covers: [REQ-003], method: 上位机发送升级包}, ] # 构建覆盖矩阵 matrix {} for req in requirements: matrix[req[id]] { desc: req[desc], priority: req[priority], covered_by: [] } for tc in test_cases: for req_id in tc[covers]: if req_id in matrix: matrix[req_id][covered_by].append(tc[id]) # 输出未覆盖的P0需求 print(未覆盖的P0需求) for req_id, info in matrix.items(): if info[priority] P0 and not info[covered_by]: print(f {req_id}: {info[desc]}) # 输出完整矩阵 print(\n完整追溯矩阵) for req_id, info in matrix.items(): coverage , .join(info[covered_by]) if info[covered_by] else 未覆盖 print(f {req_id} [{info[priority]}] - {coverage})这段代码的逻辑很直接先建立需求字典再把测试用例的覆盖关系映射进去最后检查P0需求是否有测试覆盖。参数方面priority字段建议只设P0/P1/P2三档P0必须100%覆盖才能进入试产。实际项目中需求可能上百条建议把数据存到SQLite或Excel里用脚本定期跑一遍比人工核对靠谱得多。3. 详细设计与并行开发硬件、软件、结构的协同节奏3.1 硬件设计阶段的交付物与评审节点硬件详细设计通常分三个阶段原理图设计、PCB Layout、投板评审。每个阶段都有明确的交付物和检查项。原理图阶段的核心交付物是原理图PDF和BOM初稿。评审时重点看电源树是否完整、去耦电容是否按器件手册推荐值放置、晶振负载电容是否匹配、复位电路是否可靠。我见过一个项目因为复位电容用了0.1uF而不是手册推荐的0.01uF导致上电复位时间不够MCU偶尔不启动。这种问题在原理图阶段看不出来但批量生产时就是灾难。PCB Layout阶段的交付物是Gerber文件和叠层阻抗报告。评审重点高速信号阻抗是否匹配、电源平面分割是否合理、热敏感器件是否远离发热源、测试点是否引出。对于四层板以上的设计建议做信号完整性仿真至少对时钟线和高速差分线做阻抗验证。投板评审是最后一道关卡检查项包括DRC是否清零、丝印是否重叠、封装是否与实物一致、拼板方式是否便于分板。我一般会要求硬件工程师打印1:1的PCB图把关键器件实物放上去比对这个土办法能发现不少封装错误。3.2 软件开发的版本管理与接口对齐软件开发最容易出问题的地方是和硬件的接口对齐。我的做法是在硬件投板前软件团队必须拿到接口控制文档ICD的冻结版本并基于此完成底层驱动的框架代码。ICD里要定义清楚每个寄存器的地址、位定义、读写权限、复位值。版本管理方面固件代码建议用Git管理分支策略采用maindevelopfeature模式。每次硬件改版对应的固件分支要打TagTag命名规则建议为hw_rev{A}_fw_v{B}比如hw_rev1.2_fw_v0.3。这样在调试时能快速定位到对应的代码版本。下面是一个简单的固件版本检查脚本放在启动代码里方便调试时确认版本// version_check.c // 固件版本检查启动时打印版本信息 #include stdio.h #define HW_REV_MAJOR 1 #define HW_REV_MINOR 2 #define FW_VERSION_MAJOR 0 #define FW_VERSION_MINOR 3 typedef struct { int hw_major; int hw_minor; int fw_major; int fw_minor; } version_info_t; void print_version_info(void) { version_info_t ver { .hw_major HW_REV_MAJOR, .hw_minor HW_REV_MINOR, .fw_major FW_VERSION_MAJOR, .fw_minor FW_VERSION_MINOR }; // 格式HW:1.2 FW:0.3方便日志检索 printf(HW:%d.%d FW:%d.%d\n, ver.hw_major, ver.hw_minor, ver.fw_major, ver.fw_minor); }这段代码在启动时打印硬件和固件版本调试时一眼就能看出板子和固件是否匹配。参数命名建议统一用hw_rev和fw_ver前缀避免和业务变量混淆。实际项目中还可以把版本信息写到Flash的固定地址上位机通过命令读取方便产线追溯。3.3 结构设计与热设计的前置介入结构设计不能等硬件投板后才开始。我的经验是在PCB Layout阶段结构工程师就要介入确认板框尺寸、连接器位置、散热方案。特别是对于带外壳的产品结构工程师需要拿到3D模型STEP格式做干涉检查。热设计方面建议在详细设计阶段做一次热仿真。对于功耗超过2W的板子自然散热可能不够需要考虑散热片或风扇。热仿真输入包括各器件的功耗、环境温度、外壳材质和开孔方式。输出是关键器件的结温预测。如果结温超过器件规格的80%就要改散热方案。结构设计的交付物包括3D模型、2D工程图、装配说明。评审时重点看装配顺序是否合理、卡扣强度是否足够、螺丝柱是否会被拧裂、标签位置是否便于扫描。我见过一个产品因为卡扣设计太紧产线装配时用橡胶锤敲结果把PCB上的晶振敲裂了。这种问题在结构评审时如果做一次装配仿真完全可以避免。4. 测试验证与试产从实验室到产线的惊险一跃4.1 功能测试、环境测试与EMC测试的先后顺序测试验证阶段最容易犯的错误是顺序搞反。正确的顺序是功能测试→环境测试→EMC测试→可靠性测试。功能测试在实验室常温下做验证基本功能是否正常。环境测试包括高低温、湿热、振动验证产品在极端条件下的表现。EMC测试包括传导发射、辐射发射、静电抗扰度验证产品是否干扰其他设备或被其他设备干扰。功能测试的用例要覆盖所有P0需求每个用例有明确的通过标准。比如待机电流测试标准是“小于50uA”测试方法是“高精度电流表串联在电源回路产品进入待机模式后稳定30秒读数”。环境测试的温度范围建议比产品规格多留10℃余量比如规格是-20℃到60℃测试就做-30℃到70℃。EMC测试是最容易翻车的环节。我见过一个产品因为DC-DC电源的开关频率落在AM广播频段辐射发射超标10dB。解决方案是调整开关频率或增加屏蔽罩。EMC整改往往需要改PCB或改器件所以建议在详细设计阶段就做预兼容测试不要等到正式认证才发现问题。4.2 试产阶段的三个关键参数良率、直通率、返修率试产是验证产品可制造性的关键环节。三个核心参数良率Yield、直通率FPY、返修率RMA Rate。良率是最终通过测试的数量除以投入数量。直通率是第一次测试就通过的数量除以投入数量。返修率是售后返回维修的数量除以出货数量。试产数量建议不少于50台覆盖至少3个批次。每台产品要有唯一序列号记录测试数据。下面是一个试产数据统计的SQL示例用于分析良率和直通率-- 试产数据统计计算良率、直通率和返修率 -- 表结构production(id, sn, batch, first_pass, final_pass, return_flag) SELECT batch, COUNT(*) AS total, SUM(CASE WHEN first_pass 1 THEN 1 ELSE 0 END) AS fpy_count, SUM(CASE WHEN final_pass 1 THEN 1 ELSE 0 END) AS yield_count, SUM(CASE WHEN return_flag 1 THEN 1 ELSE 0 END) AS return_count, ROUND(SUM(CASE WHEN first_pass 1 THEN 1.0 ELSE 0 END) / COUNT(*) * 100, 2) AS fpy_pct, ROUND(SUM(CASE WHEN final_pass 1 THEN 1.0 ELSE 0 END) / COUNT(*) * 100, 2) AS yield_pct, ROUND(SUM(CASE WHEN return_flag 1 THEN 1.0 ELSE 0 END) / COUNT(*) * 100, 2) AS return_pct FROM production GROUP BY batch ORDER BY batch;这个查询按批次统计三个指标。参数说明first_pass表示第一次测试是否通过final_pass表示最终是否通过return_flag表示是否返修。实际使用时建议把测试数据实时写入数据库产线看板直接展示直通率趋势。如果某个批次的直通率突然下降要立即排查是物料问题还是工艺问题。4.3 产线测试工装的设计要点产线测试工装Fixture的设计直接影响测试效率和准确性。设计要点包括探针寿命建议不低于10万次、定位精度±0.05mm、测试点覆盖所有关键信号和电源、防呆设计防止反向插入。工装的控制程序通常用LabVIEW或Python编写。测试项包括电源电压、待机电流、工作电流、通信接口、按键响应、LED亮度、传感器读数。每个测试项要有上下限超限自动判定失败并记录数据。我一般会要求工装供应商提供探针的规格书和寿命测试报告。另外工装要有校准接口定期用标准件验证测试精度。产线环境温度变化大的话测试阈值要留足够余量否则冬天和夏天的直通率会差很多。5. 避坑与常见问题那些让项目延期三个月的细节5.1 现象样机调试时I2C通信偶尔失败原因上拉电阻阻值偏大加上总线电容超过400pF导致上升沿变缓。在常温下勉强能通信高温下彻底失败。解决用示波器测上升时间按R t_r / (0.8473 * C)计算上拉电阻。标准模式100kHz上升时间不超过1000ns快速模式400kHz不超过300ns。如果总线电容大建议用I2C缓冲器或降低速率。5.2 现象批量生产时MCU烧录失败率5%原因烧录工装的探针压力不够导致SWDIO接触不良。另外烧录程序没有做重试机制一次失败就判定不良。解决调整探针压力到50g-100g增加烧录重试次数建议3次每次重试前复位目标板。同时烧录工装要定期清洁探针防止氧化层导致接触电阻增大。5.3 现象产品在客户现场死机复位后恢复原因看门狗喂狗时间设置过长或者喂狗任务被高优先级中断阻塞。另外电源纹波在负载突变时超过MCU的容忍范围。解决看门狗超时时间建议设为最大任务周期的2倍。喂狗操作放在最低优先级任务或独立硬件看门狗芯片。电源纹波用示波器在满载和空载切换时测量确保在MCU规格范围内。如果纹波超标增加输出电容或调整反馈环路。5.4 现象EMC辐射发射在30MHz-100MHz超标原因DC-DC电源的开关节点走线过长形成天线效应。或者晶振外壳没有接地成为辐射源。解决开关节点走线尽量短铺铜面积小。晶振外壳接地周围包地过孔。如果仍然超标在开关节点加RC吸收电路或磁珠。整改后要重新做预兼容测试确认余量至少6dB。5.5 现象结构装配后屏幕出现水波纹原因屏幕排线受到挤压或者屏幕背面的支撑筋压到排线。另外屏幕固定螺丝拧得太紧导致屏幕变形。解决结构设计时给排线留足够的弯曲半径建议不小于排线厚度的5倍。屏幕支撑筋加泡棉缓冲。螺丝扭矩用扭力起子控制建议0.2N·m-0.3N·m。装配后做一次全检用白屏和灰屏检查水波纹。6. 用版本基线管理法把流程固化下来版本基线管理法的核心思想是每个阶段结束时把当前的所有交付物打一个基线Baseline后续变更必须走变更流程。基线包括需求基线、架构基线、设计基线、测试基线、生产基线。每个基线有唯一的版本号比如BL-REQ-v1.0、BL-DES-v1.2。具体操作上我一般用Git管理文档和代码用Tag标记基线。比如需求冻结后在文档仓库打TagBL-REQ-v1.0。硬件投板前在硬件仓库打TagBL-DES-v1.2。固件发布时在固件仓库打TagBL-FW-v0.3。这样任何时候都能回溯到某个基线查看当时的完整状态。变更流程方面任何基线后的变更都要提交变更申请ECR说明变更原因、影响范围、验证方案。变更批准后更新基线版本号并通知所有相关方。我见过一个项目因为改了电源芯片但没通知软件团队导致软件的低功耗策略失效待机电流从30uA变成200uA。这种问题在基线管理下完全可以避免。验证方法上建议每个基线做一次回归测试。回归测试用例从需求追溯矩阵里自动生成覆盖所有P0需求。测试结果和基线版本号一起归档。如果回归测试不通过基线不能发布。最后说一个我自己的习惯每次项目复盘时我会把踩过的坑写成检查项加到下一版的流程文档里。比如“I2C上拉电阻计算”这个检查项就是从一个高温通信失败的项目里总结出来的。流程不是一成不变的它是活的跟着项目一起进化。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

两步把 R1 变成你产品里的“思考引擎“:API 接入实操

两步把 R1 变成你产品里的“思考引擎“:API 接入实操

两步把 R1 变成你产品里的"思考引擎":API 接入实操 【免费下载链接】DeepSeek-R1 探索新一代推理模型,DeepSeek-R1系列以大规模强化学习为基础,实现自主推理,表现卓越,推理行为强大且独特。开源共享&#xf…

2026/10/10 18:29:16 阅读更多 →
TM1维度元素批量重命名:Bedrock零代码方案与实战经验

TM1维度元素批量重命名:Bedrock零代码方案与实战经验

在TM1的日常维护里,给维度改元素名称是我见过最磨人的活。尤其当数据模型跑了一两年、维度里躺着几千个自定义元素,业务部门突然提一句"把实际改成实际值吧",改的人脑子里已经开始预演牵一发动全身的连锁反应了:引用关系的断裂、规则和流程里的硬编码、前端报表的旧名…

2026/10/10 18:29:16 阅读更多 →
字节80wvs智谱90w+,大厂稳还是AI创企赌一把?Agent落地成硬门槛

字节80wvs智谱90w+,大厂稳还是AI创企赌一把?Agent落地成硬门槛

字节80wvs智谱90w,大厂稳还是AI创企赌一把?Agent落地成硬门槛 近日一则帮朋友看offer的用户讨论在脉脉引发关注,字节3-1约80w的年包与智谱按最新估值达90w的年包形成强烈反差。大厂稳还是AI创企赌一把,成为开发者职业路径的典型决…

2026/10/10 18:28:16 阅读更多 →

最新新闻

DEAP情绪识别实战:从数据加载到模型复现的完整指南

DEAP情绪识别实战:从数据加载到模型复现的完整指南

简介:这份资源围绕DEAP数据集展开情绪识别与分类实践,面向从事情感计算、人机交互或生理信号分析的学生与开发者,帮助解决多模态情绪数据如何组织、特征提取与模型训练的问题。压缩包共38个文件,约5.79MB,以28个Java源…

2026/10/11 11:40:12 阅读更多 →
链表反转详解:迭代三指针、递归与头插法的实现与避坑

链表反转详解:迭代三指针、递归与头插法的实现与避坑

很多人在写链表反转时容易卡住,不是没记住代码,而是没想明白那三根指针到底在干什么。你是第一次接触这道题也好,还是刷过几轮又忘了也罢,只要把“就地”两个字理解透,把指针的每一步在纸上画一遍,这个经典…

2026/10/11 11:40:12 阅读更多 →
CNN-BiLSTM光伏功率预测:多变量多步预测与Matlab实现

CNN-BiLSTM光伏功率预测:多变量多步预测与Matlab实现

简介:针对光伏功率预测任务,一份融合CNN-BiLSTM的多变量多步预测Matlab源码与配套数据集可供使用,覆盖数据输入、模型训练、误差计算等完整流程,适合计算机、电子信息工程、数学等专业学生用于课程设计、期末大作业或毕业设计。压…

2026/10/11 11:40:12 阅读更多 →
Qwen-Image-2.1图像编辑完全教程:5个代码示例,从换背景到多主体合成

Qwen-Image-2.1图像编辑完全教程:5个代码示例,从换背景到多主体合成

【免费下载链接】Qwen-Image-2.1 Qwens most powerful open-source image generation model 项目地址: https://gitcode.com/gh_mirrors/qw/Qwen-Image-2.1 点击查看 免费下载 Qwen-Image-2.1 是 Qwen 家族最强大的开源图像生成与图像编辑模型:视觉生成…

2026/10/11 11:40:12 阅读更多 →
Canvas转盘抽奖源码实战:从绘制、旋转到服务端防刷

Canvas转盘抽奖源码实战:从绘制、旋转到服务端防刷

简介:一份面向前端开发者与活动运营者的手机端转盘抽奖互动源码,基于HTML5 canvas与jQuery实现,可快速部署到营销活动或H5页面,解决抽奖场景中视觉表现与交互逻辑问题。压缩包共37个文件,整体约452KB,涵盖p…

2026/10/11 11:40:12 阅读更多 →
Motrix 仓库语言与文档规范:双语发布、公私边界与 Obsidian 文档网关实战

Motrix 仓库语言与文档规范:双语发布、公私边界与 Obsidian 文档网关实战

桌面应用网络后端 【免费下载链接】Motrix A full-featured download manager. 项目地址: https://gitcode.com/GitHub_Trending/mo/Motrix 点击查看 免费下载 本文围绕 Motrix 开源仓库的 .claude/rules/language-and-docs.md 规则文件展开,系统讲解该…

2026/10/11 11:39:11 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →