refactor(time_sync)!: 退役 TCP :8888 对时任务,timeSyncTask 转纯 SNTP 校时节拍宿主(#78)
SNTP 客户端已随 #73/PR #77 上线合入(merge 2b848c4a),用户裁定
8888 对时任务退出历史舞台(gitea:77 线程原话,跟踪 Issue #78)。
生产侧(App/sync/time_sync.c v2.0,任务入口名不变,freertos.c 零改动):
- 删除 :8888 监听、TIME 包重组、sys_clock 写入、OPER 落痕、
net_drop_conn 队头自救整条链(TIME_SYNC_PORT 宏随退役删除)
- 任务体收敛为:就绪屏障(100ms 分片、osFlagsNoClear)→
200ms 校时节拍 task_wd_beat → time_sntp_run(net_get_generation())
→ 分片延时;喂狗节奏(TASK_WD_TIMESYNC=5,required_mask)不变
- 时钟写入口自此 = SNTP / UI 手工 / 104 C_CS,双写竞态(后写者赢)
随之消失(墙钟说明 §15 退役公告、§16 现势口径)
工具与测试:
- 删除 test/host/time_sync_server.py(对时源)与 e02_probe.py
(队头阻塞探针,载体随监听退役;判据脚本 v5_log_gap_report.py
保留供旧日志解读)
- time_sync 主机单测重写 v2.0:33 断言覆盖分片延时 / 屏障 /
SNTP 节拍与网络代次当轮交接 / 未出网守门;stub 的
net_socket.h 裁剪至 net_get_generation 作编译期绊线
- 覆盖率基线 --update-baseline 收口(time_sync.c 101→20 行为刻意
缩减,全仓 48/48 套绿)
文档与图:墙钟说明 §15 改退役公告(教训保留:CH395F FIN 丢未读
缓冲)、§16 单一网络来源;产品需求 FR-TIME-2 退役注记、§6.3 重写;
架构总览 / 软件架构规格 / 网络配置 / 网络自愈 §9.3 / BSD 指南 /
看门狗说明心跳与白名单行 / 实机测试指南 / 部署环境 / 继保规划 /
UI补齐时基口径 / 页面补齐规划 SNTP 页行 / 任务规划 README 叶数与
暂缓项行(SNTP 叶已绑、UI_PAGE_MAP_COUNT=31 口径)等约 30 处现势
口径同步;arch / net_stack 两图生成器与 SVG 同笔重跑。
台账:ram_baseline --update + check_mem_numbers --write + 体积凭证
(Code 254,648→253,428,−1,220 B)。静态链复测发现 timeSyncTask
1,904 B / iec104Task 1,600 B 低于 ISR 硬线:master 2b848c4a 同判据
timeSyncTask 即 2,056 B(本 PR 只减不增,−152 B 旧任务自身帧),
双 FAIL 为 #74/#77 后既有债;抬栈属 Ask-first 未擅自执行,登记簿
新增「静态链硬线双 FAIL」待台架复采,复测快照入 docs/内存管理/data。
验证:keil-build 0 错 0 警;time_sync/sntp 主机单测绿;
ci_local 全绿;doc-links --all 0。
This commit is contained in:
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* 主机侧单测桩:dbg_log.h
|
||||
* 模块功能:为 App/sync/time_sync.c 提供主机可编译的日志宏(映射到计数)。
|
||||
*
|
||||
* ⚠ 仅供 test/host/time_sync/ 使用,不参与 MCU 构建。
|
||||
*
|
||||
* 注意:time_sync.c 在 `#include "dbg_log.h"` 之前自行 `#define` 了
|
||||
* DBG_LINE_BUF_MAX 与 DBG_TAG(真实头会用到它们),故本桩**不得**再定义这两个宏,
|
||||
* 否则触发 C4005 宏重定义告警(/W4)。
|
||||
*
|
||||
* DBG_ERROR / DBG_INFO 计入计数器,供单测断言:
|
||||
* - "net_socket/bind/listen FAIL"、"open listener FAIL, retry later" → ERROR
|
||||
* - "no TIME packet in 30s, drop conn"、"wall clock updated"、"network re-init" → INFO
|
||||
*
|
||||
* 创建日期:2026-10-10
|
||||
*/
|
||||
|
||||
#ifndef DBG_LOG_H
|
||||
#define DBG_LOG_H
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/* 计数(在 time_sync_test.c 实现) */
|
||||
extern int g_tstest_err_count;
|
||||
extern int g_tstest_info_count;
|
||||
|
||||
#define DBG_INFO(fmt, ...) do { g_tstest_info_count++; } while (0)
|
||||
#define DBG_DEBUG(fmt, ...) do { } while (0)
|
||||
#define DBG_ERROR(fmt, ...) do { g_tstest_err_count++; } while (0)
|
||||
|
||||
#endif /* DBG_LOG_H */
|
||||
@@ -1,20 +1,18 @@
|
||||
/*
|
||||
* 主机侧单测桩:net_socket.h(含内联 net_types.h 子集)
|
||||
* 模块功能:为 App/sync/time_sync.c 提供主机可编译的网络 Socket API 声明与类型。
|
||||
* 主机侧单测桩:net_socket.h(收缩版,:8888 退役后)
|
||||
* 模块功能:为 App/sync/time_sync.c 提供主机可编译的 net_get_generation 声明。
|
||||
*
|
||||
* ⚠ 仅供 test/host/time_sync/ 使用,不参与 MCU 构建。
|
||||
* 真实头(Drivers/BSP/NET/net_socket.h)包含 net_types.h → net_config.h,并经
|
||||
* FreeRTOS.h / task.h 拖入整套 FreeRTOS;本桩改为包含同名桩头。
|
||||
* FreeRTOS.h / task.h 拖入整套 FreeRTOS;本桩改为包含同名桩头(含 FreeRTOS/task
|
||||
* 两条**保真**包含——生产源正是靠真实头的这条链拿到 vTaskDelay / pdMS_TO_TICKS)。
|
||||
*
|
||||
* 保真点:
|
||||
* - 地址族/类型/特殊地址常量与 Drivers/BSP/NET/net_types.h 逐字一致;
|
||||
* - struct net_sockaddr / net_in_addr / net_sockaddr_in 字段与真实头一致
|
||||
* (被测代码写 sin_family / sin_port / sin_addr.s_addr,桩按同布局读取);
|
||||
* - 7 个被测代码调用的接口签名与真实头一致(net_socket / net_bind / net_listen /
|
||||
* net_accept / net_close / net_recv_to / net_get_generation / net_htons)。
|
||||
* 全部由测试单元给强符号桩(脚本化返回值 + 调用记录)。
|
||||
* 收缩说明(2026-11-04)::8888 退役后本任务只剩 net_get_generation 一处网络
|
||||
* 调用。socket / bind / listen / accept / close / recv 族声明**刻意不列**——
|
||||
* 若 time_sync 循环重新伸手碰监听族 API,测试 TU 会因"未声明 + 无强符号桩"在
|
||||
* 编译/链接期直接爆,这是退役语义的编译期绊线(替代退役前的运行时断言)。
|
||||
*
|
||||
* 创建日期:2026-10-10
|
||||
* 创建日期:2026-10-10(2026-11-04 随 :8888 退役收缩)
|
||||
*/
|
||||
|
||||
#ifndef NET_SOCKET_H
|
||||
@@ -29,41 +27,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* ===== 以下取自 Drivers/BSP/NET/net_types.h(逐字) ===== */
|
||||
|
||||
#define NET_AF_INET 2 /* IPv4 */
|
||||
#define NET_SOCK_STREAM 1 /* TCP */
|
||||
#define NET_SOCK_DGRAM 2 /* UDP */
|
||||
#define NET_INADDR_ANY 0 /* 任意地址 */
|
||||
#define NET_INADDR_NONE 0xFFFFFFFF /* 无效地址 */
|
||||
|
||||
struct net_sockaddr {
|
||||
uint16_t sa_family; /* 地址族 */
|
||||
char sa_data[14]; /* 地址数据 */
|
||||
};
|
||||
|
||||
struct net_in_addr {
|
||||
uint32_t s_addr; /* IP 地址(网络字节序) */
|
||||
};
|
||||
|
||||
struct net_sockaddr_in {
|
||||
uint16_t sin_family; /* 地址族,必须为 AF_INET */
|
||||
uint16_t sin_port; /* 端口号(网络字节序) */
|
||||
struct net_in_addr sin_addr; /* IP 地址(网络字节序) */
|
||||
char sin_zero[8]; /* 填充字节 */
|
||||
};
|
||||
|
||||
/* ===== 被测代码用到的 Socket API(签名与真实头一致) ===== */
|
||||
|
||||
int net_socket(int domain, int type);
|
||||
int net_bind(int sockfd, const struct net_sockaddr *addr, int addrlen);
|
||||
int net_listen(int sockfd);
|
||||
int net_accept(int sockfd, struct net_sockaddr *addr, int *addrlen);
|
||||
int net_close(int sockfd);
|
||||
int net_drop_conn(int sockfd);
|
||||
int net_recv_to(int sockfd, void *buf, int len, uint32_t timeout_ms);
|
||||
/* 与 Drivers/BSP/NET/net_socket.h 签名一致 */
|
||||
uint32_t net_get_generation(void);
|
||||
uint16_t net_htons(uint16_t hostshort);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
* 主机侧单测桩:sys_clock.h
|
||||
* 模块功能:为 App/sync/time_sync.c 提供主机可编译的墙钟设置接口声明。
|
||||
*
|
||||
* ⚠ 仅供 test/host/time_sync/ 使用,不参与 MCU 构建。
|
||||
* 真实头(App/util/sys_clock.h)含日历/闰年等无关声明;本桩只保留被测代码
|
||||
* 真正调用的那一个(签名与真实头逐字一致:int sys_clock_set_unix(uint32_t))。
|
||||
*
|
||||
* 由测试单元给强符号桩,记录"是否被调用"与"最后一次的 epoch"。
|
||||
*
|
||||
* 创建日期:2026-10-10
|
||||
*/
|
||||
|
||||
#ifndef SYS_CLOCK_H
|
||||
#define SYS_CLOCK_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int sys_clock_set_unix(uint32_t unix_secs);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* SYS_CLOCK_H */
|
||||
@@ -4,8 +4,9 @@
|
||||
*
|
||||
* ⚠ 仅供 test/host/time_sync/ 使用,不参与 MCU 构建。
|
||||
*
|
||||
* 两个接口由测试单元给强符号桩:vTaskDelay 记录每片睡眠时长(断言"≤50ms 分片"),
|
||||
* xTaskGetTickCount 由测试单元提供可控时钟(驱动 30s 预算耗尽与 32 位回绕用例)。
|
||||
* 接口由测试单元给强符号桩:vTaskDelay 记录每片睡眠时长(断言"≤50ms 分片");
|
||||
* xTaskGetTickCount 保留可控时钟声明(:8888 退役后生产源已不读 tick,桩仍提供,
|
||||
* 供未来需要预算/回绕类用例时直接取用)。
|
||||
*
|
||||
* 创建日期:2026-10-10
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user