# App Timer 分析清单

## 原程序中的所有 App Timer

### 1. **acqTorqTimer** - 扭矩采集定时器 ⚡ 高频
- **位置**: `main.cpp:253-257`
- **周期**: `CONFIG.acq.loadCellPowerUpDuration` = **5000_us (5ms)**
- **模式**: `APP_TIMER_MODE_REPEATED`
- **功能**: 调用 `acq.rickytry()` - 分阶段采集（上电、采样、下电）
- **频率**: **5ms** - 最高频
- **优先级**: **最高**（数据采集，需要精确时序）
- **复杂度**: 高（分阶段状态机：cnt=0上电, cnt=1采样, cnt=2-8等待, cnt=9下电）

### 2. **acqBattTimer** - 电池更新定时器 🔋 低频
- **位置**: `main.cpp:260-262`
- **周期**: `CONFIG.acq.batterySampleInterval` = **3_s (3秒)**
- **模式**: `APP_TIMER_MODE_REPEATED`
- **功能**: 调用 `acq.updateBatterySync()` - 更新电池电压和百分比
- **频率**: **3秒** - 低频
- **优先级**: 中
- **复杂度**: 低（简单函数调用）

### 3. **bleBasTimer** - BLE Battery Service 更新定时器 📡 低频
- **位置**: `main.cpp:347-354`
- **周期**: `CONFIG.ble->basUpdateInterval` = **0.1_Hz (10秒)**
- **模式**: `APP_TIMER_MODE_REPEATED`
- **功能**: 调用 `bleBas->notifyWeak()` - 通知 BLE 客户端电池状态
- **频率**: **10秒** - 最低频
- **优先级**: 低（通信）
- **复杂度**: 低（简单通知）

### 4. **bleCpsTimer** - BLE Cycling Power Service 更新定时器 📡 中频
- **位置**: `main.cpp:357-365`
- **周期**: `CONFIG.ble->cpsUpdateInterval` = **4.0_Hz (250ms)**
- **模式**: `APP_TIMER_MODE_REPEATED`
- **功能**: 调用 `bleCps->notify()` - 通知 BLE 客户端功率数据
- **频率**: **250ms** - 中频
- **优先级**: 中（通信）
- **复杂度**: 低（简单通知）

### 5. **bleFcsTimer** - BLE FCS Service 更新定时器 📡 中频（可暂停）
- **位置**: `main.cpp:367-521`
- **周期**: `CONFIG.ble->fcsUpdateInterval` = **150.0_ms (150ms)** 或 **10_Hz (100ms)**
- **模式**: `APP_TIMER_MODE_REPEATED`（可暂停/恢复）
- **功能**: 调用 `bleFcs->notify()` - 通知 BLE 客户端 FCS 数据
- **频率**: **100-150ms** - 中频
- **优先级**: 中（通信）
- **复杂度**: 中（需要支持暂停/恢复）
- **特殊**: 可以暂停（`bleFcsTimer.pause()`）和恢复（`bleFcsTimer.resume()`）

### 6. **bleEsmTimer** - BLE ESM Service 更新定时器 📡 中高频
- **位置**: `main.cpp:524-566`
- **周期**: `CONFIG.ble->esmUpdateInterval` = **33.0_Hz (约30ms)** 或 **5_Hz (200ms)**
- **模式**: `APP_TIMER_MODE_REPEATED`
- **功能**: 调用 `bleEsm->notify()` - 通知 BLE 客户端 ESM 数据
- **频率**: **30-200ms** - 中高频
- **优先级**: 中（通信）
- **复杂度**: 低（简单通知）

### 7. **singleShotTimer** - FSM 状态机单次定时器 🔄 事件驱动
- **位置**: `main.cpp:174, 189`
- **周期**: 动态（由 FSM 状态转换决定）
- **模式**: `APP_TIMER_MODE_SINGLE_SHOT`
- **功能**: FSM 状态转换延迟
- **频率**: 不固定（事件驱动）
- **优先级**: 中
- **复杂度**: 中（需要与 FSM 一起迁移）

## 按频率和复杂度分类

### 高频任务（需要精确时序）⚡
1. **acqTorqTimer** - 5ms，最复杂（分阶段状态机）

### 中高频任务（周期性更新）📡
2. **bleEsmTimer** - 30-200ms，简单
3. **bleCpsTimer** - 250ms，简单
4. **bleFcsTimer** - 100-150ms，中等（需要暂停/恢复）

### 低频任务（偶尔更新）🔋
5. **acqBattTimer** - 3秒，简单
6. **bleBasTimer** - 10秒，简单

### 事件驱动任务 🔄
7. **singleShotTimer** - FSM 状态转换（不固定）

## 迁移策略

### 推荐方案：统一调度线程 + 独立高频线程

1. **高频任务独立线程**：
   - `acqTorqTimer` → 独立线程（5ms 精确时序）

2. **中低频任务统一调度**：
   - 使用 `k_work_delayable` 或 `k_timer` 管理
   - 所有 BLE 服务和电池更新

3. **事件驱动任务**：
   - FSM 使用 `k_work_delayable` 或 `k_timer`（单次触发）

## 推荐实施顺序

### 阶段 1：低频任务（最容易，先验证架构）✅
1. **acqBattTimer** - 3秒，简单
2. **bleBasTimer** - 10秒，简单

### 阶段 2：中频任务（验证调度系统）
3. **bleCpsTimer** - 250ms
4. **bleEsmTimer** - 30-200ms
5. **bleFcsTimer** - 100-150ms（注意暂停/恢复功能）

### 阶段 3：高频任务（最复杂）
6. **acqTorqTimer** - 5ms（需要精确时序，分阶段状态机）

### 阶段 4：事件驱动（需要 FSM）
7. **singleShotTimer** - FSM 状态转换（与 FSM 一起迁移）
