跳到主要内容

图 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(注册一个新的)
加新音频 codeccodecs/<新 codec>.ccmain/CMakeLists.txt(加入编译)
加新显示屏型号对应 board.cc 的 InitializeDisplay()(不影响其它板)
加新协议protocols/<new>.ccapplication.cc::InitializeProtocol()
加新板子boards/<new>/Kconfigmain/CMakeLists.txt
改状态机device_state.hdevice_state_machine.ccapplication.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(全文件分级总览表)