这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 【我踩过的那些坑】U盘做D:,Temp建在U盘,编译程序卡顿

共3条 1/1 1 跳转至

【我踩过的那些坑】U盘做D:,Temp建在U盘,编译程序卡顿

高工
2025-11-30 11:19:38     打赏

【我踩过的那些坑】U盘做D:,Temp建在U盘,编译程序卡顿

U 盘作为 D 盘、Temp 目录建在 U 盘导致编译卡顿」是嵌入式开发中典型的存储 IO 瓶颈问题,尤其 ESP-IDF 编译涉及大量小文件读写、临时文件生成,U 盘的性能短板会被无限放大。

二、分步骤解决方案(优先级从高到低)方案 1:紧急修复 —— 将 Temp 目录移回系统盘(最快见效)无需改动工程路径,仅调整临时目录位置,就能立竿见影提升编译速度:
  1. 打开系统环境变量设置

    右键「此电脑」→「属性」→「高级系统设置」→「环境变量」;

  2. 修改用户级 Temp/TMP 变量

    • 在「用户变量」中找到 TEMP 和 TMP,双击编辑;

    • 将变量值从 U 盘路径(如 D:\Temp)改为系统盘路径,推荐:

      C:\Users\Administrator\AppData\Local\Temp(默认路径,或自定义 C:\Temp);

    • 点击「确定」保存,重启终端 / VSCode(环境变量生效需要重启);

  3. 验证生效

    在 PowerShell 中执行 echo $env:TEMP,输出应为 C 盘路径,说明修改成功。

方案 2:根治 —— 将 ESP-IDF 工程移到系统盘(机械盘也比 U 盘快)即使系统盘是普通机械硬盘(HDD),随机读写速度也比 U 盘快 10 倍以上,步骤:
  1. 迁移工程目录

    复制 D:\Espressif\frameworks\esp-idf-v5.4.2 到系统盘,推荐路径:

    C:\Espressif\frameworks\esp-idf-v5.4.2(避免中文 / 空格);

  2. 重新激活 ESP-IDF 环境

    打开新终端,进入新的 ESP-IDF 根目录,重新执行激活脚本:

    powershell
  3. cd C:\Espressif\frameworks\esp-idf-v5.4.2.\export.ps1
  4. 切换到新工程目录编译

    powershellcd C:\Espressif\frameworks\esp-idf-v5.4.2\examples\get-started\hello_world
    idf.py fullclean build -j4  # 验证编译速度
方案 3:进阶优化 —— 给系统盘加缓存 / 升级存储(可选)如果系统盘是机械硬盘,编译仍有轻微卡顿,可进一步优化:
  1. 启用 Windows 磁盘缓存

    右键系统盘(C 盘)→「属性」→「硬件」→ 选中磁盘 →「属性」→「策略」→ 勾选「启用写入缓存」;

  2. 临时关闭 Windows Defender 实时扫描

    编译时 Defender 会扫描大量临时文件,导致 IO 卡顿,可临时关闭(编译完成后重启):

    • 打开「设置」→「更新和安全」→「Windows 安全中心」→「病毒和威胁防护」→「管理设置」→ 关闭「实时保护」;

  3. 长期最优解:升级系统盘为 SSD

    SSD 的随机读写速度是 U 盘的 100 倍以上,ESP-IDF 编译耗时可从「分钟级」降到「10 秒级」(二次编译),是嵌入式开发的终极存储方案。

三、避坑补充:U 盘作为 D 盘的其他注意事项如果必须保留 U 盘作为 D 盘(如存储大文件),需注意:
  1. 禁用 U 盘的索引和碎片整理

    右键 U 盘(D 盘)→「属性」→ 取消勾选「允许此驱动器上的文件具有内容索引」→「工具」→「优化」→ 选择 U 盘 →「分析」→ 若碎片率高则「优化」(但 U 盘碎片整理效果有限);

  2. ESP-IDF 仅将成品固件输出到 U 盘

    工程编译在系统盘,编译完成后用命令将固件复制到 U 盘,避免编译过程读写 U 盘:

    powershell# 编译完成后复制固件到U盘copy .\build\hello-world.bin D:\ESP32_Firmware\
  3. 避免 4 线程编译(U 盘场景)

    若暂时无法迁移目录,将线程数降到 1~2,减少 IO 并行冲突:

    powershellidf.py build -j1  # 单线程反而比多线程快
四、效果验证修改后编译 ESP32-S3 的 hello_world 工程,对比优化前后的耗时:
  • 优化前(U 盘 Temp+U 盘工程):首次编译 10 + 分钟,二次编译 3 + 分钟;

  • 优化后(系统盘 Temp + 系统盘工程):首次编译 1~2 分钟,二次编译 10~20 秒;

  • 若升级 SSD:首次编译 40 秒,二次编译 5~8 秒。

总结嵌入式编译的核心瓶颈是「存储 IO」而非 CPU,U 盘的随机读写性能完全无法满足 ESP-IDF 的编译需求。优先将 Temp 目录和工程目录移到系统盘(机械盘即可),是最低成本、最高效的解决方案;长期来看,升级 SSD 能彻底解决编译卡顿问题,也是嵌入式 / 编程开发的基础硬件投入。




院士
2025-11-30 15:26:37     打赏
2楼

学习了,谢谢分享。


高工
2025-11-30 21:43:38     打赏
3楼

我咋觉着你的瓶颈并不是U盘,而是usb接口。换个USB 3.0以上接口的U盘会不会就好了


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]