# system-overview Specification ## Purpose TBD - created by archiving change software-design-doc. Update Purpose after archive. ## Requirements ### Requirement: FreeRTOS 任务拓扑描述 文档 SHALL 列出所有 RTOS 任务的名称、优先级、栈大小、职责及任务间通信方式。 #### Scenario: 开发者查阅任务优先级 - **WHEN** 开发者需要了解任务调度顺序时 - **THEN** 文档 SHALL 提供任务优先级表,包含:task_wchnet(优先级 6,512 字)、task_business(优先级 5,512 字)、task_heartbeat(优先级 3,256 字)、task_test_pattern(优先级 4,256 字,仅 TEST_PATTERN_MODE=1 时存在) #### Scenario: 开发者理解任务间数据流 - **WHEN** 开发者需要理解 DVP → 业务任务的数据传递时 - **THEN** 文档 SHALL 说明通过 `Frame_Ready_Flag`(volatile 标志)和 `FrameBuffer`(共享内存)传递帧数据,IRQ 置位,业务任务轮询消费 ### Requirement: 系统启动序列描述 文档 SHALL 描述 `main()` 的初始化顺序,涵盖所有外设和模块的初始化步骤及其依赖关系。 #### Scenario: 开发者定位初始化顺序问题 - **WHEN** 开发者遇到启动相关 bug 时 - **THEN** 文档 SHALL 提供启动序列:SystemClock → USART3/debug → Flash/SRAM 配置(128K+192K)→ DVP_Init → TIM2_Init → ExtTrigger_GPIO → NG_GPIO → ETH_LibInit → qdx_port_init → Preprocess_Init → TcpLogic_Init → 注册回调 → TcpLogic_Start → 创建 RTOS 任务 → vTaskStartScheduler ### Requirement: 2D 状态机完整描述 文档 SHALL 描述 2D 触发状态机的所有状态、转换条件和行为,包含外部触发和内部触发两种模式。 #### Scenario: 开发者理解 2D 外部触发流程 - **WHEN** 开发者排查外部触发抖动问题时 - **THEN** 文档 SHALL 描述:IDLE → [PA15 上升沿] → DEBOUNCE(等待 DebounceIntervalMs) → DELAY(等待 TriggerDelayMs) → BURST(发 BurstCount 帧,间隔 TriggerInternalIntervalMs) → IDLE #### Scenario: 开发者理解 2D 内部触发流程 - **WHEN** 开发者配置温度阈值触发时 - **THEN** 文档 SHALL 描述:每帧调用 `Preprocess_CheckInternalTrigger2D`,在 TriggerRoi 区域内 Max/Avg 超过 TriggerTemperatureThreshold 时触发,跳过 DEBOUNCE 直接进入 DELAY → BURST #### Scenario: 开发者理解双缓冲 TX 逻辑 - **WHEN** 开发者排查发送顺序问题时 - **THEN** 文档 SHALL 说明 `use_buffer_A` 标志在每次发送时取反,g_TxNetBuffer_A / g_TxNetBuffer_B 交替使用,避免前一帧发送未完成时被覆盖 ### Requirement: 1D 状态机完整描述 文档 SHALL 描述 1D 采集状态机的所有状态、转换条件、采集逻辑和发送条件。 #### Scenario: 开发者理解 1D 外部触发流程 - **WHEN** 开发者配置 TriggerType=2 时 - **THEN** 文档 SHALL 描述:S1D_IDLE → [PA15 上升沿] → S1D_DEBOUNCE(等待 HighTimerLimit ms) → S1D_COLLECTING(采集 temp+time 样本直到停止条件)→ 发送 → S1D_IDLE #### Scenario: 开发者理解 1D 内部触发流程 - **WHEN** 开发者配置 TriggerType=1 时 - **THEN** 文档 SHALL 描述:S1D_IDLE 中维护 3 帧滑动窗口,连续 3 帧帧最大温度 ≥ TriggerTempLimit 时进入 S1D_COLLECTING;停止条件:样本数达 BufferSize 或触发后连续 NgCountLimit 帧低温 #### Scenario: 开发者理解 1D 数据格式 - **WHEN** 开发者解析 1D 数据时 - **THEN** 文档 SHALL 说明每个样本 4 字节:[time_offset_lo, time_offset_hi, temp_lo, temp_hi],time_offset 为相对采集开始的 ms 偏移,temp 为 0.1°C/LSB 的 uint16_t ### Requirement: TEMP_REQ 辅助通道描述 文档 SHALL 描述服务器按需截图(TEMP_REQ)的触发流程和限制条件。 #### Scenario: 开发者理解 TEMP_REQ 工作方式 - **WHEN** 服务器发送 TEMP_REQ 命令时 - **THEN** 文档 SHALL 说明:`g_temp_req_pending` 置位,业务任务在下次循环读取当前 FrameBuffer 发送,is2D=1 走 Preprocess_Execute + 2D 封包,is2D=0 走 send_1d_snapshot(30 个等间距采样点);仅在对应模式 Enabled 时响应