reference: 早先那版 C 写的装甲板固件(ESP-IDF 工程)

`armor/` 是它的 Rust 改写版,这一份留着当参考:ADC 阈值的 2000 就是从它标定出来的
(`.env.example` 里那句 "same as the reference firmware" 指的就是它),而且它的 README
记着实测设备与 MAC,换硬件时是有用的现场记录。

只收了 20 个源文件。它自带的 `.gitignore` 已经排掉 `build/`(211 MB 的 ESP-IDF 构建产物)
与生成的 `sdkconfig`,所以仓库里不会多出这些东西。

两处顺带处理:
- `reference/armor/.git` 是一个**空的**仓库壳(`git init` 过,零提交、零 remote、零 ref),
  而外层 git 正因为它的存在而拒绝索引 `reference/` 下的任何文件
  (`error: 'reference/armor/' does not have a commit checked out`)。它被挪到
  `desktop/.dev/backup/reference-armor-git`(可逆,且该目录已被忽略),不是删除。
- 它的 README 指着 `../armor-platformio-backup/`,那份备份并不存在。改成明说"没有进仓库",
  免得以后有人照着找一个不存在的目录。

另外把 `/docs/` 加进 .gitignore:那是工作区里另起的一个 Astro 文档站,与本仓库无关。
This commit is contained in:
2026-10-14 19:45:15 +08:00
parent a30eb3200a
commit fd71b83e3a
22 changed files with 1886 additions and 0 deletions
+209
View File
@@ -0,0 +1,209 @@
# =============================================================================
# armor — ESP32-C3 / ESP-IDF v6.1 工程专用 .gitignore
# -----------------------------------------------------------------------------
# 取舍原则
# 1) 只忽略「本机生成物 + 本机专有配置 + 编辑器/系统杂物」;
# 源码、构建脚本、分区表、可复现配置一律入库。
# 2) 能用 "/" 锚定就用锚定模式,避免将来新增同名目录时被误伤。
# 3) 每段都写明理由,后人可据此判断能否删改。
# 4) 语法提醒:.gitignore 的 "#" 注释必须独占一行,不能写在模式后面;
# 行尾空格会被静默丢弃(或被当成模式的一部分),也不要加。
#
# 自检
# git status --short # 期望只列出应该入库的源文件
# git check-ignore -v <路径> # 查看某路径被哪条规则命中
# =============================================================================
# =============================================================================
# 1. ESP-IDF 构建输出(体积最大,本工作区约 17 MB,必须忽略)
# =============================================================================
# idf.py 默认在工程根目录生成 build/:CMake/Ninja 缓存、.o、静态库、固件
# 镜像、flasher_args.json、compile_commands.json 全在里面。
# 本工程路径是纯 ASCII,不会触发 idf.ps1 的「非 ASCII 路径 -> 外置构建目录」
# 逻辑,所以 build/ 就落在工程内。
/build/
# 其它常见构建目录命名:多配置构建、CMake 预设、CLion
/build-*/
/cmake-build-*/
# 仅当 IDF_BUILD_DIR 被指向工程内部时才会出现
# (idf.ps1 的默认兜底是 <盘符>:\esp-idf-build\armor,位于仓库之外)
/esp-idf-build/
# clangd --background-index 的索引缓存(.vscode 里启用了该选项)
/.cache/
# 根目录下零散的 CMake/Ninja 缓存(正常应在 build/ 内,保险起见)
/.ninja_deps
/.ninja_log
/CMakeCache.txt
/CMakeFiles/
# =============================================================================
# 2. ESP-IDF 生成的本机配置
# =============================================================================
# sdkconfig : menuconfig/构建时自动写出,代表「本机当前状态」,每台机器都可能不同
# sdkconfig.old : 上一次配置的备份
# 可复现的那份是 sdkconfig.defaults(已生成,见第 9 节),所以这两个都忽略。
/sdkconfig
/sdkconfig.old
# 提示:ESP-IDF 工具在 Windows 上写 sdkconfig / sdkconfig.defaults 用的是 CRLF,
# 这是工具行为、无需干预 —— 入库行尾由 .gitattributes 统一成 LF,
# 本地暂时出现 CRLF 不会让 git status 变脏(已实测)。
# =============================================================================
# 3. IDF Component Manager(引入 idf_component.yml 后才会出现)
# =============================================================================
# managed_components/ 是下载到本地的第三方组件副本,官方文档明确说它
# 「通常不纳入版本控制」;dependencies.lock 由工具自动求解生成、禁止手改。
# 若团队要锁定依赖版本,可注释掉 dependencies.lock 并把它提交入库。
/managed_components/
/dependencies.lock
# 工具导出的编译数据库副本(真正那份在 build/ 里,已随 build/ 忽略)
/compile_commands.json
# =============================================================================
# 4. 固件产物与运行日志
# =============================================================================
# 只锚定根目录,避免误伤将来放进 assets/ 之类的素材
/*.bin
/*.elf
/*.map
/*.hex
# README 里 monitor 打印的 CSV,属于采集到的运行数据,不入库
/logs/
*.log
# =============================================================================
# 5. 密钥类文件 —— 提交即泄密,且很难从历史里挽回
# =============================================================================
# 安全启动签名私钥 / Flash 加密密钥 / 证书私钥。
# 若仓库确实需要存放公开证书,请把下面的通配收窄成具体文件名。
*.pem
*.key
*.p12
*.pfx
# =============================================================================
# 6. 编辑器 / IDE(本机专有,往往含绝对路径)
# =============================================================================
# VS Code + ESP-IDF 扩展自动生成。当前 .vscode/settings.json 里是
# C:\esp\v6.1\esp-idf、d:\宣筹\...\build、COM10 这类本机绝对路径,
# 提交上去只会误导别人。
/.vscode/*
# 想共享「推荐扩展列表」时,取消下一行注释(上一行的 /.vscode/* 必须保留)
!/.vscode/extensions.json
/.idea/
/.vs/
*.code-workspace
*.sublime-project
*.sublime-workspace
# 编辑器临时/交换文件
*.swp
*.swo
*~
.#*
\#*#
# =============================================================================
# 7. Python 与测试/覆盖率工具缓存(ESP-IDF 工具链脚本产物)
# =============================================================================
__pycache__/
*.py[cod]
.venv/
venv/
/.mypy_cache/
/.pytest_cache/
/.ruff_cache/
# pytest-embedded、单元测试与尺寸报告(ESP-IDF 自身仓库也忽略这些)
pytest-embedded/
pytest_embedded_log/
TEST_LOGS/
XUNIT_RESULT*.xml
build_summary_*.xml
app_info_*.txt
size_info*.txt
.manifest_sha
# 覆盖率
*.gcda
*.gcno
*.gcov
coverage.info
coverage_report/
# =============================================================================
# 8. 操作系统杂物
# =============================================================================
Thumbs.db
ehthumbs.db
desktop.ini
$RECYCLE.BIN/
.DS_Store
.AppleDouble
._*
*.lnk
# =============================================================================
# 9. 必须入库的文件(切勿加入忽略列表)
# =============================================================================
# CMakeLists.txt / main/CMakeLists.txt
# main/*.cpp main/*.hpp main/*.c main/*.h
# idf.ps1 构建入口(含非 ASCII 路径 workaround)
# partitions.csv 自定义分区表
# README.md 工程文档(移植要点与踩坑记录)
# .clangd 工程级 clangd 配置
# sdkconfig.defaults 可复现配置来源(由 idf.py save-defconfig 生成)
# .gitattributes 行尾(CRLF/LF)与文本/二进制归属策略
#
# 提醒:ESP-IDF 自身仓库的 .gitignore 会忽略 .clangd 和 .vscode/;
# 本工程故意保留 .clangd(它是为 clangd 去掉 -f*/-m* 的项目配置),
# 不要照抄 IDF 仓库的规则。
# =============================================================================
# 10. sdkconfig.defaults 与 sdkconfig 的关系(2026-10-14 核对并修复)
# =============================================================================
# 忽略 sdkconfig 的前提是 sdkconfig.defaults 存在且正确。核对时发现:
# * README「目录结构」里列的 sdkconfig.defaults 当时并不存在;
# * 当时的 sdkconfig(以及 build/config/sdkconfig.h)是
# CONFIG_PARTITION_TABLE_SINGLE_APP=y、CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y,
# 即用的是默认 single-app 分区表,partitions.csv 根本没有生效;
# * 而 README「实测验证结果」的 boot log 却是 4 MB flash + 2 MB factory 分区。
# 已按文档修正(4 MB flash + CONFIG_PARTITION_TABLE_CUSTOM=y)重新配置,
# 并用 `idf.py save-defconfig` 生成 sdkconfig.defaults,内容就是最小差异:
# CONFIG_IDF_TARGET="esp32c3"
# CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
# CONFIG_PARTITION_TABLE_CUSTOM=y
# (CONFIG_PARTITION_TABLE_CUSTOM_FILENAME 的 Kconfig 默认值本来就是
# "partitions.csv",所以 save-defconfig 不会重复写入。)
#
# 维护规则:
# * 改配置请改 sdkconfig.defaults(或 menuconfig 后重跑 save-defconfig),
# 不要把 sdkconfig 提交进来;
# * 想确认「相对 IDF 默认值改了什么」:重跑 idf.py save-defconfig 再看 diff;
# * 构建日志里分区表应为 nvs 0x9000 / phy_init 0xf000 / factory 0x10000 2M,
# 否则说明 defaults 没生效或 partitions.csv 没被采用。
# =============================================================================