# 线程架构设计

## 当前设计

### 线程结构

```
系统启动
  └── main() 函数
       └── 创建主线程 (main_thread)
            ├── 初始化配置模块
            ├── 初始化其他模块
            └── 创建工作线程 (worker_thread)
                 └── 执行具体任务
```

### 线程说明

#### 1. 主线程 (main_thread)
- **职责**：系统初始化和协调
- **栈大小**：2048 字节
- **优先级**：7
- **功能**：
  - 初始化配置模块
  - 初始化其他模块（后续添加）
  - 创建和管理其他线程
  - 主循环（状态机、事件处理等）

#### 2. 工作线程 (worker_thread)
- **职责**：执行具体任务
- **栈大小**：1024 字节
- **优先级**：7
- **功能**：
  - 示例线程，演示线程使用
  - 后续可以用于数据采集、状态机等

## 后续扩展

### 建议的线程架构（7 个状态对应 7 个任务）

根据原代码的 7 个状态，可以设计如下线程架构：

```
1. 主线程 (main_thread)
   - 系统初始化
   - 状态机协调
   - 事件分发

2. 数据采集线程 (acq_thread)
   - IMU 数据采集
   - ADC 数据采集
   - 数据滤波和处理

3. 电池监控线程 (battery_thread)
   - 电池电压监测
   - 电池百分比计算
   - 低电量处理

4. BLE 线程 (ble_thread)
   - BLE 服务管理
   - GATT 数据更新
   - 连接管理

5. ANT 线程 (ant_thread)
   - ANT 协议处理
   - ANT 数据发送
   - ANT 连接管理

6. 状态机线程 (fsm_thread)
   - 状态转换逻辑
   - 定时器管理
   - 状态持久化

7. LED 控制线程 (led_thread)
   - LED 状态显示
   - LED 动画控制
   - 用户反馈
```

## Zephyr 线程 API 说明

### 创建线程

```c
k_tid_t k_thread_create(
    struct k_thread *thread,           // 线程结构体
    k_thread_stack_t *stack,           // 线程栈
    size_t stack_size,                  // 栈大小
    k_thread_entry_t entry,            // 入口函数
    void *p1, void *p2, void *p3,      // 参数
    int prio,                          // 优先级
    uint32_t options,                  // 选项
    k_timeout_t delay                  // 延迟启动
);
```

### 线程优先级

- **数值越小，优先级越高**
- 建议范围：0-7（共 8 个优先级）
- 0 = 最高优先级
- 7 = 最低优先级

### 线程栈

- 使用 `K_THREAD_STACK_DEFINE()` 定义线程栈
- 栈大小需要根据线程需求设置
- 建议：主线程 2048 字节，工作线程 1024-1536 字节

## 注意事项

1. **线程安全**：多个线程访问共享资源时，需要使用互斥锁或信号量
2. **栈溢出**：确保线程栈足够大，避免栈溢出
3. **优先级**：合理设置线程优先级，避免低优先级线程饿死
4. **同步**：使用 `k_sem`, `k_mutex`, `k_msgq` 等进行线程间通信

## 下一步

1. ✅ 基本线程框架已建立
2. ⏭️ 可以继续迁移驱动层（LED、ADC、IMU）
3. ⏭️ 或者先实现状态机线程框架

