M601 Cat.1模块软件资源全解析:从AT指令到OpenCPU开发实践
拿到一块M601 Cat.1模块干硬件的人第一反应是查引脚、看参考设计、量电平但真正让项目跑起来的往往是软件资源能不能跟上。从AT指令到固件烧录从SDK到调试输出软件资源的完整度直接决定你从“板子能亮”到“业务上线”要折腾多久。这篇文章就把M601这套软件资源做一个整体梳理不念手册只讲实际开发里面哪些东西最值得先看、先装、先跑通以及我在折腾过程中踩过的那些坑。如果你是刚接触Cat.1方案或者正在评估M601能不能用在你的产品里这篇文章能帮你省下不少翻文档的时间。下面直接进入正题。1. 先盘清楚一套完整的Cat.1软件资源到底包含什么很多新手拿到M601的SDK压缩包解压之后面对一堆文件夹不知道从哪下手。实际上Cat.1模组的软件资源可以分成四个层次搞清楚了层次关系后面所有操作都不会乱。1.1 四个层次文档、工具、固件、源码M601的软件资源首先是文档层。这层最容易被忽略但恰恰是最重要的。完整的资料包通常包括《AT指令手册》《硬件设计指导书》《功耗优化指导书》《量产测试指导书》和若干应用笔记。其中《AT指令手册》是日常开发中使用频率最高的所有网络注册、数据收发、Socket操作、MQTT连接、HTTP请求都靠AT指令完成建议拿到资料包之后先把目录读一遍做到心里有数。工具层包含固件下载工具、日志抓取工具、串口调试助手、量产烧录工具等。这些工具是开发过程中的“工具箱”各有用处。固件下载工具负责把编译好的固件写入模组日志抓取工具负责看模组运行时的内部打印量产烧录工具则是在生产线上大批量写入固件和数据时用的。固件层是模组运行的灵魂。M601会提供不同版本的固件常见的有基础AT固件、带OpenCPU能力的固件、以及针对特定运营商网络做了优化的定制固件。所谓OpenCPU就是模组内置了MCU能力你的业务逻辑可以直接跑在模组内部外挂一颗主控芯片就可以省掉这对成本敏感的产品来说意义重大。源码层指的是SDK开发包里的示例代码、库文件、编译脚本和源码。如果你只是用AT指令做开发SDK里的示例工程可以简单看看如果你要基于OpenCPU做二次开发那SDK的工程结构、API接口、编译流程就必须要搞透了。1.2 M601这类Cat.1模组在软件上的特殊性为什么专门要强调Cat.1模组的软件资源因为Cat.1和大家更熟知的NB-IoT、Cat.4在软件接口上差异很大。NB-IoT模组通常只支持少量数据业务Socket数量少、带宽低软件设计上偏向低功耗和窄带传输。Cat.4模组带宽高软件上往往跑着复杂的TCP/IP协议栈甚至支持多路并发。M601所在的Cat.1阵营正好卡在中间它支持LTE网络但带宽被限制在5Mbps下行和2Mbps上行这个速度跑语音、跑图片都没问题但软件上的协议处理和资源调度又不需要像Cat.4那么复杂。这种定位带来的一个直接结果是M601的软件资源在设计上更注重“适中”和“好用”。协议栈代码量适中二次开发门槛比Cat.4低AT指令集的复杂度又比NB-IoT高不少支持的功能点覆盖了绝大多数物联网场景。在评估软件资源时不需要拿Cat.4的高标准去卡它也不要拿NB-IoT的简单度去低估它把握好这个尺度就对了。2. 开发环境搭建与工具链选型这一关过了后面都顺软件资源的实际使用第一步就是把开发环境跑起来。M601的开发环境搭建有几个关键决策点我逐个说。2.1 宿主机环境与编译工具链的选择如果你拿到的是纯AT固件那基本不需要搭建编译环境一个串口工具就搞定所有操作。但如果你要玩OpenCPU就必须在PC上搭建交叉编译环境。M601的OpenCPU SDK通常基于GCC交叉编译工具链目标平台是ARM架构。我建议用Ubuntu 18.04或20.04 LTS作为宿主机系统Windows 10配合WSL也可以但是文件路径、串口映射、USB驱动这些环节会多出不少麻烦。实际项目里团队里至少有一台Linux开发机是最省心的。工具链方面SDK包里一般会有现成的交叉编译工具链压缩包解压后配置好环境变量就能用。这里有一个关键坑不要自己去网上下载所谓“兼容”的ARM工具链不同版本的glibc、内核头文件会导致编译出来的程序在模组上跑不起来甚至直接导致系统崩溃。老老实实用SDK自带的工具链版本匹配是编译环境最核心的保证。2.2 固件下载工具的驱动问题固件下载这一步很多人会在驱动上卡住。M601通常支持串口下载和USB下载两种方式USB下载速度快但需要安装厂商提供的USB驱动。串口下载则完全依赖板子上的UART转USB芯片比如常见的CH340或CP2102对应的驱动在系统里通常能自动识别。我建议在开发阶段用USB下载因为固件包动不动几十MB串口下载速度只有115200bps一次下载要好几分钟碰到调试期频繁烧录就是纯折磨。USB下载在M601上一般能跑到几Mbps体验完全不一样。另外下载工具的配置项里有一个“擦除Flash”选项。开发阶段建议勾选全擦除确保固件是全新写入但量产阶段必须使用专门的量产工具并且不能全擦否则会把出厂校准数据、IMEI等关键信息一并擦掉模组就变成砖头了。这个细节后面会专门讲。2.3 编译流程与脚本化构建OpenCPU SDK的编译流程通常是这样的导入SDK工程修改业务代码执行编译脚本生成固件包。SDK会提供一个构建脚本比如build.sh执行之后自动完成库文件链接、代码编译、固件打包的整套流程。我习惯把编译脚本在SDK项目根目录下重新封装一层把输出路径和日志保存做好。比如编译输出文件名通常会包含版本号和日期这个可以在脚本里用变量自动生成避免手动改名的低级错误。团队协作时脚本化构建还能方便持续集成服务器自动编译省掉每天手动编固件的重复劳动。翻看SDK里的Makefile或构建脚本时重点关注三个变量交叉编译工具链路径、链接脚本路径、宏定义选项。这三个变量常常是不同项目之间移植时报错的根源先把它们确认清楚后面编译基本不会出幺蛾子。3. 固件与AT指令体系软件资源里的核心知识固件本身是二进制文件但决定固件好不好用的是它对外暴露的软件接口。M601的软件接口核心就是AT指令体系外加OpenCPU下的API函数。3.1 AT指令分层理解基础指令、网络服务指令、扩展指令M601的AT指令集从上手角度可以分为三层。基础指令是最常见的串口控制命令比如AT测试通信是否正常、ATE0/ATE1关闭或开启回显、ATCGMR查版本号这些指令在任何模组上都是第一关用来确认模组活着且在正常响应。网络服务指令涵盖注册、信号查询、数据业务等。ATCGREG查询网络注册状态ATCSQ查信号强度ATCOPS手动选择运营商网络ATCGDCONT配置PDP上下文。这些指令在Cat.1项目里是使用频率最高的无论是做定位器还是做表计网络注册和数据通道建立都靠它们。扩展指令则是M601的特色能力比如MQTT、HTTP、TCP/UDP Socket、FOTA升级、低功耗配置等。这类指令通常以ATMQTT、ATHTTP、ATSOCKET这类命名开头不同厂商的实现方式差异很大。使用时要特别留意指令的参数定义、超时时间、返回值格式以及同时最多支持几个Socket连接。M601这类Cat.1模组Socket并发数一般在4到8路之间设计业务时要预留余量。3.2 数据业务核心流程注册-激活-建链-收发跑通一个完整的数据链路是验证软件资源好不好的试金石。这里我以一个TCP客户端连接为例把AT指令的执行顺序和注意事项写出来。第一步用ATCFUN1设置模组全功能再用ATCGDCONT1,IP,apn配置APN这里要看你的SIM卡运营商提供什么APN常见的是cmnet或cmiot。第二步等网络注册轮询ATCGREG直到返回7或1和5这类成功值用ATCSQ确认信号强度一般大于10就能正常上网。第三步激活数据业务ATCGACT1,1。第四步建立TCP连接ATSOCKET1,TCP,服务器IP或域名,端口号这里注意域名解析是模组内部完成的不需要主控额外处理。第五步发送数据ATSOCKET1,SEND,长度,数据然后等模组回显发送结果。整套流程里面最容易出问题的环节是APN配置错误和PDP激活失败。APN错了症状就是ATCGREG显示已注册但数据一直不通。排查方法是用ATCGDCONT?查看当前APN设置再对照运营商提供的参数逐项核对。3.3 OpenCPU模式和API接口如果你不需要外挂主控OpenCPU是更彻底的做法。SDK会提供一系列API函数包括网络通信API、外设驱动API、定时器API、存储API等。M601的OpenCPU架构下业务代码和LTE协议栈跑在同一个SoC内数据交互通过内部接口完成不再过串口时延和功耗都有改善。实际在OpenCPU模式下开发要注意两件事。一是API函数的线程模型是多线程的千万不要在主线程里做耗时处理在回调函数里更要避免阻塞否则整个协议栈会卡死。二是内存管理完全由你负责SDK提供的内存分配接口必须配套释放尤其在做长连接和频繁收发数据时内存泄漏是OpenCPU开发里最隐蔽的Bug。4. 实用工具与调试方法遇到问题不慌软件资源里最容易被低估的是调试工具。很多开发者习惯串口一通、AT指令一发然后对着乱码发呆。其实M601的调试手段很完善只是大部分人不知道而已。4.1 串口日志的抓取和分析M601在运行时会输出大量日志这些日志通过专用日志串口输出。使用日志抓取工具时要选择正确的串口号和波特率一般开发板上会标注日志串口的位置。抓取日志时建议用工具自带的过滤功能只保留当前关注的模块输出否则日志刷屏的速度会让你根本找不到关键信息。日志级别一般有Error、Warn、Info、Debug几档。开发阶段建议开到Debug看完整的协议栈交互过程量产固件里则关到Error减少日志输出对系统性能的影响。4.2 抓包工具和协议分析当业务逻辑涉及TCP/IP协议栈、MQTT报文交互时只看模组日志是不够的数据内容到底对不对还得看抓包。M601可以通过开启调试接口把模组内部的网络报文镜像输出再配合PC端的抓包工具进行分析。做法是先用AT指令打开协议栈日志通道把网络层报文输出到一个虚拟接口上然后在PC上运行抓包工具设置好过滤条件就能看到模组发出的MQTT CONNECT报文、TCP握手流程等完整内容。这个手段在定位设备无法连上云平台、服务器端收不到数据、连接异常断开这类问题上非常有效。4.3 量产烧录与生产测试量产阶段使用的软件工具和开发阶段完全不同。开发用的下载工具可以做全擦除、随意烧录调试固件但产线必须用稳定的量产工具只写业务固件和数据区保留模组出厂信息。量产工具通常会配套一个产测脚本脚本里包含模组自动入网测试、连接产测服务器、回读IMEI、写入业务IMEI等步骤。在搭建产测环境时建议把测试服务器部署在本地局域网不要依赖公网避免网络波动影响产测效率和稳定性。产测脚本每次执行的耗时最好控制在10到20秒以内否则整体产量会非常难看。5. 常见问题和排查思路来自项目现场的真实经验我在用M601做项目时遇到过不少问题有些问题很冷门查手册都查不到这里挑几个典型的分享出来。5.1 模组无法注册网络症状是ATCGREG查询一直返回0或2ATCSQ信号值正常甚至显示满格。排查顺序是先看SIM卡是否插好触点是否氧化再看APN和运营商参数接着确认频段是否开启M601支持的LTE Band在中国的三大运营商是全覆盖的但海外频段需要定制固件这个要在选型阶段就确认好最后排除天线问题Cat.1的频段信号容易被干扰天线在金属外壳内的净空区设计很讲究。5.2 固件下载失败或变砖下载失败最常见的是驱动异常或下载工具版本不匹配。关键操作是按住BOOT按键再上电或复位让模组进入下载模式。如果已经变砖表现为串口无响应、开发板指示灯异常也不用太慌重新进入下载模式再烧录一次官方固件基本都能救回来。前提是当时擦除Flash范围别太大如果连BootLoader都擦掉了那就必须用专门的恢复工具了。5.3 数据连接频繁断线短连接场景下TCP连接频繁断开的元凶大多是网络侧空闲连接释放。服务器端和运营商网络的连接保活时间不一样业务端要做好心跳保活建议心跳间隔设置为60到90秒并在服务端配置无数据超时时间两边协同不能光靠模组端单方面努力。5.4 MQTT连接异常和重连风暴MQTT在弱网环境下的表现非常考验模组和主控的配合。我之前遇到过一个项目终端设备数量达到数百台时网络波动后所有设备同时重连服务器直接把云平台压到瘫痪。解决思路是引入随机退避机制让每台设备的重连时间在0到30秒之间随机分布另外把MQTT保活时间设置成服务器配置的两倍以上尽可能降低无效的PINGREQ包数量。遇到模组上报数据时发生过一次串口发送缓冲区溢出问题主要是我在主控侧用了一颗低成本的单片机串口缓冲区只有几百字节。M601的AT指令响应在某些场景下会一次性输出比较长的数据如果主控侧读取不及时就会丢数据。解决方案是换用带DMA的串口实现或者调大主控的接收缓冲区再不行就降低上报频率。5.5 低功耗模式的功耗异常Cat.1模组在低功耗设计上经常出现“功耗怎么都降不下去”的情况。排查低功耗问题时第一步要看是否进入了PSM或eDRX模式。M601这类模组支持PSM省电模式在AT指令里配置好PSM参数后模组在空闲时间会进入类似关机的省电状态但网络侧仍保持注册。第二步是排查外设漏电传感器、LED指示灯、电平转换电路在休眠状态下有没有彻底断电很多项目功耗居高不下其实是外设电路在漏电跟模组本身没关系。我这里有一个特别的经验之前测一块M601开发板的休眠功耗怎么测都有0.5mA的底电流查了半天发现是板子上的电源指示灯串电阻没有断开LED本身吃掉了这部分电流。去掉指示灯后底电流直接降到0.02mA以内。所以说测功耗一定要先确认硬件电路上没有偷电的器件再去调软件参数否则盲调一天也找不准问题。6. 对软件资源做一次合理的二次封装M601的软件资源是“可用”的但离“好用好管”还有距离。SDK原生的AT指令风格偏底层项目里如果直接裸用后期维护会很痛苦。我习惯对AT指令封装一层中间层把常用操作整理成统一的API比如调用一个com_connect_tcp()函数内部自己去处理AT指令交互、超时判断、重试逻辑。这样业务代码看起来更清晰也方便团队协作时别人接手。这种封装虽然占一点RAM空间但在维护性上带来的收益远超那点资源开销。另外SDK自带的示例代码只是教你功能怎么开不会教你代码怎么写才稳妥。比如TCP断线重连的逻辑示例里通常只是简单判断返回值然后重新连接但实际产品里还要考虑重连次数限制、退避策略、数据缓存和补发机制。这些都需要在真正的项目经验里去积累和抽象出来形成自己团队的基础代码库。我个人在使用M601过程中最大的体会是软件资源不是“有了”就行而是要花时间去吃透、去验证、去沉淀。文档再厚不如亲手跑一遍AT指令流程把每一个返回码的含义搞明白SDK再强大不如自己写一套稳定可靠的重连机制把设备放到真实的弱网环境中去考验。开发物联网产品软件资源的消化深度决定了产品在市场上能走多稳。最后想强调一点做这种模组方案的开发千万不要一个人闷头看资料多去社区看看多和用过同方案的人交流。模块的很多坑在手册里是不会写出来的但经历过的人踩过的坑往往能帮你省下几周甚至几个月的开发时间。

