新闻详情

新闻详情

首页 / 资讯中心 / 详情

嵌入式开发核心技能:通信协议、C语言、Linux与项目实战全解析

发布时间:2026/9/29 3:08:31来源:尧图网络
嵌入式开发核心技能:通信协议、C语言、Linux与项目实战全解析
嵌入式开发者绕不开的那些事从通信协议到项目实战一次讲透入行嵌入式也有十来年了从最早的8位单片机一路做到现在的异构多核处理器踩过的坑、啃过的文档、重构过的代码攒了一肚子话想说。最近在社区里看到不少人在问“嵌入式怎么学”“嵌入式到底做什么”恰好手头刚结束一个工业设备的项目趁着热乎劲把这几年沉淀下来的东西做个梳理。这篇内容不打算做成教程式的说教就当一个老工程师的实战笔记把通信协议、C语言功底、Linux开发、bootloader、AI落地这些硬骨头一块儿啃一啃。不管你是刚接触单片机的学生还是已经在做应用层开发想往底层转的工程师这篇文章应该都能给你一些参考。我始终觉得嵌入式这个行当最大的特点就是“杂”——硬件要懂软件要写协议要啃有时候还得自己焊板子、跑产线。但也正是这种杂让这个领域始终充满挑战和机会。下面这些内容是我在实际项目里反复用过、验证过的东西希望能帮你少走点弯路。1. 嵌入式开发的底子通信协议和硬件基础1.1 五种通信协议怎么选才不踩坑嵌入式的世界里通信协议就像人与人之间的语言选对了事半功倍选错了排查起来能让你怀疑人生。我见过太多项目在通信方式上摔跟头所以先把这块讲清楚。UART是最基础也最常用的异步串行通信硬件上只需要TX、RX两根线实现简单、调试方便。我在调试阶段几乎离不开它打印日志、交互命令行都靠它。但它的缺点也很明显速率上不去一般也就115200bps到几Mbps而且是一对一通信不适合多设备组网。I2C走的是两根线——时钟线SCL和数据线SDA靠设备地址区分通信对象总线可以挂多个设备。驱动能力弱线长了信号就容易出问题。我做过一个传感器采集项目I2C总线拉了快30厘米结果在产线上时好时坏最后把速率从400kHz降到100kHz才稳定。所以I2C适合板内短距离、低速的设备互联比如传感器、EEPROM、RTC这类。SPI是全双工、高速的同步通信一般四根线SCLK、MOSI、MISO、CS。速度可以跑到几十MHz非常适合屏、Flash、SD卡这种大数据量传输。代价就是线多而且一个主机带多个从机时每个从机都要一根独立的片选线。之前做带屏的设备刷新一帧画面几百KB的数据用SPI跑40MHz毫无压力。CAN总线是汽车和工业现场的常客差分信号抗干扰能力强速率虽然只有几十kbps到几Mbps但它有完善的错误检测和仲裁机制多节点组网很成熟。我在做工业设备时几十个控制节点就用CAN连成一条总线距离几十米都很稳。USB就不用多说了速度快、即插即用、能供电缺点是协议栈复杂做Host还是Device完全两套逻辑。之前调一个USB HID设备光枚举和描述符就折腾了好几天。一句话总结板内低速选I2C高速大数据选SPI跨设备调试选UART工业现场多节点选CAN和PC交互选USB。协议本身没有好坏适合场景才是王道。1.2 硬件基础知识看得懂原理图才写得好代码很多软件出身的嵌入式工程师一看到原理图就头疼觉得那是硬件工程师的事。但实际上如果你看不懂原理图你写的代码可能从一开始就建立在错误的基础上。我在项目里反复强调一个观点嵌入式工程师看原理图不需要会设计电路但要能看懂电源怎么供给、信号怎么连接、外设怎么配置。比如你用GPIO去控制一个LED你不光要知道置高电平还是低电平还要看原理图里LED是灌电流还是拉电流接法你用I2C去读传感器你要确认上拉电阻有没有贴、地址引脚怎么接的否则驱动写得再好总线就是不通。另外就是电源树的概念。一个系统往往有多个电压域核心电压、IO电压、模拟电压、备份电压。我之前接过一个项目MCU的IO供电和传感器供电不是同一条电源轨结果I2C电平不匹配通信时好时坏后来加了一颗电平转换芯片才解决。这类问题不写在芯片手册里全得靠你对硬件的理解去排查。还有一点要提醒看datasheet时不要只看功能描述一定要看到引脚定义、电气参数、时序图。芯片能不能用、怎么用全在这些细节里。比如GPIO的上下拉能力、IO翻转速率、ADC的采样保持时间这些参数直接决定你的外围电路和代码写法。2. 嵌入式软件的核心C语言功底与工程化思维2.1 指针、内存和位操作C语言水平的试金石面试嵌入式岗位十个里有九个会考指针和内存。为什么因为嵌入式C语言和纯软件开发的C语言关注点完全不一样。先说指针。嵌入式里指针不只是语法更是访问硬件寄存器的手段。比如STM32的寄存器本质上是内存映射的地址你用指针把它强转成结构体去访问代码可读性和维护性都好很多。再比如函数指针在实现状态机、回调机制时非常好用按键扫描、通信协议解析里到处都有它的身影。内存是另一个重头戏。单片机资源有限RAM可能只有几十KB堆和栈怎么分配、全局变量和局部变量怎么取舍直接决定系统稳不稳定。我自己就吃过亏——在中断里定义了一个大数组结果栈溢出系统跑着跑着就死机查了好久才定位到。中断处理函数里尽量不要定义大的局部变量更不要做耗时的操作这是铁律。位操作更是嵌入式C的日常。操作寄存器时你不可能直接给整个寄存器赋值必须“读-改-写”去置位或清位。宏定义的写法也很讲究比如#define BIT(x) (1U (x))配合|和就能精确控制某一颗引脚。有些芯片支持位带别名区专门解决位操作的非原子性问题这在多线程或中断环境下特别有用。2.2 从“能跑”到“可靠”嵌入式工程级思维的养成很多人写嵌入式代码停留在“功能能跑”的阶段——LED能亮了、串口能发数据了就觉得完事了。但真实的嵌入式开发尤其是在工业、汽车、医疗领域“可靠”远比“能跑”重要。可靠的第一步是防御性编程。入参要检查、返回值要判断、外设操作要确认标志位。我见过太多bug初始化UART后立刻发数据结果数据丢了——因为没有等待发送移位寄存器把数据推出去。这类时序问题看起来玄乎根子就是没做状态确认。第二步是状态机的思维。嵌入式系统天然是事件驱动的按键、消息、网络数据包全都是异步事件。如果全用if-else嵌套去处理逻辑一复杂就崩。这几年我越来越喜欢用有限状态机来组织代码把每个状态、每个转移条件列清楚逻辑清晰了维护也容易。像网络通信协议的处理、菜单系统的导航用状态机写出来简直是一马平川。第三步是分层的思想。驱动层、中间层、应用层要分开驱动层只操作寄存器不关心业务逻辑应用层只调接口不关心底层实现。这样好处太多了换一颗芯片驱动层换掉上层代码一分不用改同事接手你的代码从应用层切入也能快速理解业务。我再补充一点代码规范是真的重要不是形式主义。变量命名清晰、函数职责单一、注释说明“为什么”而不是“是什么”这些习惯在项目交接、问题排查时能省下大量时间。我自己就吃过不规范的亏——翻自己三个月前写的代码愣是没看懂当时的逻辑。2.3 裸机还是RTOS别为了用而用刚入行那会儿总觉得跑个RTOS实时操作系统才显得专业。后来做多了才明白裸机和RTOS是两种思维得看场景选。裸机开发适合逻辑简单、任务单一的系统比如一个温度采集器一个主循环轮询加几个中断就搞定了。裸机的好处是资源占用极低、实时性可控、调试直观。坏处是逻辑一复杂主循环和中断交织在一起优先级和时间片很难平衡。RTOS适合多任务并发的场景比如一个设备既要采集传感器、又要刷屏、还要处理网络通信用裸机写会非常痛苦。用RTOS后每个任务独立栈空间、独立优先级逻辑清晰多了。国产的RT-Thread、开源免费的FreeRTOS都很成熟资料也多。我一般建议超过三个并发任务、或者有时序要求就上RTOS反之裸机更省心。选型也要看团队。如果团队都熟悉裸机硬上一个RTOS引入的复杂度可能比解决的问题还要多。技术选型永远是“适合”最重要。值得一提是现在不少MCU厂商都推出了自己的SDK和中间件比如乐鑫的ESP-IDF、意法半导体的TouchGFX上手门槛已经低了很多新手不必从零造轮子。3. 进阶必闯的几道关Linux、bootloader与嵌入式AI3.1 嵌入式Linux从驱动到应用怎么突破说完了MCU再来说说嵌入式Linux。很多做单片机的人觉得Linux是个坎其实只要掌握了方法Linux没那么神秘。它的核心无外乎三块内核、驱动、应用。内核是操作系统的核心负责进程调度、内存管理、文件系统。做产品开发一般不需要你从零裁剪内核但至少要知道怎么配置内核、编译内核、烧写内核。menuconfig这个命令要会用设备树Device Tree的基本语法要懂。特别是设备树它就是把板级硬件信息描述给内核驱动通过它来匹配设备。我之前调试一个音频Codec花了整整两天才搞明白是设备树里某个引脚复用配错了。驱动是嵌入式Linux的难点。字符设备驱动是最常见的一类核心就是实现open、read、write、ioctl这些操作函数然后注册到内核里。直接操作寄存器、注册中断、使用内核提供的各种子系统接口GPIO子系统、Input子系统、I2C子系统是驱动开发的基本功。内核文档里的Documentation目录是个宝库遇到问题先翻它很多困惑都能解开。应用开发反而是门槛最低的。用Linux系统调用来操作设备节点/dev/xxx本质和写Linux桌面程序没太大区别。做产品时我会建议应用层尽量用标准接口去访问硬件远离直接操作寄存器。这样应用层和底层解耦出了问题也好定位。另外Linux系统里什么都当文件处理这个设计哲学贯穿始终。设备节点、内核日志、甚至是GPIO都可以用文件操作的方式去读写。理解了“一切皆文件”再去看Linux的各种用法会通畅很多。3.2 bootloader系统启动的第一棒你不可不知的底层逻辑嵌入式Linux设备上电后第一个跑的软件是bootloader它的任务简单又关键初始化硬件、加载内核到内存、跳转执行。就像接力的第一棒要是它出了问题后面全白搭。U-Boot算是事实标准几乎所有嵌入式Linux项目都能见到它的身影。实际开发中你不需要重写一个U-Boot但要会配置、编译、烧写、调试。U-Boot里最让人头疼也最重要的是DDR初始化。为什么因为DDR控制器参数调不对内存就是不稳定系统跑着跑着就死机。我记得第一次调DDR参数对着芯片手册里的时序参数一个个试最后用一个跑内存压力测试的命令才确认稳定。这个过程没啥捷径就是耐心加测试。bootloader还要支持加载内核的方式。现在的主流做法是第一级bootloader固化在芯片里的ROM程序加载SPLSPL初始化DRAM后加载U-Boot完整版U-Boot再从Flash、SD卡或网络读取内核镜像。网络加载TFTP/NFS在开发阶段特别有用改完内核不用反复烧写Flash直接网络启动调试效率翻倍。但量产时一般都改成从本地存储启动安全又可靠。内核启动会有很多日志里面藏着大量信息。我在排查启动问题时习惯先看打印信息有没有停在某个地方——是卡在DDR初始化还是卡在内核解压还是卡在设备树解析日志基本都会告诉你答案。学会读启动日志是嵌入式Linux开发的基本功也是排查问题的第一线索。3.3 嵌入式AI边缘计算让设备“聪明”起来这两年嵌入式AI和边缘计算越来越火。以前说起AI都是云端服务器的事现在MCU上都能跑轻量级的神经网络模型了。这对嵌入式开发者来说是福音也是新挑战。边缘计算和嵌入式AI的核心理念是把AI推理放在数据产生的地方优点是低延时、数据不出本地、节省带宽。比如做一个工业缺陷检测设备摄像头采集图像直接在设备上推理发现异常才上报效率比传回云端高得多。ARM的CMSIS-NN、ST的STM32Cube.AI、恩智浦的eIQ这些工具链能把训练好的模型转换成适合MCU的代码加上NPU神经网络处理单元的加持很多图像分类、语音识别场景都已经能在嵌入式设备上实时运行了。有了硬件还得会优化。量化和剪枝是模型部署的关键。我在一个视觉项目里把模型从FP32量化到INT8内存占用直接降到四分之一推理速度提升了好几倍精度损失却很小。另外选择什么样的模型结构也很重要轻量级网络MobileNet、EfficientNet这些就是专门为边缘设备设计的。嵌入式AI最大的挑战是迭代快。几年出一个新框架模型训练用的Python环境部署要用C/C或专用SDK两端要反复对齐。我的建议是别追热点把基础的卷积、池化、量化原理搞明白再学一个主流的部署工具链以不变应万变。4. 学习路线、项目实战与求职面试4.1 嵌入式学习路线从入门到精通的路径规划总是有人问嵌入式怎么学其实路线就摆在那里先从单片机入门再学RTOS然后根据方向往Linux、AI或者硬件设计走。关键是每个阶段的学习方式和检验标准。入门阶段用STM32F103这种经典芯片最合适。不用追求最新的芯片而是把GPIO、UART、I2C、SPI、定时器、中断、ADC这些外设全部吃透。不用看书看得太深跟着小项目做一遍比什么都快。不要贪多入门的时候把常用的外设弄扎实即可。到了进阶阶段可以学一下RTOS。用裸机做几个含多任务、通信的项目之后你会自然体会到RTOS的好处。推荐FreeRTOS或RT-Thread中文资料和社区都很好。另外一个重点是学习怎么调试、怎么分析问题。会用示波器、逻辑分析仪来验证时序会看芯片手册查找寄存器定义这些都是大学课之外真正工作的能力。再往上走就分化了想往底层走学Linux驱动、bootloader、内核想往应用走学Linux应用开发、网络编程、QT界面想往AI走就去弄嵌入式AI部署。方向没有高下之分只有适不适合自己和市场需求。关键是不要一直停留在舒适区要持续往上游走。4.2 从需求到成品嵌入式项目实战该怎么做做了这么多项目我觉得嵌入式项目的流程其实大同小异需求分析、方案选型、原理图设计、PCB打样、驱动调试、应用开发、测试验证、量产交付。每一步都有坑但只要逻辑清晰就能稳扎稳打走下去。需求分析阶段要把系统的功能需求和非功能需求都列清楚。比如一个环境监控设备采集哪些传感器、多久采集一次、数据怎么上报、断网了怎么办、电池能用多久、工作温度范围是多少。这些听着琐碎却直接决定后面的方案选型。方案选型要看综合成本芯片单价、开发难度、供货周期、团队熟悉度。我有个朋友做项目非要追求最新芯片结果缺货整个项目停滞了两个月。在嵌入式领域稳定性往往比先进性更值钱。优先选择市面上用量大、资料多、供应链成熟的芯片方案。驱动调试阶段最核心的是边写边验证。写完一个GPIO驱动就把LED点亮验证一下写完一个UART驱动就自发自收验证一下。不要等所有驱动都写完再统调那样出了问题根本不知道是谁的问题。版本管理要做好从第一天就用Git别等代码混乱了再补救。应用开发阶段重点关注状态机设计和容错处理。比如系统上电可能读传感器失败通信可能超时Flash可能写坏这些异常都要在应用层有兜底逻辑不能让设备跑着跑着就卡死或者死循环。测试阶段一定要做长时间的压力测试。高温环境下测试、频繁断电重启测试、异常报文输入测试这些场景覆盖得越全批量出货后翻车概率越小。我见过一个设备功能测试全过结果在客户现场出现偶发抖动一查才发现是电源纹波引起的这种问题只有长时间跑才暴露得出来。这里还可以提一句参加竞赛的事情。蓝桥杯、电赛、智能车这些比赛确实是锻炼实践能力的好机会。我指导过学生参加比赛发现真正有价值的不只是拿奖而是竞赛逼迫你在短时间里把方案、硬件、软件、调试全流程走一遍这对刚入门的人成长特别快。4.3 求职面试嵌入式岗位到底会问什么嵌入式岗位的面试题其实万变不离其宗核心就三块C语言功底、硬件基础、项目经验。C语言常考指针、内存、结构体对齐、位操作硬件常考通信协议时序、中断处理、电平转换项目经验就是考察你踩过哪些坑、怎么解决的、为什么这么设计。这里我特别想说说“八股文”这件事。现在很多社区的人吐槽面试就背八股什么进程线程区别、堆和栈区别、局部变量和全局变量区别背得滚瓜烂熟。但真正面试官想听的不是背诵而是你有没有真正遇到过这些问题。比如问你“写过RTOS吗”不是让你背调度算法而是想让你讲讲你用RTOS时遇到过什么优先级翻转问题、怎么解决的。怎么准备面试我建议是把每个知识点都结合自己的工作、项目、遇到过的坑来讲把“我了解xxx”变成“我在xxx项目中遇到了xxx问题最后用xxx方案解决”。这样面试官才会相信你的知识不是背的而是沉淀下来的。另外面试也会考察学习能力和解决问题的思路。遇到不会的问题别直接说不会可以尝试着分析思路——比如“我不清楚这个协议的具体实现但从原理上看它可能要考虑数据传输的可靠性、多节点竞争的仲裁机制……”。这种分析问题的能力往往比死记硬背更让面试官认可。哪怕回答得不完全正确但你表现出的逻辑和思维过程是能拉开你和别人的差距的地方。5. 选型、调试与避坑我的独家实操心得5.1 从需求出发的选型策略不只挑芯片更挑生态聊了这么多落到具体项目上第一件事就是选型。很多新手一上来就问“选哪颗芯片好”其实芯片本身没有绝对好坏得看你的需求和环境。选型我在前面也已经提到了最重要的两个原则一是用熟不用生二是稳定大于先进。举个例子如果你要做一个小批量、功能简单的温湿度采集节点STM32F103、GD32F303这类的芯片完全够用资料海了去遇到问题一搜就有方案。反过来如果你为了追求性能非要上一颗Linux应用处理器开发周期、PCB面积、电源成本全都上去了完全没必要。如果是做带屏幕、带网络、带存储的中高端产品那么可能要选带有丰富外设和生态的开发板比如NXP的i.MX系列、瑞芯微的RK系列、全志的V系列或者乐鑫的ESP32-S3这类兼顾性能和连接能力的芯片。还要看开发环境和工具链。我日常最喜欢用的是VS Code加嵌入式插件配合编译器工具链开发效率非常高。一些老工程师还在用古老的IDE也不是不能干活但是持续迭代和自动化脚本支持都不理想。工具链这东西用得顺手比什么都有用。再有一个是供应链安全。做产品不是做实验你选了一颗小众芯片万一停产、缺货整个项目就卡死了。一般我选型前都会去查一下芯片的生命周期、最近有没有涨价缺货的新闻甚至会问代理拿样品做验证确保万无一失。5.2 调试效率翻倍示波器、逻辑分析仪与日志的艺术调试是嵌入式开发里真正拉开效率差距的环节。有人调一个问题调三天有人半天定位差距大半在工具和方法上。示波器和逻辑分析仪是硬件调试的两把利器。示波器看模拟信号、测纹波、看时序的上升沿下降沿逻辑分析仪看总线协议解析UART收发、I2C时序、SPI波形一目了然。我之前调一个SD卡读取问题代码翻来覆去看没问题最后用逻辑分析仪抓数据线发现是CRC校验字段不对原来是SD卡初始化时序少了一个命令代码层面的问题在波形面前无所遁形。除了硬件工具打印日志也是一种“工具”。日志要规范带时间戳、带模块前缀、分级别错误/警告/信息/调试。我在项目里习惯写一个统一的日志模块通过串口或者文件系统输出并支持不同级别的开关。线上问题到时配合串口日志和log文件能还原出问题现场效率极高。还有一个技巧是使用调试器。很多工程师只会点“下载”“运行”其实单步执行、断点、观察变量、调用栈回溯这些功能用好比打印日志定位问题更直接。特别是程序跑飞、死循环这种难以用日志捕捉的问题调试器一抓一个准。5.3 常见坑位与排查手册遇到问题别慌先对照检查嵌入式的问题千奇百怪但踩多了你会发现大部分问题都出在那几个固定的环节。我给你整理一份“现场排查手册”。第一类上电没反应电流异常。先量电源各路电压对不对有没有短路。再量时钟晶振起振了没有。最后看复位复位脚有没有被拉低。第二类程序跑飞或死机。优先怀疑内存问题——数组越界、栈溢出、野指针。检查中断里有没有使用非重入函数检查全局变量有没有被多任务同时修改。第三类通信不稳定。对I2C和SPI先查线路时序、电平匹配、速率配置对CAN查终端电阻有没有接好、波特率是否一致对UART查地线是否共地、流控对不对。第四类功耗异常偏高。检查外设有没有进入低功耗模式GPIO有没有配置成高阻态电源芯片的效率曲线是不是落在低效区间。我个人的经验是出问题先别急着改代码先复现、再定位、再修复改完一定要回归测试。系统性问题往往不是单一原因比如通信不稳定可能既有时序问题也有电源噪声也有代码逻辑缺陷需要从多个角度去排查验证。写在最后回过头看这十几年嵌入式的路说难也难说简单也简单。难在知识面太广硬件、软件、算法、协议、工具链一个都不能少简单在一旦掌握了体系框架新东西的学习就变成往框架里填充内容的过程。我个人在实际操作中的体会是嵌入式开发最值钱的不是会调某某外设、会写某某驱动而是那种“靠逻辑推演和工具验证解决问题的能力”。这个能力是通用的不管芯片怎么升级、框架怎么变化它都能带你穿越周期。每次遇到难啃的问题我都告诉自己问题一定有原因原因是可发现的发现是可以被验证的。这种信念比任何技术秘籍都管用。最后再分享一个小技巧一定要建立自己的知识库。无论是datasheet的笔记、调试踩坑的记录、代码片段还是阅读源码的思考都要沉淀下来。十年后回看这些东西就是你的核心竞争力。希望这篇经验之谈能给你带来一点启发。嵌入式这条路上没有捷径但只要方向对、方法好每一步都扎扎实实你一定能走得很远。共勉。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

