文件
phonerail/firmware/HANDOFF.md
T

51 行
2.9 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`,本工程就钉这个。
- **git 仓库已建**(`D:\DCDC`,分支 `main`,初始提交 `7a85df9`)。
`.gitattributes` 默认 `* -text`(不重写行尾),只有 `*.sh` 强制 LF。
`build/`、`host/build/`、`sdkconfig` 已被忽略,别硬 `git add -f` 进去。