图 11 - 核心文件依赖关系
哪个
.cc依赖哪个.cc?想改某个文件会牵涉到哪些其它文件?
如果上方图无法显示,点这里看 PNG 版本

三个核心圈
中央枢纽:application.cc(1055 行)
这是整个固件的"中央调度器"。所有子系统都和它直接挂钩:
- 音频子系统:
audio_service.cc - 协议层:
protocol.cc+ 实现 - MCP:
mcp_server.cc - OTA:
ota.cc - 资源:
assets.cc - 显示/灯:
display/、led/ - 板子:
Board
改 application.cc 要小心——会影响所有子系统的事件分发。
协议子系统
protocol.cc (抽象)
├── websocket_protocol.cc (WSS)
└── mqtt_protocol.cc (MQTT+UDP)
application.cc → 二选一动态创建 → Protocol*
加新协议(比如 HTTP/2)只需新增一个继承 Protocol 的实现,改 InitializeProtocol() 一行。
音频子系统
audio_service.cc (核心调度,686 行)
├── audio_codec.cc (硬件 codec 抽象)
│ └── codecs/*.cc (7 款具体 codec)
├── afe_audio_processor.cc (AFE 前端)
└── wake_words/*.cc (3 种唤醒词)
audio_service.cc 协调 3 个 FreeRTOS 任务和 5 个队列;具体硬件 codec 由 board 选;AFE 和唤醒词由 Kconfig 选。
改动影响范围矩阵
| 想改 | 牵涉文件 |
|---|---|
| 加新 MCP 工具 | 板子的 Initialize*Tools() 函数(独立的) |
| 加新唤醒词模型 | wake_words/、audio_service.cc(注册一个新的) |
| 加新音频 codec | codecs/<新 codec>.cc、main/CMakeLists.txt(加入编译) |
| 加新显示屏型号 | 对应 board.cc 的 InitializeDisplay()(不影响其它板) |
| 加新协议 | protocols/<new>.cc、application.cc::InitializeProtocol() |
| 加新板子 | boards/<new>/、Kconfig、main/CMakeLists.txt |
| 改状态机 | device_state.h、device_state_machine.cc、application.cc::HandleStateChangedEvent |
| 改 OTA 服务器 | 改 sdkconfig 的 OTA_URL、不动代码 |
看图小技巧
颜色编码:
- 黄色
main.cc:入口,只调一行Application::GetInstance().Initialize() - 粉色
application.cc:调度中枢 - 橙色
audio_service.cc:音频核心 - 蓝色
protocol.cc:网络抽象 - 绿色
mcp_server.cc:工具协议
一句话讲清
"application.cc 是中心;下面 5 大子系统(音频/协议/MCP/OTA/资源)通过抽象接口接进来;改任一子系统的具体实现不影响其它。Board 处于"硬件最末端",它知道所有硬件但其它模块不知道它具体是谁。"
关联章节
/01-overview§1.5(全文件分级总览表)