相关新闻

联动更新后小蓝熊卡加载闪退UE5崩溃修复指南

联动更新后小蓝熊卡加载闪退UE5崩溃修复指南

最近这个联动版本一更新,我私信列表直接炸了。求助内容翻来覆去就那几个词:小蓝熊卡加载、开启后闪退、UE5崩溃、反作弊报错,还有把DLL错打成“ddl”的。刚开始我以为只是个别玩家环境问题,结果越看越觉得不对劲——这些现象几乎覆…

2026/10/13 11:56:45 阅读更多 →
DSP28335步进电机控制实战:脉冲生成、加减速与回零定位

DSP28335步进电机控制实战:脉冲生成、加减速与回零定位

简介:一套以TI C2000系列数字信号处理器与Xilinx现场可编程门阵列协同控制步进电机的完整工程资料,适合电机驱动、运动控制、工业自动化等领域的软硬件开发者参考。压缩包共248个文件,整体约25兆字节,主要包含处理器固件源代码、F…

2026/10/13 11:56:45 阅读更多 →
STM32软件SPI驱动ST7735:引脚分配、初始化与刷屏优化

STM32软件SPI驱动ST7735:引脚分配、初始化与刷屏优化

简介:这份资源面向使用STM32F103C8T6进行嵌入式显示开发的初学者与进阶开发者,提供基于HAL库、以软件SPI方式驱动1.8寸ST7735 TFT LCD彩屏的完整工程。它解决了硬件SPI资源紧张或引脚受限时如何点亮彩屏的问题,涵盖GPIO模拟时钟、MISO、MOSI与…

