9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
130 lines
3.9 KiB
Markdown
130 lines
3.9 KiB
Markdown
# 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`
|