# app_init 模块说明(app_init.c / app_init.h) > 本文档描述 `CCU621_M` 工程中 `app_init.c` 与 `app_init.h` 的职责、接口与使用约束。 [返回主说明](./../../README.md) ## 快速跳转 - [1. 模块职责](#1-模块职责) - [2. 涉及文件](#2-涉及文件) - [3. 对外接口](#3-对外接口) - [4. app_os_init 初始化流程](#4-app_os_init-初始化流程) - [5. 任务表说明(当前版本)](#5-任务表说明当前版本) - [6. 依赖关系](#6-依赖关系) - [7. 维护注意事项](#7-维护注意事项) - [返回主说明 README](./../../README.md) --- ## 1. 模块职责 `app_init` 是应用层任务初始化总入口,负责: - 维护统一任务表 `my_task_data[]`(名称/优先级/栈/周期/入口函数/参数); - 在 `app_os_init()` 中统一创建任务(`xTaskCreate`); - 维护任务ID枚举 `TASK_ID` 与任务表下标一一对应; - 提供任务周期、任务名称等统一访问宏; - 为 lwIP 提供 `MY_TCPIP_NAME/MY_TCPIP_PRIO/MY_TCPIP_SIZE` 参数来源。 > 说明:当前工程是“集中创建任务”模式,不同于 `CCU601E_D` 的“各模块内部 `*_init()` 分散创建”模式。 --- ## 2. 涉及文件 | 文件 | 说明 | |---|---| | `app/app_init/app_init.c` | 任务表定义 + `app_os_init()` 创建逻辑 | | `app/app_init/app_init.h` | 栈/周期宏、`TASK_ID`、任务结构体、访问宏 | | `app/app_init/task_lock.c/h` | 任务锁统一接口(每任务一个锁句柄) | --- ## 3. 对外接口 ### 3.1 函数 | 符号 | 说明 | |---|---| | `void app_os_init(void)` | 应用任务初始化总入口(由 `main.c` 调用) | ### 3.2 全局数据 | 符号 | 说明 | |---|---| | `const MY_TASK_DATA my_task_data[MY_TASK_NUM]` | 全部任务配置表 | ### 3.3 关键类型与宏 - `MY_TASK_DATA`:任务名称、优先级、栈(字节)、周期(ms)、入口函数、入口参数; - `TASK_ID`:任务ID,**必须与 `my_task_data[]` 顺序一致**; - `MY_TASK_NUM`:任务数量(由 `TASK_ID` 枚举尾项决定); - `mSleep(x)`:`vTaskDelay(pdMS_TO_TICKS(x))` 封装; - `MY_GET_SLEEP_TIME(task_id)`:取任务周期; - `MY_GET_TASK_NAME(task_id)`:取任务名称; - `MY_TCPIP_NAME/MY_TCPIP_PRIO/MY_TCPIP_SIZE`:由 `my_task_data[TASK_ID_TCPIP]` 映射得出,供 lwIP 配置使用。 --- ## 4. `app_os_init()` 初始化流程 当前流程(以 `app_init.c` 为准): 1. 若 `MY_SHELL_EN=1`:执行 `userShellInit()`; 2. 遍历 `my_task_data[]`; 3. 对 `task_entry != NULL` 的任务执行 `xTaskCreate(...)`; 4. 忽略 `task_entry == NULL` 的条目(如 `EthIf`、`TCP/IP` 由 lwIP 内部创建)。 --- ## 5. 任务表说明(当前版本) `my_task_data[]` 当前主要任务: - `EthIf`(占位,lwIP线程) - `TCP/IP`(占位,lwIP线程) - `DataColl` - `FaultCheck` - `MduComm` - `MyShell`(条件编译) - `UiComm` - `WatchDog` - `MeterColl` - `MyLog` - `EthLink` > `EthIf`、`TCP/IP` 仅用于参数对齐与状态展示,不由 `app_os_init` 直接创建。 --- ## 6. 依赖关系 - 被 `main.c` 调用:`app_os_init()` - 依赖模块: - `mylog/collect_ctrl/fault_cheak/mdu_comm/ui/meter_calculate/wdt_task` - `BSP/net_lwip`(`eth_link_thread`) - `BSP/letter_shell`(条件编译) --- ## 7. 维护注意事项 1. 新增任务时必须同步修改: - `TASK_ID` 枚举; - `my_task_data[]` 表项; - 相关任务源文件中的任务ID宏(若使用模板化风格)。 2. `my_task_data[]` 与 `TASK_ID` 顺序不一致会导致: - 周期读取错误; - 日志任务名错误; - 看门狗计数映射异常。 3. 若调整 `TCP/IP` 参数,建议只改任务表对应项,不在其他位置重复写常量。 4. `MY_SHELL_EN` 会影响任务数量与任务ID布局(`TASK_ID_MyShell` 条件编译)。 --- ## 关联文档 - 主索引:[`CCU621_M/README.md`](./../../README.md) - 本文位置:`app/app_init/app_init模块说明.md`