2026/10/13 11:56:45 阅读更多 →

最新新闻

AxonHub 集成测试指南:基于 Anthropic Go SDK 的流式(Streaming)功能全解析

AxonHub 集成测试指南:基于 Anthropic Go SDK 的流式(Streaming)功能全解析

AI 应用API网关LLM 网关后端前端 【免费下载链接】axonhub ⚡️ Open-source AI Gateway — Use any SDK to call 100 LLMs. Built-in failover, load balancing, cost control & end-to-end tracing. 项目地址: https://gitcode.com/gh_mirrors/ax/axonhub 点击…

2026/10/13 12:42:45 阅读更多 →
Wing 语言 cloud.Api 的 OPTIONS/HEAD/CONNECT 路由:从测试用例到 tf-aws Terraform 编译产物全解析

Wing 语言 cloud.Api 的 OPTIONS/HEAD/CONNECT 路由:从测试用例到 tf-aws Terraform 编译产物全解析

编程语言编译器云原生语言运行时 【免费下载链接】wing A programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡ 项目地址: https://gitcode.com/gh_mirrors/wi/wing 点击查看 免…

2026/10/13 12:42:45 阅读更多 →
EfficientNet-CondConv 实战指南:条件参数化卷积的原理、源码实现与 Cloud TPU 训练推理

