39bd06adea
- 新增 26 份目录 README:App/(+log,task,util,protocol)、Drivers/BSP/(+8子系统)、 Src/、Inc/、scripts/、tools/(+6子工具)、test/、MDK-ARM/、simulator/(+sim,tests) - 每份含:定位、文件清单表、关键约束/陷阱、指向 docs 权威文档 - 第三方库与生成代码目录排除(CMSIS/HAL/Middlewares/Lib/SDL2) - docs/文档规范.md 新增 §1.1b 代码目录 README 约定;根 README 目录结构加入说明
35 lines
1.6 KiB
Markdown
35 lines
1.6 KiB
Markdown
# App/log/ — 日志子系统
|
||
|
||
> 两类日志:**持久化运行日志**(`sys_log`,落 NAND)与**控制台日志**(`console_log`,走串口)。
|
||
> 两者都遵循**单写者**模型,避免多任务交错输出。
|
||
|
||
## 文件一览
|
||
|
||
| 文件 | 作用 |
|
||
|---|---|
|
||
| `sys_log.h` | **日志接口(平台无关)**:定长 64B 记录写入 `/log/run.log`·`selftest.log` |
|
||
| `sys_log_mcu.c` | `sys_log` 的 MCU 端后端实现(NAND + FatFs) |
|
||
| `console_log.c/h` | **控制台单写者日志**:多任务日志经队列汇入唯一写者,避免串口输出交错 |
|
||
|
||
## 关键机制
|
||
|
||
### syslog(运行/自检记录)
|
||
|
||
- **唯一写者 = defaultTask**;其它任务只投递,不直接写盘
|
||
- **单记录定长 64 B**,循环写;待机页可显示记录
|
||
- **内核启动前的日志**走**无锁静态缓冲** `s_preboot[8]` 暂存(因为内核启动前不能建队列),
|
||
内核启动后由 `syslog_drain` 惰性创建真队列并排空
|
||
- ⚠️ 写盘必须校验 `f_write` 返回的**字节数**(该 FatFs 移植在簇分配失败时返回 `FR_OK` + 短写,
|
||
不报错误码);追加写必须 `FA_WRITE|FA_OPEN_APPEND`(`FA_OPEN_APPEND` 单独用**不含写位**)
|
||
|
||
### console_log(控制台单写者)
|
||
|
||
- 多任务的生产者 → **单写者消费者**,消除任务间日志行交错
|
||
- 设计详见 `docs/子系统设计/控制台单写者日志设计说明.md`
|
||
|
||
## 相关文档
|
||
|
||
- `docs/子系统设计/控制台单写者日志设计说明.md`
|
||
- `docs/子系统设计/运行与自检记录设计说明.md`
|
||
- FatFs 陷阱:`AGENTS.md`「平台约束」
|