文件
phonerail/firmware/HANDOFF.md
T
zhou yang和Claude Opus 5 2bfe308b30 初始导入:PhoneRail 五路手机直供电源板
原理图/PCB 已在 EasyEDA 里做到 12 页跨页 0 漏接,固件刚完成骨架包 A1。
这次是把已有的一切一次性纳入版本控制,没有改动任何设计内容。

纳入:
- 设计与需求文档、PROGRESS.md、小米8 参考原理图 PDF 与追脚脚本
- .claude/ 下的 EasyEDA 桥接工具链与几何/网表缓存(eda-parts.json、
  pcb-parts.json、pcb-pads.json、p2-ch1.json 等,是重画各页的唯一事实来源)
- 117 张验证截图(本项目所有方向问题都是靠人眼看截图发现的,属于证据不是垃圾)
- firmware/ 的 A1 骨架与 site/ 文档站源码

.gitignore 排除:构建产物(firmware/build、host/build、sdkconfig)、
site/node_modules、__pycache__、桥接日志 _bridge.log、脚本自标的 *.stale。

.gitattributes 默认 `* -text`:现有 .py/.json 大多是 CRLF,原样存,
不让 git 重写行尾。唯一例外是 *.sh 强制 LF —— 带 \r 的 shell 脚本 bash 跑不了。

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QYuExfgyYa6DzRRcUso8M8
2026-09-06 18:18:14 +08:00

50 行
2.8 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 交接
更新:2026-09-06 完成任务包 **A1**(工程骨架)
## 一句话现状
`firmware/` 骨架立起来了:同一份 `main/` 源码在**宿主机(cygwin gcc + CTest + Unity)**
和 **ESP-IDF v5.4 / esp32s3** 两个目标下都编得过,两条验收命令都是绿的。
## 下一步
**A2**:HAL 接口(i2c / gpio / pwm / time)+ `sim` 实现。
新增的 `.c` 要**同时**登记到 `main/CMakeLists.txt` 的 `SRCS` 和
`host/CMakeLists.txt` 的 `PHONERAIL_CORE_SRCS`(两处,漏一处就是「宿主机绿了但上板编不过」)。
## 本次新增/修改的文件
- `CMakeLists.txt`、`sdkconfig.defaults` — IDF 工程根,目标 esp32s3 / 8 MB flash
- `main/phonerail.h`、`main/version.c` — 版本号与通道数,两个目标共享
- `main/app_main.c` — ESP 专用入口(宿主机构建**不含**此文件)
- `main/CMakeLists.txt` — IDF main 组件
- `host/CMakeLists.txt` — 宿主机根工程:`phonerail_core` + `unity` + `test/test_*.c` 自动成 ctest
- `host/test.sh` — 宿主机验收一条命令
- `build_idf.ps1` — 目标验收一条命令(钉死 v5.4、关 ccache)
- `test/test_version.c` — A1 的假测试(A2 起有真逻辑后可删)
- `third_party/unity/` — 从 IDF v5.4 原样复制的 Unity(上板测试同一套框架)
- `../固件开发计划.md` §10 — 钉死了 IDF 版本与测试框架两个待定项
## 验收命令与结果
```
$ bash host/test.sh
100% tests passed, 0 tests failed out of 1
$ .\build_idf.ps1 # PowerShell
phonerail.bin binary size 0x32520 bytes. ... 0xcdae0 bytes (80%) free.
Project build complete.
```
## 踩到的坑(只写会再犯的)
- **宿主机必须用 cygwin 那套 cmake/ctest/gcc**(`/c/cygwin64/bin/`)。
Windows 版 CMake(`C:\Program Files\CMake`)配 cygwin gcc 会认错平台。
- **cygwin cmake 只认 `/cygdrive/...`**:喂它 `D:/...` 会报
`Found relative path while evaluating include directories`。
所以 `host/test.sh` 先 `cd` 再全用相对路径,不传绝对路径。
同理 `-DCMAKE_C_COMPILER=/c/...` 会被 Git Bash 的路径转换搞坏,改用 `export CC=gcc`。
- **`IDF_CCACHE_ENABLE=0`**:开着 ccache 时 IDF 自带的 `esp_lcd_panel_rgb.c`
编出过一次编译器 segfault(ICE),关掉就过。已写进 `build_idf.ps1`。
- **PowerShell 5.1 + `$ErrorActionPreference="Stop"` 会把 `export.ps1` 的正常 stderr
当成终止错误**("Activating ESP-IDF 5.4" 就报红)。`build_idf.ps1` 已去掉它,改用 `exit $LASTEXITCODE`。
- 机器上有四个 IDF(v5.3.1 / **v5.4** / v5.5 / v5.5.1 / v6.0-rc1)。
PATH 上的是 `D:\Users\35138\esp\v5.4`,本工程就钉这个。
- `firmware/` 目前**不在 git 仓库里**(`D:\DCDC` 不是 git repo)。
按计划 §3.2「历史留在 git log 里」,这块还欠一次 `git init`。