# 模块拆分 - 系统核心控制与存储 (Docs/50_module-breakdown/mod-sys.md) 本模块定义手环系统的生命周期、时间计数器、定时中断调度器以及断电保存数据库模块。只涉及手环本地代码实现。 ## 1. 模块职责说明 * **职责范围**: 1. 驱动系统主状态机运转(`current_state`)。 2. 提供 RTC 软时钟维护(`current_hour`, `current_min`, `current_sec`)。 3. 利用 Timer 1 产生 1ms 定时器中断,维护毫秒滴答计数器并作为其他外设时效的基础。 4. 实现 IAP 读写底层函数,对防区数据库进行存取与读取。 * **模块依赖**: * 依赖 `mod-lcd.md` 进行 UI 状态重绘。 * 依赖 `mod-rf.md` 提供 RF 解码信号与数据包注入。 * 依赖 `mod-key.md` 响应按键动作。 ## 2. 数据结构定义 ### 2.1 传感器插槽结构体 (Sensor_Slot) ```c typedef struct { u32 addr; // 24位 EV1527 地址 u8 type; // 传感器类型 u8 zone; // 防区类别 (0: 永久防区, 1: 可撤布防区) char name[16]; // 法语自定义名称 } Sensor_Slot; ``` ### 2.2 系统状态枚举 (SystemState) ```c typedef enum { STATE_NORMAL, STATE_ARMED, STATE_DISARMED, STATE_PAIR_MENU, STATE_PAIR_WAIT, STATE_PAIR_CONFIRM, STATE_PAIR_SUCCESS, STATE_PAIR_FAIL, STATE_ALARMING, STATE_SOS_EMITTED } SystemState; ``` ## 3. 模块接口说明 ### 3.1 定时与时钟函数 * `void Timer1_Init(void)`:配置 Timer 1 作为 1ms 中断源,并使能全局中断。 * `void Timer1_Isr(void) interrupt 3`:ISR 中断处理,自增时间滴答、维护 LED 闪烁周期、马达振动波形定时,以及维护软件 RTC(自增 `current_sec` 并在满 60 秒时触发主界面分钟刷新)。 ### 3.2 IAP 数据库存储接口 * `void Load_Database(void)`:从 Flash 扇区 `0xFE0000` 读取 16 组传感器配置载入内存的 `sensor_list`。 * `void Save_Database(void)`:擦除 Flash 扇区并将内存中的 `sensor_list` 写入 Flash。 * `void Add_Sensor(u32 addr, u8 type)`:向 `sensor_list` 添加传感器信息并自动调用 `Save_Database()`。 * `bit Check_Sensor_ID(u32 addr, u8 *out_slot_index)`:在数据库中检索该地址码,若存在则返回它的槽位索引。