docs: 重新设计系统依赖架构图,并增补依赖与非阻塞异步设计原则说明

This commit is contained in:
2026-07-09 19:50:10 +08:00
parent cf2e7a7d63
commit 85a01627ee

View File

@@ -114,34 +114,85 @@ typedef struct {
## 4. 软件层级架构与核心代码框架
软件系统采用 **非阻塞**三层级模块化架构设计:
软件系统采用 **分层依赖、事件驱动、非阻塞** 的模块化架构设计。其层级结构与核心依赖关系如下
### 4.1 系统层级依赖与调用图
```mermaid
graph TD
subgraph Layer3 ["应用层 (APP)"]
MainScheduler[主循环轮询 & 喂狗]
SysStateMachine[SystemState 业务状态机]
SoftRTC[软件 RTC 计时器]
%% 定义层级背景色与分组
subgraph LayerAPP ["应用逻辑层 (APP Layer)"]
MainScheduler["主循环调度器 (main.c)"]
SysStateMachine["SysState 业务状态机"]
SoftRTC["软件 RTC 计时器"]
end
subgraph Layer2 ["外设驱动层 (DRV)"]
AMOLED[RM69310 AMOLED 屏幕绘制]
RF[LR690L 编解码 & 过滤 0x08 SOS 信号]
KEY[按键消抖 & 长按长计时]
PM[低功耗休眠与唤醒]
LED[WS2812B 级联双彩灯时序]
MOTOR[振动马达脉冲时序]
subgraph LayerDRV ["外设驱动层 (DRV Layer)"]
AMOLED["Truly RM69310 屏幕绘制"]
RF["LR690L RF 编解码及发射"]
KEY["按键检测与队列缓冲"]
PM["极低功耗电源管理"]
LED["WS2812B 双彩灯控制"]
MOTOR["振动马达异步时序"]
end
subgraph Layer1 ["硬件抽象与时基层 (HW)"]
Timer1["Timer 1 中断 (1ms 滴答)"]
ADC[12位电压采集]
Flash[IAP 读写]
GPIO[数字 I/O 与电平中断]
subgraph LayerHW ["硬件抽象与时基层 (HW Layer)"]
Timer1["Timer 1 (1ms 中断时基)"]
ADC["ADC (12位电量采集)"]
Flash["IAP (内嵌 Flash 读写)"]
GPIO["GPIO (端口控制/中断唤醒)"]
end
Layer1 --> Layer2
Layer2 --> Layer3
%% --- 依赖与调用连线 ---
%% 硬件时基驱动外设异步处理 (由 ISR 驱动,非阻塞)
Timer1 -->|1ms 中断调度| KEY
Timer1 -->|分频 10ms 驱动| MOTOR
Timer1 -->|中断分频闪烁| LED
Timer1 -->|秒级分频累加| SoftRTC
%% 外设层对硬件抽象层的调用
AMOLED -->|SPI 端口操作| GPIO
RF -->|INT2 沿中断捕获| GPIO
KEY -->|引脚高阻上拉输入| GPIO
PM -->|SHUT 引脚控制 SGM3833| GPIO
LED -->|P2.6 SPI_MOSI 时序| GPIO
MOTOR -->|P2.4 PWM 电平输出| GPIO
%% 应用层与外设层、硬件层的交互 (事件驱动 & 主循环轮询)
MainScheduler -->|1. 轮询读入按键事件| KEY
MainScheduler -->|2. 轮询捕获 RF 数据包| RF
MainScheduler -->|3. 喂看门狗| GPIO
MainScheduler -->|分发事件与控制跳转| SysStateMachine
SysStateMachine -->|重绘标志 Redraw=1 触发| AMOLED
SysStateMachine -->|读取/保存配对配置| Flash
SysStateMachine -->|启动特定防区闪烁/爆闪| LED
SysStateMachine -->|启动特定防区马达震动| MOTOR
SysStateMachine -->|休眠判定与硬件断电睡眠| PM
SysStateMachine -->|主动发射对码/SOS载波| RF
SysStateMachine -->|读取电量及充电状态| ADC
SysStateMachine -->|获取/更新待机时间| SoftRTC
```
### 4.1 核心主程序调度框架 (main.c)
### 4.2 架构设计与依赖原则说明
1. **单向依赖原则**
* **APP 层**仅依赖于 **DRV 层**提供的高级抽象接口(例如 `LED_Set_Color``Motor_Start_Pattern`)和 **HW 层**的数据库读写。**严禁**在 APP 层直接写入具体 IO 寄存器。
* **DRV 层**调用 **HW 层**提供的基础时基与 GPIO 端口函数,不保存任何系统级别的状态变量(`current_state` 等)。
* **HW 层**为最底层,除触发中断服务子程序 (ISR) 外,不依赖任何上层逻辑。
2. **事件驱动与非阻塞机制**
* **按键事件缓冲机制**`KEY` 驱动在 Timer1 中断中进行每 10ms 的定时扫描消抖。识别到有效按键动作后,将其转换为 `KeyEvent` 并压入内部的 **环形事件队列**。主循环通过轮询读出该事件,避免了在按键按下时产生任何 `while` 等待导致系统挂起。
* **马达与彩灯的异步时序设计**`MOTOR``LED` 的报警波形(如:长震、间歇闪烁)均采用在 1ms 中断中自动扣减计数器的方式实现。APP 层发出启动指令后立即返回,由硬件中断负责底层的波形电平跳转,保证了射频解码及按键响应不会因为声光报警动作而产生卡顿。
3. **电源控制与低功耗恢复链条**
* 休眠决策完全由主循环内的 `inactivity_timer` 进行倒计时判定。
* 进入休眠前,由 `PM` 驱动断开 `SGM3833` 电源以彻底消除 AMOLED 的暗漏电流。
* 唤醒时,由 GPIO 的电平沿变化触发中断,唤醒 CPU 后由 `PM` 优先执行 **“上电 -> 强延时 50ms 避开浪涌 -> 屏幕控制器重初始化”** 的安全恢复时序,防止未稳定电网下的写屏导致屏幕损坏或花屏。
### 4.3 核心主程序调度框架 (main.c)
主程序采用完全解耦的时间片轮询加事件触发的非阻塞循环结构: