栈整改不抬栈:删旧档迁移、FIL静态化、日志行缓冲按模块收紧、钩子脱离HAL,defaultTask链5312→2776B

This commit is contained in:
2026-10-10 10:17:00 +08:00
parent 5c978465c9
commit 0779d3a075
54 changed files with 3203 additions and 2770 deletions
+8 -3
View File
@@ -1,6 +1,6 @@
# Drivers/BSP/NETCFG/ — 网络配置
> 网络参数的**加载 / 保存 / 旧档迁移**(IP、掩码、网关等)。
> 网络参数的**加载 / 保存**(IP、掩码、网关等)。
> 本模块是**网络配置的持久化层**,与 `App/cfg/cfg_file.c`(配置引擎)配合工作。
## 文件一览
@@ -8,12 +8,17 @@
| 文件 | 作用 |
|---|---|
| `net_cfg.c/h` | 网络配置加载(`net_cfg_load`)/ 保存(`net_cfg_save_run`)+ RAM 副本管理 |
| `net_cfg_legacy.c/h` | **旧版配置档迁移**(首启时把旧格式转换为当前格式) |
> **已删除(2026-10-10)**:`net_cfg_legacy.c/h`——旧二进制档 `/cfg/netcfg.bin` 的"首启自动迁移"。
> 现口径:旧档若存在则被**忽略**(不读、不删、不迁移),配置直接回落工厂默认(`/config.ini`
> `[network]` 段)。删除理由:该一次性路径把整条配置写链(`net_cfg_save → cfg_file_save →
> cfg_store_write_atomic → f_rename → FatFS → dhara FTL`)挂进启动期调用图,使 defaultTask 的
> armlink 静态最坏栈链 +600 B,而本仓库不存在携带旧档的设备。
## 工作流
```
defaultTask:net_cfg_load(含旧档迁移)→ 置 STORAGE_READY
defaultTask:net_cfg_load → 置 STORAGE_READY
↓ (网络配置在屏障前已加载)
netTask:只读 RAM 副本 → net_stack_bring_up(不在 netTask 里读盘)
↓
+12 -7
View File
@@ -2,8 +2,7 @@
* 模块名称:Network Configuration Core (配置核心)
* 模块功能:RAM 配置副本 + 工厂默认 + 加载/保存编排 + 实际 MAC 影子 +
* IPv4 字符串转换;存储经 cfg_file 通用配置文件引擎(INI [network]
* 段:ip/mask/gw/mac);旧版 NCFG 二进制格式归 net_cfg_legacy
* (首启一次性迁移)
* 段:ip/mask/gw/mac)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:王建锋
* 创建日期:2026-09-10
@@ -12,6 +11,12 @@
* v1.1 2026-09-14 王建锋 存储迁移至 cfg_file 引擎(INI);旧 NCFG 代码移至 net_cfg_legacy
* v1.2 2026-09-15 王建锋 保存改跨任务交接(request/state/run + 通知回调);
* 引擎属主 = defaultTask(P1-3 竞态修复)
* v1.3 2026-10-10 王建锋 **删除旧档 NCFG 迁移**(net_cfg_legacy 整体移除):该兼容
* 路径把整条配置写链(net_cfg_save → cfg_file_save →
* cfg_store_write_atomic → f_rename → FTL)挂进启动期调用图,
* 使 defaultTask 静态最坏链 +600 B;本仓库无携带
* /cfg/netcfg.bin 的设备,故按"不保留旧档兼容"处置。
* 旧档若存在 → 被忽略(不读、不删、不迁移),配置回落工厂默认
*/
/* 头文件包含区 */
@@ -23,10 +28,11 @@
#include "net_cfg.h"
#include "net_cfg_legacy.h"
#include "cfg_file.h"
/* 深调用链模块(net_cfg_load/save 在 defaultTask 启动链与保存链上):
* 日志行缓冲收到 128 B(默认 192),本模块最长行渲染后 < 128 → 不截断 */
#define DBG_LINE_BUF_MAX 128U
#define DBG_TAG "[NET_CFG]"
#include "dbg_log.h"
@@ -140,9 +146,8 @@ static bool s_mac_is_zero(const uint8_t *p_mac) {
int net_cfg_load(void) {
s_net_register();
/* 首启先迁旧档 NCFG(有效 → 旧值物化进新文件);新文件已存在则跳过 */
(void)net_cfg_legacy_migrate();
/* 旧档 NCFG 迁移已于 2026-10-10 删除(net_cfg_legacy 移除;理由见文件头 v1.3)。
* 若卷上仍残留 /cfg/netcfg.bin:不读、不删、不迁移 → 配置回落工厂默认 */
if (cfg_file_load() != 0) {
/* 严重错误:引擎已将 RAM 副本复位工厂默认,行为仍安全 */
DBG_ERROR("load: cfg_file_load FAIL");
+3 -2
View File
@@ -7,8 +7,9 @@
* = 不覆盖芯片内置 MAC。cfg_file 引擎为静态单任务设计,调用收敛于
* 单一属主任务(MCU = defaultTask:就绪屏障前加载 / 保存执行 / 2s
* poll;模拟器 = 主循环);UI 保存只投递请求,netTask 只读 RAM 副本
* 函数说明:旧版 NCFG 二进制格式(magic+ver+CRC-16+18B 字段)归 net_cfg_legacy,
* 首启一次性迁移进通用配置文件
* 函数说明:旧版 NCFG 二进制格式(magic+ver+CRC-16+18B 字段)的迁移路径
* (net_cfg_legacy)**已于 2026-10-10 删除** → 旧档 /cfg/netcfg.bin
* 不再读取/迁移,携带旧档的设备升级后回落工厂默认(理由见 net_cfg.c v1.3)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:王建锋
* 创建日期:2026-09-10
-125
View File
@@ -1,125 +0,0 @@
/*
* 模块名称:net_cfg_legacy
* 模块功能:旧版 NCFG 二进制配置一次性迁移——读遗留文件 → 校验 magic/ver/CRC →
* 填网络配置 RAM 副本 → 经 cfg_file 引擎生成新文件(带旧值)→ 删旧文件
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用;平台路径经 cfg_file_store 后端)
* 作者:王建锋
* 创建日期:2026-09-14
* 修改记录:
* v1.0 2026-09-14 王建锋 创建初始版本(P3:net_cfg 引擎化,旧格式代码迁入)
*/
/* 头文件包含区 */
#include <string.h>
#include "net_cfg_legacy.h"
#include "net_cfg.h"
#include "cfg_file.h"
#include "cfg_file_store.h"
#define DBG_TAG "[NET_CFG]"
#include "dbg_log.h"
/* 常量定义区 */
#define NET_CFG_MAGIC 0x4647434Eu /* 'NCFG'(文件字节序 N,C,G,F;小端装载) */
#define NET_CFG_VER 1u /* 磁盘格式版本 */
/* 旧磁盘格式(两端布局一致:u32 4 对齐;字段区 18B 连续,CRC 覆盖之) */
typedef struct {
uint32_t magic; /* NET_CFG_MAGIC */
uint16_t ver; /* 格式版本 */
uint16_t crc; /* CRC-16/MODBUS(覆盖 ip..mac 共 18B) */
uint8_t ip[4];
uint8_t mask[4];
uint8_t gw[4];
uint8_t mac[6];
} net_cfg_blob_t;
/* 静态函数声明区 */
static uint16_t s_crc16_modbus(const uint8_t *p_data, size_t len);
/* 函数定义区 */
/*
* 函数功能:CRC-16/MODBUS(无查表逐位算法)
* 入口参数:p_data - 数据指针 const uint8_t *
* len - 数据长度 size_t
* 返回值:CRC-16 值 uint16_t
* 限定条件:p_data 非空(len 可为 0,返回初始值 0xFFFF)
* 函数说明:文件私有(数据量 ≤32B,性能无关)
*/
static uint16_t s_crc16_modbus(const uint8_t *p_data, size_t len) {
uint16_t crc = 0xFFFFu;
for (size_t i = 0u; i < len; i++) {
crc = (uint16_t)(crc ^ (uint16_t)p_data[i]);
for (int b = 0; b < 8; b++) {
if (crc & 0x0001u) {
crc = (uint16_t)((crc >> 1) ^ 0xA001u);
}
else {
crc = (uint16_t)(crc >> 1);
}
}
}
return crc;
}
/*
* 函数功能:旧 NCFG 二进制配置一次性迁移到通用配置文件
* 入口参数:无
* 返回值:0 - 迁移成功,或无旧文件/新文件已存在(正常);-1 - 迁移失败 int
* 限定条件:调用方须已注册 [network] 段(net_cfg_load 内部完成)
* 函数说明:见 net_cfg_legacy.h 同名函数说明
*/
int net_cfg_legacy_migrate(void) {
net_cfg_blob_t blob;
uint8_t buf[32];
size_t nread = 0u;
cfg_file_stat_t st;
net_cfg_t tmp;
const char *p_legacy;
/* 新文件已存在 = 已迁移过(或已有配置):跳过 */
if (cfg_store_stat(cfg_store_config_path(), &st) == 0) {
return 0;
}
p_legacy = cfg_store_legacy_path();
if (cfg_store_read(p_legacy, buf, sizeof(buf), &nread) != 0
|| nread != sizeof(net_cfg_blob_t)) {
DBG_INFO("legacy: no legacy file, skip");
return 0;
}
(void)memcpy(&blob, buf, sizeof(blob));
if (blob.magic != NET_CFG_MAGIC || blob.ver != NET_CFG_VER
|| s_crc16_modbus(blob.ip, 18u) != blob.crc) {
DBG_INFO("legacy: blob invalid (magic/ver/crc), file kept for inspection");
return 0;
}
/* 填 RAM 副本(net_cfg_get 只读,经 net_cfg_set 可写接口整体回灌)
* → 经引擎物化旧值到新文件(此时新文件必缺失 → 生成模板带旧值) */
(void)memcpy(&tmp, net_cfg_get(), sizeof(tmp));
(void)memcpy(tmp.ip, blob.ip, 4u);
(void)memcpy(tmp.mask, blob.mask, 4u);
(void)memcpy(tmp.gw, blob.gw, 4u);
(void)memcpy(tmp.mac, blob.mac, 6u);
net_cfg_set(&tmp);
if (net_cfg_save() != 0) {
DBG_ERROR("legacy: migrate save FAIL");
return -1;
}
(void)cfg_store_remove(p_legacy);
DBG_INFO("legacy: migrated to config file (ip=%u.%u.%u.%u)",
(unsigned)blob.ip[0], (unsigned)blob.ip[1],
(unsigned)blob.ip[2], (unsigned)blob.ip[3]);
return 0;
}
-35
View File
@@ -1,35 +0,0 @@
/*
* 模块名称:net_cfg_legacy
* 模块功能:旧版 NCFG 二进制配置一次性迁移到通用配置文件(net_cfg 旧磁盘格式
* 的拥有者:magic 'NCFG' + ver + CRC-16/MODBUS + 18B 字段)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用;平台路径经 cfg_file_store 后端)
* 作者:王建锋
* 创建日期:2026-09-14
* 修改记录:
* v1.0 2026-09-14 王建锋 创建初始版本(P3:net_cfg 引擎化,旧格式代码迁入)
*/
#ifndef NET_CFG_LEGACY_H
#define NET_CFG_LEGACY_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* 函数功能:旧 NCFG 二进制配置(28B)一次性迁移到通用配置文件
* 入口参数:无
* 返回值:0 - 迁移成功,或无旧文件/新文件已存在(正常);
* -1 - 迁移失败(新文件未生成) int
* 限定条件:调用方须已注册 [network] 段(net_cfg_load 内部完成)
* 函数说明:新文件已存在 → 跳过(已迁移过);旧文件有效 → 填网络配置 RAM
* 副本 → 经引擎生成新文件(带旧值)→ 删旧文件;旧文件缺失/无效 →
* 不动旧文件(留人工检查),新文件按工厂默认生成
*/
int net_cfg_legacy_migrate(void);
#ifdef __cplusplus
}
#endif
#endif /* NET_CFG_LEGACY_H */