尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VSCode搭配Keil MDK搭建高效嵌入式开发环境
折腾嵌入式开发的人基本都逃不过 Keil MDK。工程能编译、能烧录、问题是一旦代码量上来那个自带编辑器的体验真的会让人怀疑人生。函数跳转基本靠 CtrlF代码补全偶尔能认出几个关键字已经算给面子多文件切换、批量重命名、Git 集成这些东西就更是别想了。当时我刚接触 STM32 那会儿写过两千行代码之后实在忍不下去了才动手把 VSCode Keil 这套开发环境彻底搭起来。这篇文章就把完整的搭建安装使用过程记录下来。我会从最原理的部分拆起把 Keil 和 VSCode 各自该干什么讲清楚再一步步配置到能像用正经 IDE 一样写代码、一键编译。里面每一个坑都是自己实际踩过的比如中文乱码、头文件路径、魔法棒里的宏定义不同步……不管是刚入门的新手还是被 Keil 编辑器折磨了几年想找解法的老手照着做基本都能打通。1. 先想清楚VSCode在这个环境里到底扮演什么角色1.1 你要解决的不是换IDE而是换编辑器很多人在这一步就走错了方向。听说 VSCode 写代码舒服就想着能不能彻底扔掉 Keil所有编译烧录全在 VSCode 里搞定甚至用 VSCode GCC CMake 重写整个构建系统。这个思路不能说错但对大多数嵌入式项目来说代价太大。MDK 本身是一个完整的嵌入式 IDE它包含编辑器、编译器、链接器、调试器、下载器、项目管理器多个环节。我们要做的是用 VSCode 替换掉其中最弱的编辑器环节而编译、链接、下载这些工作继续交给 Keil。说得直白一点VSCode 在整个方案里的角色就是好看又好用的编辑器 一键触发 Keil 构建的遥控器。这样理解之后很多奇怪的现象就不奇怪了比如为什么 VSCode 里报红的语法错误Keil 编译却能通过因为两套工具看的文件路径和宏定义完全是各自独立的VSCode 只看自己的配置文件Keil 只看 uvprojx 工程文件。后面我会专门讲怎么把两边对齐。1.2 对比一下更彻底的 VSCode 路线你就知道该怎么取舍现在开源社区里有一种更极客的玩法完全不用 KeilVSCode 搭配 CMake、arm-none-eabi-gcc、OpenOCD 组成一套自由软件工具链。这套方案确实不错工程结构清晰跨平台还能用上最前沿的编辑器特性。但问题是我们手上拿到的大多数工程尤其是从合作方、原厂例程、老项目延续下来的代码往往都锁在 Keil 的工程结构里。编译器可能是 AC5 也可能是 AC6中间夹着大量针对性的启动文件、分散加载文件。如果你把时间大头花在把旧工程改造成 CMake 上说实话性价比不高而且中途很容易出兼容性问题。VSCode Keil 的好处就是原子弹不动Keil 工程怎么组织VSCode 就怎么认老工程拿过来就能用。1.3 这套方案到底能用在哪我测试下来这套组合适合大多数基于 ARM Cortex-M 内核的 MDK 工程比如常见单片机厂商的芯片核心思路都是一样的。如果你的工程里用了比较深度的调试器功能比如复杂的 RTX 任务调试、Trace 事件追踪、高级仿真那这部分别指望 VSCode 能完全替代 Keil老老实实回到 Keil 调试窗口即可。日常的编辑、代码浏览、搜索、版本管理VSCode 才是主场。2. 工具链组件与版本选择装之前先把对应关系理顺2.1 Keil MDK 本体用 5.x 版本注意编译器 AC5 和 AC6 的区别现在安装 Keil MDK官网下载的安装包通常是 5.3x 到 5.4x 这些版本。这个版本讨论最多的问题就是编译器。MDK 5.37 之后默认安装包里已经不再自带 ARM Compiler 5也就是 AC5默认编译器换成了统一基于 Clang 的 ARM Compiler 6AC6。老工程如果是用 AC5 编译的拿新版本 MDK 打开后会发现编译器目标选项里是空的。这时候你不一定非得升级代码可以在 MDK 里手动安装旧的 AC5 编译器或者把工程切到 AC6 并解决一波编译报警告。但如果你有自己的偏好我现在给的建议是能上 AC6 就上 AC6代码标准更新编译速度和诊断信息都好不少长期来看是趋势但别在搭建 VSCode 环境的中途去处理编译器迁移先把工具链跑通再动这个。安装路径尽量保持在默认的 C:\Keil_v5千万别装到中文路径或者带空格的目录里。很多嵌入式编译工具对路径中的空格处理得并不好后面配置 VSCode 时如果编译器路径里有空格你会发现 JSON 配置里到处都是转义问题非常麻烦。2.2 VSCode 扩展选型不是装得越多越好VSCode 侧真正必须装的扩展其实就两类。第一类是微软的 C/C 扩展。它负责代码高亮、提示、跳转、IntelliSense 代码补全。没有它VSCode 看 C 文件和看纯文本没区别。第二类是能解析 Keil 工程文件的扩展常见的有 Embedded IDE标识叫 EIDE和 Keil Assistant。这类扩展会去读 .uvprojx 文件帮你把源文件列表、头文件路径、宏定义提取出来再决定是自动生成配置还是直接按钮编译。顺带可以装一个 Arm Assembly给启动文件提供汇编语法高亮和 Serial Monitor串口监视器。至于各种 AI 辅助类、Git 增强类扩展看自己需要。有一个建议不要在同一时间安装多个能解析 Keil 工程的扩展比如 EIDE 和 Keil Assistant 同时启用有可能会同时对同一个文件夹做配置第二天打开工程发现配置被改来改去排查起来很头疼。2.3 三个关键文件的协作链路这套环境搭建过程中你需要跟三个文件频繁打交道。第一个是 .uvprojxKeil 工程文件本质是 XML 文本。它保存了源文件列表、头文件路径、编译选项、宏定义、目标芯片信息。整个环境的源头数据都在这里。第二个是 c_cpp_properties.jsonVSCode 的 C/C 扩展用来建立 IntelliSense 的配置文件它告诉编辑器编译器在哪、头文件在哪、有哪些宏。第三个是 tasks.jsonVSCode 的任务系统配置我后面会用它在 VSCode 里直接触发 Keil 命令行编译。理解了这三者的关系配置失败的时候你就知道该去哪一层找问题如果 VSCode 里红波浪线一堆大概率是 c_cpp_properties.json 没写对如果能补全但没有编译按钮那是 tasks.json 或扩展没配好如果编译报错说找不到头文件那其实是 Keil 工程自身的问题跟 VSCode 没关系。3. 安装与基础配置让VSCode先能看懂你的工程3.1 Keil 安装时的两个关键选项如果你还没装 Keil安装到选择组件那个界面时除了默认选中项建议确认一下是否包含了对应的 Device Family Pack。有些时候芯片厂商提供的 DFP 没有默认勾选你装完之后打开工程发现找不到芯片型号。另一个关键点是安装完成后别急着关掉 Pack Installer先把当前工程需要的器件支持包更新一下否则后面编译会报一堆找不到核心头文件的错误。这里有一个容易忽略的点如果你以前的 Keil 也装过一堆别的版本的包新版本安装界面如果问你是否导入以前的配置建议不要选导入。因为旧配置可能会把自定义的编译器路径、环境变量一起带过来到时候 VSCode 检测到的编译器版本跟你以为的可能不一致排查起来非常浪费时间。干净启动后面出问题好定位。3.2 用 VSCode 打开工程目录并消除红色波浪线打开 VSCode通过 File - Open Folder 选择包含 .uvprojx 文件的那个目录。注意是打开工程根目录不是打开某个 .c 文件所在的子文件夹。这一点很关键因为后面配置的路径基本都是基于这个工作区根目录展开的。第一次打开一个大型嵌入式工程VSCode 可能会提示检测到 C/C 配置并且会默认用一个近似的配置去索引代码。结果可想而知满屏红色波浪线。这个阶段别慌按 CtrlShiftP 打开命令面板搜索 C/C: Edit Configurations (JSON)VSCode 会帮你在 .vscode 目录下生成一个 c_cpp_properties.json 文件接下来我们手动把它改对。如果你用的是 EIDE 扩展其实可以跳过手动填 JSON 那一步。在 EIDE 侧边栏里面有个导入 Keil 工程的功能选中你的 .uvprojx它会把源文件、头文件路径、宏定义一并解析出来然后再配合自己生成的构建配置基本做到打开即用。我个人的习惯是先用 EIDE 或 Keil Assistant 解析一次看看它生成的 c_cpp_properties.json 长什么样对照着学习一遍之后再去微调需要补充的路径。3.3 c_cpp_properties.json 里最关键的两个字段手动配置时最核心的是 compilerPath 和 includePath。compilerPath 要指向当前 Keil 实际使用的编译器。如果你用的是 AC6路径一般是这样的{ configurations: [ { name: STM32F103, includePath: [ ${workspaceFolder}/Core/Inc, ${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc, ${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include, ${workspaceFolder}/Drivers/CMSIS/Include ], defines: [ STM32F103xE, USE_HAL_DRIVER ], compilerPath: C:/Keil_v5/ARM/ARMCLANG/bin/armclang.exe, cStandard: c11, cppStandard: c17, intelliSenseMode: windows-gcc-arm } ], version: 4 }includePath 不是让你把整个项目所有文件夹都加进去而是只加包含头文件的目录。最好的办法是从 Keil 的工程选项里把 C/C - Include Paths 列表抄过来因为编译器实际使用的就是这份路径VSCode 要对齐的是它而不是凭感觉猜。defines 字段也不用多解释对照 Keil 的 C/C 选项卡里 Define 那一行把里面的宏一个一个搬过来。这两个字段不匹配就会造成一种很诡异的现象Keil 编译明明没问题VSCode 里却到处都是红色波浪线。后面我会单独展开讲。还有一个细节compilerPath 指向 armclang 之后VSCode 的 C/C 扩展会尝试调用这个编译器去解析内置宏。如果 Keil 安装路径里有空格或者编译器路径是个快捷方式解析就会失败。稳妥的做法是直接用绝对路径指向 .exe 文件像我上面写的那样用正斜杠而不是反斜杠JSON 里写反斜杠还得双重转义。4. 打通一键编译从手动开Keil按F7到VSCode里CtrlShiftB4.1 方案一依赖扩展帮你解析 uvprojx配置好 IntelliSense 之后你只是让 VSCode看懂了代码它还不会编译。最省事的编译方案是安装扩展来触发 Keil 构建。我用得比较顺的是 EIDE。导入 Keil 工程之后右侧会出现一个工程资源管理器顶部有构建按钮。点一下构建EIDE 会去调用 Keil 的编译器命令行并在 VSCode 的输出面板显示编译日志。Keil Assistant 的逻辑也类似侧边栏会列出当前工程所有的 Target 和目标芯片双击或点编译按钮就能触发。这类扩展本质上是把 uvprojx 里的信息翻译成命令行参数再调起 Keil 的编译后台。这种方案的好处是完全不用手动写 tasks.json适合不想折腾配置的初学者。代价是依赖扩展对 Keil 工程的解析准确度万一遇到某些少见的工程配置比如同一个工程里引用了外部 target 组、或者用了自定义的分散加载文件扩展可能解析不准你就得反过来用方案二。4.2 方案二用 tasks.json 直接调用 UV4.exe 命令行如果你想彻底搞明白编译这件事到底怎么发生或者不想依赖第三方扩展那么可以在 .vscode/tasks.json 里写一个编译任务直接调用 Keil 自己的命令行工具 UV4.exe。UV4.exe 是 Keil 的命令行入口。常用参数里-b 表示构建当前工程-j0 表示使用多核并行编译-t 后面可以指定目标名称默认是第一个 Target-o 指定编译日志输出到文件。基本任务配置长这样{ version: 2.0.0, tasks: [ { label: Keil Build, type: shell, command: C:/Keil_v5/UV4/UV4.exe, args: [ -b, ${workspaceFolder}/project.uvprojx, -j0, -o, ${workspaceFolder}/build_log.txt ], group: { kind: build, isDefault: true }, problemMatcher: [] } ] }这里 project.uvprojx 换成你的实际文件名。配置好后按 CtrlShiftB 就会触发构建。之所以建议加一个 -o 把日志写到文件里是因为 UV4.exe 是命令行程序它弹出的窗口一闪而过不把日志重定向到文件的话你根本看不到错误信息。Windows 下使用 shell 任务时命令会通过 cmd 执行只要路径没写错基本不会有大问题。如果你是在 Git Bash 或 PowerShell 下运行需要注意 / 和 \ 的差异我已习惯在 Windows 下统一用正斜杠写路径兼容性最好。4.3 编译日志去哪看如何确认是否构建成功构建完不要急着关终端按钮直接在 VSCode 里打开 build_log.txt拉到末尾看结果。只要出现 0 Error(s)就说明编译成功。输出的目标文件一般在工程目录下的 Listings 和 Objects 文件夹里.axf 是调试格式.hex 是烧录格式。在任务里我建议引入一个小的日志文件命名比如 build_时间戳.txt否则每次编译同一个名字的文件会覆盖。第一次跑构建的时候可能比 Keil 里按 F7 慢一点因为系统要初始化命令行环境耐心等就好。跑通一次之后后续增量编译速度跟 Keil 差不多。如果想把错误显示在 VSCode 的问题面板里就得配置 problemMatcher。这一步比较麻烦因为 Keil 的编译输出格式和 VSCode 内置的匹配器对不上。我建议新手先不配 problemMatcher直接开日志文件查看错误虽然多一个动作但至少不会因为匹配规则写了半天天结果一个错误都不显示产生编译失败但 VSCode 不提示的错觉。5. 最容易翻车的三个坑中文乱码、头文件路径、宏定义5.1 源文件编码不统一UTF-8 与 GB2312 的拉锯战这是搭建环境时最闹心的问题没有之一。Keil 在中文 Windows 环境下创建的源文件默认是 ANSI 编码也就是 GB2312而 VSCode 默认读文件用 UTF-8。结果你一打开注释里全是乱码如果你的代码里用中文字符串字面量还有可能触发编译警告甚至错误。解决思路有两个。第一个是让 VSCode 去适配 Keil 的编码。在 settings.json 里加这两行{ files.encoding: gbk, files.autoGuessEncoding: true }这样打开的文件如果是 GB2312 编码VSCode 会正确识别。第二个思路是把所有源文件统一转换到 UTF-8。这个方案一劳永逸但要注意 Keil 对源文件编码并不是很挑剔转成 UTF-8 后应能正常编译但保险起见转换前记得先备份。实际上我这里更推荐第一种思路因为工程里大概率有一部分文件是 GBK、有一部分是别人新建的 UTF-8autoGuessEncoding 打开后 VSCode 会根据字节特征自动判断混着来也能正常显示。如果你打算新写一个文件建议直接创建一个 UTF-8 编码的文件并在项目规范里约定所有新代码统一 UTF-8老代码保持原编码。这样能尽量减少编辑器的编码漂移问题。5.2 编译能过但 VSCode 一排红线IntelliSense 的配置视角问题如果你碰到 Keil 编译完全正常但 VSCode 里打开代码全是红色波浪线最大的可能是 IntelliSense 拿到的信息和 Keil 编译时拿到的信息不一致。C/C 扩展在工作的时候会用它自己的编译器路径去模拟解析代码。它看到的 includePath 少了某个文件夹头文件包含链就会断掉宏定义少了某个开关一段本来不该被解析的代码就会被当成错误代码然后衍生出来一堆语法错误。排查的时候先确认 c_cpp_properties.json 的 compilerPath 指向的编译器存在且能运行。然后一步步收敛 includePath。一个比较实用的技巧是在 VSCode 的命令面板里执行 C/C: Reset IntelliSense Database强制它重新解析一次。如果还不成功打开任意一个 .c 文件看右下角显示的 IntelliSense 模式如果显示的是 Windows-MSVC而你明明用的是 armclang那说明配置文件里的 intelliSenseMode 写错了改成 windows-gcc-arm 或对应的 ARM 模式再试。有时候问题出在编译器本身。armclang 这类交叉编译器在解析内置宏时如果找不到标准头文件路径就会崩溃或者返回空结果。你可以在 c_cpp_properties.json 里加上 compilerArgs: [--targetarm-none-eabi] 这类参数试试。不过这个属于进阶调整不是每个人都遇得到遇到再改不迟。5.3 魔法棒里的宏定义要同步到 definesKeil 里的魔法棒也就是 Options for Target在 C/C 选项卡里有一个 Define 输入框。这个地方往往写着 STM32F103xE 这样的芯片型号宏和 USE_HAL_DRIVER 这样的库开关。这些宏决定了 HAL 库里哪些代码会被编译、哪些头文件会暴露出来。如果这些宏没有同步到 c_cpp_properties.json 的 defines 里VSCode 解析到 HAL 库的内部代码时会因为宏没定义而把一系列头文件判为不可用进而报错。这个坑非常隐蔽因为 Keil 那边编译一直好好的你根本不会怀疑宏这种基础配置会有不一致。我的习惯是每次用魔法棒修改了 Define 或者 Include Paths 之后顺手就把 c_cpp_properties.json 同步一遍。如果项目里大家共用工程文件这个同步动作更是必须的否则每个人的 VSCode 显示都不一样同一份代码在不同电脑上打开就是两种结果。5.4 相对路径和工程文件层级的问题还有一个比较容易被忽略的细节uvprojx 里的路径大量使用相对路径形如 ..\..\Core\Inc。VSCode 在解析 includePath 时如果工作区根目录选择得不对相对路径的起点就会错位导致路径找不到。遇到这种情况我一般建议在 c_cpp_properties.json 里直接用绝对路径或 ${workspaceFolder} 开头而不是跟 uvprojx 里的相对路径保持一致。这样做虽然配置上略啰嗦但稳定性最好。另外如果你的工程是从一个模板工程复制过来的复制之后改动过目录结构记得回去更新 Keil 里的 Include Paths那才是源头VSCode 配置只是跟班的。6. 再往下走调试、烧录与混合工作流怎么安排6.1 想在 VSCode 里直接调试先了解一下依赖链网上有很多人展示 VSCode 里直接按 F5 调试单片机看起来特别酷。这个玩法其实也是完全可行的但依赖链比编译要长很多。你需要安装 cortex-debug 扩展需要一个 GDB Server常用的是 J-Link GDB Server、OpenOCD 或者 pyOCD还需要一个 arm-none-eabi-gdb 调试器另外还要准备对应芯片的 SVD 文件用来在调试界面里查看外设寄存器。launch.json 的配置项一般包括 device、interface、serverpath、servertype、svdFile 这些。这套配置一旦跑通确实能在 VSCode 里看变量、打断点、看外设寄存器。但我觉得对大多数日常做嵌入式开发的同事来说这套配置的维护成本有点高。特别是当你常用的调试器不止一种的时候换来换去很容易把配置搞乱。我自己的选择是编辑、浏览、改代码在 VSCode真到单步调试这种环节直接切回 Keil。6.2 我目前推荐的混合工作流现在我的日常流程是这样VSCode 打开工程目录写代码、看代码、用 Git 提交、查日志、搜索、重构都是在这里完成。需要构建的时候按 CtrlShiftB 触发我刚才配置的编译任务看一眼日志确认有没有错误。准备烧录调试了双击 Keil 工程文件打开 Keil按下载按钮然后进入调试模式。听起来好像要频繁切换两个窗口但实际用下来效率反而高。因为真正需要打开 Keil 的时机是项目已经跑到了编译下载这个环节。在那之前的大段时间你都在写代码和读代码VSCode 的效率比 Keil 自带的编辑器高太多。而且这个工作流对老项目零侵入不用改 Keil 工程的任何配置随时可以在传统模式和增强模式之间切换。如果你想在 VSCode 里直接下载烧录EIDE 里也集成了烧录功能设置好下载算法跟调试器参数后也能一键烧录。不过在工程项目里我建议烧录动作还是回归到 Keil因为它能同时处理代码校验、芯片擦除这类的底层细节出现问题时定位起来更直接。6.3 把 Keil 工程纳入 Git 版本管理的注意事项既然 VSCode 已经打开了顺手把工程纳入 Git 非常顺手。Keil 的 .uvprojx 文件是 XML本质是文本可以正常参与代码 diff这点比很多二进制工程格式友好得多。但注意默认的 Keil 工程目录里有很多生成物不需要提交。我这里给一个 .gitignore 的参考Listings/ Objects/ *.uvguix.* *.bak *.dep *.crf *.d *.o *.axf *.hex *.htm *.sct *.mapuvprojx 里的调试配置和编译选项建议纳入版本管理团队协作时大家用的目标配置一致。但每个开发者本机的窗口布局、用户级设置存在 .uvguix 文件里这个通常不提交。还有一个点Keil 版本不同会自动升级 uvprojx 文件格式如果你不小心把新版本生成的文件提交上去老版本打开会有提示。团队协作时尽量统一 MDK 版本这点比编辑器统一还重要。最后分享一点实际体会整套环境搭下来最大的收获不是VSCode 比 Keil 好看而是终于可以把嵌入式开发统一到一个更现代化的编辑环境里了。代码补全、跳转、搜索、Git、多文件工作这些日常高频动作效率确实提升了不止一个档次。我个人的建议是不要一上来就装二十个扩展、把所有插件都配一遍。先用最少的路径跑通C/C 扩展负责补全EIDE 或 tasks.json 负责编译足可以满足 80% 的需求。等你真的需要某个具体能力时再按需去加这样出了问题你永远能快速定位。如果让我排一个优先级我会先去解决红色波浪线和一键编译这两个核心问题中文乱码顺手处理掉宏定义保持同步养成习惯。至于调试器联动、烧录这类锦上添花的东西等基础走顺了再折腾。另外还有一个小技巧在 VSCode 终端里直接切换到工程目录然后敲一句 Keil 的编译命令其实跟 tasks.json 底层是一样的。遇到扩展失灵的时候这个后备方案能救急。希望这篇文章能帮你顺利搭起自己的 VSCode Keil 开发环境少走几步弯路。
RELATED

相关推荐

PPO算法实战:手把手调出稳定月球着陆器

PPO算法实战:手把手调出稳定月球着陆器

1. 项目概述:这不是教科书里的PPO,是亲手调出能稳稳落地的月球着陆器“浅谈PPO算法-玩转月球登陆”——光看标题,你可能以为这是某篇泛泛而谈的强化学习科普文。但实际操作过的人知道,这六个字背后,是一场从理论公式到…

📅 2026/10/16 5:41:41
ROS2 跨设备 移植及通信

ROS2 跨设备 移植及通信

ROS2 环境搭建: wget http://fishros.com/install -O fishros && . fishros 请参考下面链接,十分详细,感谢鱼香大佬的攻略。 https://blog.csdn.net/qq_27865227/article/details/131363638?fromshareblogdetail&sharetypeblog…

📅 2026/10/16 5:41:41
Windows 风扇控制指南:FanControl 快速上手与 3 套场景参数表

Windows 风扇控制指南:FanControl 快速上手与 3 套场景参数表

Windows 风扇控制指南:FanControl 快速上手与 3 套场景参数表 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…

📅 2026/10/16 5:41:41
MORE NEWS

更多资讯

📰

OpenCore Legacy Patcher 指南:老 Mac 装新 macOS 的完整流程

OpenCore Legacy Patcher 指南:老 Mac 装新 macOS 的完整流程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher 是面向已被…

📰

3D模型渲染从建出来到渲染对:计算机图形学原理与实操排查指南

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

📰

Haar特征计算过程详解:从积分图原理到手算示例与代码实战

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

📰

AliFlutter:超大型App的Flutter工程化底盘与规模化治理实践

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

📰

储能电池被动均衡方案:MP2642GR-Z与PIC32MZ2048EFH144选型与实现

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

📰

Apollo-11式高可靠系统设计:实时容错与资源约束下的工程实践

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

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