GitLens离线插件安装 vscode(无download extension选项):用TaoToken统一Key打通AI补全配置 2026/9/29 3:59:23

GitLens离线插件安装 vscode(无download extension选项):用TaoToken统一Key打通AI补全配置

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

阅读更多 →
高效编程:Codex脚本开发实战指南——TaoToken统一Key接入与config.toml配置骨架 2026/9/29 3:59:23

高效编程:Codex脚本开发实战指南——TaoToken统一Key接入与config.toml配置骨架

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

阅读更多 →
OpenClaw 中文版部署全流程实战:从 config.toml 骨架到 TaoToken 统一 Key 接入 2026/9/29 3:59:23

OpenClaw 中文版部署全流程实战:从 config.toml 骨架到 TaoToken 统一 Key 接入

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

阅读更多 →
唯一指标:单位时间有效产出,AI与远程办公只是变量 2026/9/29 3:59:23

唯一指标:单位时间有效产出,AI与远程办公只是变量

这些年我见过太多团队和个体,把大量精力花在两场争论上:远程办公和坐办公室到底哪个好,用AI和不用AI到底谁更先进。开会吵、群里吵、网上也吵。但吵到最后你会发现,真正拉开差距的从来不是这些。有的团队全员坐在一起,…

阅读更多 →
Cursor 中文乱码解决方法:TaoToken 统一 Key 通道下的 settings.json 配置与验证 2026/9/29 3:59:23

Cursor 中文乱码解决方法:TaoToken 统一 Key 通道下的 settings.json 配置与验证

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

阅读更多 →
Chat到Agent:小白程序员必收藏,TaoToken统一Key接入DeepSeek与MCP的2026 AI新风口 2026/9/29 3:59:17

Chat到Agent:小白程序员必收藏,TaoToken统一Key接入DeepSeek与MCP的2026 AI新风口

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