EfficientNet-CondConv 实战指南:条件参数化卷积的原理、源码实现与 Cloud TPU 训练推理

深度学习后端开发工具 【免费下载链接】tpu Reference models and tools for Cloud TPUs. 项目地址: https://gitcode.com/gh_mirrors/tpu/tpu 点击查看 免费下载 本篇技术指南围绕本仓库 models/official/efficientnet/condconv 目录展开,系统讲解条件…

2026/10/13 12:42:45 阅读更多 →
Oracle SQL Developer 18.4.0安装配置与数据库连接避坑指南

Oracle SQL Developer 18.4.0安装配置与数据库连接避坑指南

简介:SQL Developer 18.4.0 是甲骨文公司出品的免费可视化数据库管理工具,面向需要同时操作 Oracle 和 MySQL 等主流数据库的开发人员、数据库管理员及数据分析师,用于解决 SQL 编写繁琐、对象管理低效等问题。压缩包内有约两千个文件&#x…

2026/10/13 12:42:45 阅读更多 →
JMeter入门:从JDK安装到跑通第一个HTTP请求

JMeter入门:从JDK安装到跑通第一个HTTP请求

准备学JMeter的朋友,我劝你先放下那些厚厚的教程,别一上来就背“线程组”“断言”“关联”这些概念。学这工具最快的方式只有一个:先把它装起来,跑通一个最简单的请求,看到真实的响应数据,心里那块石头落地…

2026/10/13 12:42:45 阅读更多 →
打破园区数据孤岛:统一数字平台与智慧园区落地实践

打破园区数据孤岛:统一数字平台与智慧园区落地实践

简介:面向园区管理者、物业运营方与智慧城市方案设计人员,这份《华为智慧园区通用场景解决方案》以“平台生态”为主线,针对管理对象多、运营成本高、服务体验差、应用重复建设等痛点,给出分层分场景的数字化转型路径,…

2026/10/13 12:41:45 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →