chore(编号): 存量编号全量转语义短语,门禁识别面与语料同批重打
登记簿、文档与代码注释里的存量字母加数字编号(N-x / S-x / T-x / E-x / A-x / 卡号) 一律改写为语义短语,净删 2,028 处引用;删除基线与待确认、并行分道方案、排期详述、 采集保护收尾 4 篇(内容已并入 docs/任务规划/README 与登记簿)。 门禁机器与三张账同批重打:check_ids.py 新增变更记录行豁免与第二根护栏 undecidable_total_ceiling;check_test_traceability.py 只加 stdout/stderr UTF-8 reconfigure(TC_RE 未动);check_cubemx_survival.py 的 --write 固定 newline=LF; id_registry / id_aliases(+19 条 retired-to-phrase)/ id_known_backlog 重打。 test/ 56 个文件同步 TC 标签语义化,其中 18 个 TU 改了 CHECK / printf 里的标签文字, 是本批唯一改变构建产物的文件集合。 为什么合成一笔、不拆四笔(实测撞闸,非偏好):pre-commit 跑钩子前会 stash 未 staged 部分,拆开后中间提交必然是「新规则 + 旧语料」——实跑可判定 85.15% < 基线 86.00%、 不可判定 1,453 > 上限 1,166,编号门禁直接拦下。编号识别面与它描述的语料只能同码移动。 实跑基线(工作区全量):754 文件 / 8,230 处编号字面量 / 可判定 7,079 = 86.01% (基线 86.0%,容差 0.1pp)/ 不可判定绝对数 1,151(上限 1,166)/ 校验 1-6 错误级 0 / 告警 = 悬空 2(App/algo/freq.c 的 S2,属 §4.4 同号不同义)+ 孤儿 50。 基线从 84.0 抬到 86.0 的理由见 docs/门禁说明/id-check.md §7.6:本批真删了 2,028 处 引用,可判定面随真实内容上升,不是把分母做小。同批新增排除 docs/硬件平台/ 语料,使 识别面少 264 处——芯片手册位号与网表料号不属编号空间(registry 有 excluded_paths_note)。 ⚠ 余量只剩 0.11pp(约 10 处)与绝对数 15 处:把「可判定的引用」改成散文会立刻撞第二 根护栏。另遗留一项:id_aliases 里 retired 的 N / S / T / A 别名没有 scope(U1~U5 有), 今后有人新写一个 A-4,校验 3 不会响,只能靠人,建议下批补 scope。 固件不变证据:115 个 .c/.h 剥注释并归一字符串后与 HEAD 逐字节全等,残留代码差异 0; App / Src / Drivers 的字符串字面量零改动。@build 0 错误 0 警告;40/40 主机套件、2,889 断言全通过;覆盖率 line 89.2% / func 92.6%;pre-commit 48 钩子 --all-files 全绿; check_doc_links --all 通过(176 文档,章节引用无法判定 0);逐字节卫生核过:14 个带 BOM 文件与 HEAD 一致、0 个 CR、0 个 U+FFFD,字符串字面量纯 ASCII。 .cubemx_survival_baseline.json 的 watchdog-module 哈希 56bf27 变 2bb051 属合法: Src/freertos.c 的 USER CODE 区内只有注释文字随编号改写,代码未变。 同批带上体积同码凭证与 RAM 台账行(@build 之后盖戳):RW_IRAM1 79,008 B / 60.3%, RW_CCM 57,376 B / 87.9%,阈值 92%。
This commit is contained in:
@@ -28,9 +28,9 @@
|
||||
* 描述符 init_cb(开页后调一次,页面模块重置运行态)
|
||||
* 2026-09-13 王建锋 cp_draw_cb 按区块拆为四个绘制子函数(cp_draw_deco/header/rows/footer),
|
||||
* 主函数仅编排(行数取一次供行窗口/页脚共用),行为零变化
|
||||
* 2026-10-15 王建锋 U1 设计令牌层:屏幕/骨架/行距/缓冲/1bpp 语义色字面量收进
|
||||
* 2026-10-15 王建锋 UI 设计令牌层:屏幕/骨架/行距/缓冲/1bpp 语义色字面量收进
|
||||
* ui_tokens.h(纯替换,像素逐位一致)
|
||||
* 2026-10-15 王建锋 U3 页面原型化:删 content_page_id_t 枚举与 s_defs[],open() 改收
|
||||
* 2026-10-15 王建锋 UI 页面原型化:删 content_page_id_t 枚举与 s_defs[],open() 改收
|
||||
* 描述符指针、s_open 变指针(NULL = 未打开);7 个页面头包含移交
|
||||
* ui_page_registry.c;日志页身份改打描述符 id(ASCII 页名,比原
|
||||
* id=%u 更可定位);绘制/按键/几何一律未动
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
* 是否过密码页/所输密码决定);描述符新增 edit_capable(页面
|
||||
* 是否支持编辑模式)+ 新 API ui_content_page_is_editable
|
||||
* (页面钩子据以决定编辑行为:edit_capable 且修改权限)
|
||||
* 2026-10-15 王建锋 U3 页面原型化:删 content_page_id_t 枚举与框架侧 s_defs[],
|
||||
* 2026-10-15 王建锋 UI 页面原型化:删 content_page_id_t 枚举与框架侧 s_defs[],
|
||||
* open() 改收描述符指针;节点→页面绑定移交给生成物
|
||||
* ui_page_registry.c(菜单树 #page= 注记为唯一真源),
|
||||
* 逻辑层手写 menu_content_page_for() 随之删除;
|
||||
|
||||
@@ -53,7 +53,7 @@ uint8_t ui_menu_tab_children(uint8_t node, uint8_t out[], uint8_t max);
|
||||
* 入口参数:node - 节点下标 uint8_t 0 - 表长-1
|
||||
* 返回值:true - 有子项(显示为菜单,带 ▶);false - 无子项(叶子,可进内容页)
|
||||
* 限定条件:纯查询,无副作用;node 越界返回 false
|
||||
* 函数说明:这是**谓词**(bool 合法),不是成败码——S-5 的 err-type 检查里白名单放行的形态。
|
||||
* 函数说明:这是**谓词**(bool 合法),不是成败码——err-type 检查里白名单放行的形态。
|
||||
*/
|
||||
bool ui_menu_tab_has_children(uint8_t node);
|
||||
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
* 2026-09-10 王建锋 改为双端共用:底层改用 net_* API + 平台后端;接收改为逐字节
|
||||
* 状态机(失步自动重同步);断开/网络重建后经 net_get_sock 判活
|
||||
* 并重建监听(修复 MCU 单连接模型断线后无法重连的隐患)
|
||||
* 2026-10-02 王建锋 E-04:remo_send 校验 net_send 返回值(原丢弃)——短写/失败
|
||||
* 2026-10-02 王建锋 remo_send 校验 net_send 返回值(原丢弃)——短写/失败
|
||||
* 告警,连续 3 次失败阻断推送,新连接/网络重建解除阻断
|
||||
* (MCU 单连接模型不得 net_close 数据 fd,会连监听一起毁掉)
|
||||
* 2026-10-10 王建锋 I-1 门控 + I-2 兜底(销项 N-10):accept/recv
|
||||
* 2026-10-10 王建锋 判活门控 + 兜底收帧:accept/recv
|
||||
* 前先用 net_can_accept()/net_can_read()(纯 RAM 读控制块)判
|
||||
* "有没有活",无活直接返回——台架常态(无客户端)从每 10 ms
|
||||
* 一次 RPC(100 msg/s,与 FTP 抢深度 8 的队列)降到 0 次。
|
||||
@@ -23,7 +23,7 @@
|
||||
* "RX 非空但 readable=0",故每 32 轮无条件 recv 一次(≈320 ms);
|
||||
* 门控放行时若监听控制块已消失则置 g_listen=-1 触发重建,
|
||||
* 避免"门控把端口永久不再接受新客户端"这一新卡死路径
|
||||
* 2026-10-12 王建锋 N-32(B10 根治 P1,设计文档 §2.3 不变量 II):accept 门控
|
||||
* 2026-10-12 王建锋 监听生命周期 P1(B10 根治,设计文档 §2.3 不变量 II):accept 门控
|
||||
* 由 net_can_accept()(只认 ESTABLISHED)改判
|
||||
* net_listener_armed()(LISTENING 或 CLOSED+auto_relisten)——
|
||||
* 旧门控在断连待重建窗口恒 0,:7003 永不进 net_accept,
|
||||
@@ -35,7 +35,7 @@
|
||||
* (accept / recv_nb / send / close / 重建三件套)返回点
|
||||
* 调用——风暴期单轮多往返串成 UI 心跳缺口(实测 bit4
|
||||
* 8 连击、uisn=154ms 仍在段内样本),往返本身不动
|
||||
* (语义不变,上界收口 = 登记簿 E-27/E-28 批 3),心跳
|
||||
* (语义不变,上界收口为登记簿批 3 事项),心跳
|
||||
* 在往返边界续命。钩子未注册 = 零行为变化(模拟器/黄金
|
||||
* 回归不注册)。判读与设计口径见
|
||||
* docs/UI设计/UI_设计架构.md §5.8
|
||||
@@ -51,7 +51,7 @@
|
||||
#include "test_config.h" /* TEST_LATENCY_PROBE(链路时延探针编译开关) */
|
||||
#include "net_latency_test.h" /* M3 探针:prod_cycle_mcu(LCDMEM 处理净成本) */
|
||||
|
||||
/* E-04(2026-10-02):发送短写/失败告警(MCU=控制台日志,模拟器=printf 桩) */
|
||||
/* (2026-10-02):发送短写/失败告警(MCU=控制台日志,模拟器=printf 桩) */
|
||||
#define DBG_TAG "[UI_NET_SINK]"
|
||||
#include "dbg_log.h"
|
||||
|
||||
@@ -77,11 +77,11 @@ static int g_listen = -1; /* 监听 Socket fd(未启动或已停止时
|
||||
static int g_client = -1; /* 当前客户端 Socket fd(无连接时为 -1) */
|
||||
static uint16_t g_port; /* 监听端口(网络重建 / 断线后重监听用) */
|
||||
static uint32_t g_gen; /* 建立监听时的网络代次号(变化 = 网络已重建) */
|
||||
static uint8_t s_send_fail_run; /* 连续发送失败计数(E-04:0 = 正常) */
|
||||
static uint8_t s_send_fail_run; /* 连续发送失败计数(0 = 正常) */
|
||||
static uint8_t s_sink_blocked; /* 推送阻断标志(1 = 停发帧,等客户端重连解除) */
|
||||
|
||||
/*
|
||||
* 兜底收帧节拍(门控失效保险,2026-10-10 I-2):
|
||||
* 兜底收帧节拍(门控失效保险,2026-10-10):
|
||||
* net_can_read() 的 readable 只由 RECV_OK 中断置位,而 TRAP-NET-17 的
|
||||
* net_reconcile_tick() 三类对账**不含**"芯片 RX 非空但 readable=0" →
|
||||
* 该中断一旦丢失,纯门控会把已到达的数据永久藏住(改前靠每轮 recv 内的
|
||||
@@ -170,7 +170,7 @@ static void put_u32(uint8_t *p, uint32_t v) {
|
||||
* 限定条件:g_tx 空间足够容纳 4+len+1 字节;g_client >= 0(已有连接)
|
||||
* 函数说明:帧格式 [TAG_DEVICE][CMD][LEN_H][LEN_LO][DATA][CRC];CRC 为 payload 异或;
|
||||
* 无连接时直接返回
|
||||
* E-04(2026-10-02):校验 net_send 返回值(原丢弃)——短写 = 客户端收到坏帧
|
||||
* (2026-10-02):校验 net_send 返回值(原丢弃)——短写 = 客户端收到坏帧
|
||||
* (CRC 不符 → 画面卡死黑屏,而设备侧日志全正常);连续 3 次失败 →
|
||||
* 停发:客户端察觉无帧自行重连,芯片侧 DISCONNECT/TIMEOUT 自动重开
|
||||
* 监听重建连接;MCU 单连接模型严禁 net_close 数据 fd(会连监听一起毁)
|
||||
@@ -516,10 +516,10 @@ int ui_net_sink_start(uint16_t port) {
|
||||
* 3. 无客户端时**先门控**(net_listener_armed,纯 RAM 读)再 accept,成功则复位状态机。
|
||||
* 门控判据 = "监听器还在服役"(LISTENING 或 CLOSED+auto_relisten)而非
|
||||
* "本轮必然有连接"——后者会让断连待重建窗口内永不进 net_accept,
|
||||
* 把 CONNECT 事件未收到的补 accept 探测永久挡在门外(N-32)
|
||||
* 把 CONNECT 事件未收到的补 accept 探测永久挡在门外(监听生命周期模块化)
|
||||
* 4. 有客户端时**先门控**(net_can_read)再非阻塞 recv 逐字节喂入状态机;
|
||||
* 门控判为"无数据"时仍每 RM_LIVENESS_DIV 轮无条件收一次(兜底)
|
||||
* 5. 对端关闭/真错误时关闭客户端。**不再自行重建监听**(N-32 不变量 II):
|
||||
* 5. 对端关闭/真错误时关闭客户端。**不再自行重建监听**(监听生命周期不变量 II):
|
||||
* recv 的 EOF/错误分支已触发 net 层 auto_relisten,另有对账④兜底;
|
||||
* 仅 g_listen 的 fd 真消失(net_get_sock 返 NULL)才置 -1 交回 2 重启
|
||||
* ⚠ **门控只消除"无谓的往返",不消除"往返本身无上界"**:一旦真有活要干
|
||||
@@ -543,7 +543,7 @@ void ui_net_sink_poll(void) {
|
||||
sink_beat(); /* F3:重建前的一对 close 往返结束 */
|
||||
g_client = -1;
|
||||
rm_parser_reset();
|
||||
s_send_fail_run = 0U; /* 网络重建:失败累计清零、解除推送阻断(E-04) */
|
||||
s_send_fail_run = 0U; /* 网络重建:失败累计清零、解除推送阻断 */
|
||||
s_sink_blocked = 0U;
|
||||
s_liveness_ctr = 0U; /* 网络重建:兜底节拍重新起算 */
|
||||
(void)ui_net_sink_start(g_port);
|
||||
@@ -556,7 +556,7 @@ void ui_net_sink_poll(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* 无客户端时尝试接受连接(N-32 P1 不变量 II:门控从 net_can_accept〔只认
|
||||
/* 无客户端时尝试接受连接(监听生命周期 P1 不变量 II:门控从 net_can_accept〔只认
|
||||
* ESTABLISHED〕换成 net_listener_armed〔LISTENING 或 CLOSED+auto_relisten〕)
|
||||
* 原因:MCU 单连接模型下断连后 fd 会停在 CLOSED 等 relisten,旧门控在该窗口
|
||||
* 内恒 0 → :7003 永不进 net_accept → net_lost_connect_probe 对该端口等于
|
||||
@@ -577,14 +577,14 @@ void ui_net_sink_poll(void) {
|
||||
if (c >= 0) {
|
||||
g_client = c;
|
||||
rm_parser_reset();
|
||||
s_send_fail_run = 0U; /* 新连接:失败累计清零、解除推送阻断(E-04) */
|
||||
s_send_fail_run = 0U; /* 新连接:失败累计清零、解除推送阻断 */
|
||||
s_sink_blocked = 0U;
|
||||
s_liveness_ctr = 0U; /* 新连接:兜底节拍重新起算 */
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* 有客户端时非阻塞收帧(I-1 门控 + I-2 兜底;DONTWAIT 已转正
|
||||
/* 有客户端时非阻塞收帧(判活门控 + 兜底节拍;DONTWAIT 已转正
|
||||
* 为具名 API net_recv_nb——uiTask 在 IWDG required_mask 内且有 10ms UI 推流
|
||||
* 周期职责,禁止无限阻塞 recv,非阻塞轮询是义务):
|
||||
* 无数据可读 → 多数轮次直接返回,省掉一次 recv 往返(该往返内部
|
||||
@@ -612,7 +612,7 @@ void ui_net_sink_poll(void) {
|
||||
}
|
||||
g_client = -1;
|
||||
rm_parser_reset();
|
||||
/* N-32(P1 不变量 II):重建**不再**由本处自行 bind_listen。
|
||||
/* 监听生命周期 P1 不变量 II:重建**不再**由本处自行 bind_listen。
|
||||
* ① net_recv_locked 的 EOF 分支已触发 auto_relisten(D10 非阻塞重试);
|
||||
* ② 对账④还会兜底补一次 relisten(TRAP-NET-17 实证事件面不是可靠唯一信源——
|
||||
* E14 复核:非芯片丢事件——两层不可互替)。
|
||||
@@ -625,7 +625,7 @@ void ui_net_sink_poll(void) {
|
||||
} else {
|
||||
/* n < 0:区分"暂无数据"(继续等待)与"真错误"(断开并视情况重建监听) */
|
||||
if (net_get_errno() != NET_ERR_WOULDBLOCK) {
|
||||
/* N-32(P1):加 `g_client != g_listen` 护栏,与上面 n==0 分支
|
||||
/* 监听生命周期 P1:加 `g_client != g_listen` 护栏,与上面 n==0 分支
|
||||
* 的 :552 一致——MCU 单连接模型下 g_client 可能就是 g_listen 本身,
|
||||
* 无护栏的 net_close 会直接关掉监听 fd(:563,与 :134 注释"严禁"
|
||||
* 自相矛盾),端口随 TRAP-NET-09 沉降窗短死。PC 模拟器多连接后端下
|
||||
@@ -636,7 +636,7 @@ void ui_net_sink_poll(void) {
|
||||
sink_beat(); /* F3:EOF/错误路径的 close 往返结束 */
|
||||
g_client = -1;
|
||||
rm_parser_reset();
|
||||
/* N-32(P1 不变量 II):同 EOF 分支——不再自行 bind_listen,
|
||||
/* 监听生命周期 P1 不变量 II:同 EOF 分支——不再自行 bind_listen,
|
||||
* 重建交回 net 层(recv 的错误分支同样会走 relisten)。仅 fd 真消失
|
||||
* 时置 -1 交回主循环走 start */
|
||||
if (net_get_sock(g_listen) == NULL) {
|
||||
|
||||
@@ -71,7 +71,7 @@ void ui_net_sink_poll(void);
|
||||
* 重建三件套)返回处调用钩子。动因:netTask 重建风暴期,单轮内多个
|
||||
* 往返串行排队,把宿主(uiTask,IWDG 必需位)的心跳间隔拖过 800ms
|
||||
* (2026-10-25 台架实测 bit4 单任务 8 连击窗、uisn=154ms 仍在段内);
|
||||
* 往返时长本身不改(上界收口 = 登记簿 E-27/E-28,批 3),但心跳在每个
|
||||
* 往返时长本身不改(上界收口为登记簿批 3 事项),但心跳在每个
|
||||
* 往返边界续命——单任务停摆判据(按位连击,docs/子系统设计/看门狗设计说明.md
|
||||
* §5.3)只应
|
||||
* 抓真挂死,不该抓「多个都回来了但各自偏慢的往返之和」。
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* 创建日期:2026-09-14
|
||||
* 修改记录:
|
||||
* v1.0 2026-09-14 王建锋 创建初始版本(设计见 docs/子系统设计/运行与自检记录设计说明.md §5.3)
|
||||
* v1.1 2026-10-20 王建锋 改用 ui_w_records 共享组件(W6 U2:合并两页重复实现)
|
||||
* v1.1 2026-10-20 王建锋 改用 ui_w_records 共享组件(W6:合并两页重复实现)
|
||||
* v1.2 2026-10-25 王建锋 记录 reader 注入(道B task-6):不再 include sys_log.h,
|
||||
* 数据经组件内注入的 ui_rec_reader_t 取;日志 ID 换
|
||||
* 不透明编号 UI_W_REC_LOG_RUN(映射在两端绑定处)
|
||||
@@ -37,7 +37,7 @@
|
||||
* 返回值:总行数 uint16_t
|
||||
*/
|
||||
/*
|
||||
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 U2)。
|
||||
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6)。
|
||||
* 实例 s_rec 携带日志 ID 与**本实例自己的**读盘缓存——两页共用组件代码,
|
||||
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行。
|
||||
*/
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* 创建日期:2026-09-14
|
||||
* 修改记录:
|
||||
* v1.0 2026-09-14 王建锋 创建初始版本(设计见 docs/子系统设计/运行与自检记录设计说明.md §5.4)
|
||||
* v1.1 2026-10-20 王建锋 改用 ui_w_records 共享组件(W6 U2:合并两页重复实现)
|
||||
* v1.1 2026-10-20 王建锋 改用 ui_w_records 共享组件(W6:合并两页重复实现)
|
||||
* v1.2 2026-10-25 王建锋 记录 reader 注入(道B task-6):不再 include sys_log.h,
|
||||
* 数据经组件内注入的 ui_rec_reader_t 取;日志 ID 换
|
||||
* 不透明编号 UI_W_REC_LOG_SELFTEST(映射在两端绑定处)
|
||||
@@ -37,7 +37,7 @@
|
||||
* 返回值:总行数 uint16_t
|
||||
*/
|
||||
/*
|
||||
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 U2)。
|
||||
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6)。
|
||||
* 实例 s_rec 携带日志 ID 与**本实例自己的**读盘缓存——两页共用组件代码,
|
||||
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行。
|
||||
*/
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-15
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-15 王建锋 创建初始版本(U3:原三处逐字相同的定义合并到此单一来源)
|
||||
* v1.0 2026-10-15 王建锋 创建初始版本(原三处逐字相同的定义合并到此单一来源)
|
||||
*/
|
||||
|
||||
/* 头文件包含区 */
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-15
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-15 王建锋 创建初始版本(U3:合并三处逐字重复的 flat 常量样式定义)
|
||||
* v1.0 2026-10-15 王建锋 创建初始版本(合并三处逐字重复的 flat 常量样式定义)
|
||||
*/
|
||||
#ifndef UI_STYLE_H
|
||||
#define UI_STYLE_H
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-15
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-15 王建锋 创建初始版本(U1:收编散落各 UI 文件的布局/颜色/缓冲魔数,
|
||||
* v1.0 2026-10-15 王建锋 创建初始版本(收编散落各 UI 文件的布局/颜色/缓冲魔数,
|
||||
* 纯替换、零行为变化;像素与替换前逐位一致)
|
||||
*/
|
||||
#ifndef UI_TOKENS_H
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-20
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-20 王建锋 创建(W6 U2)
|
||||
* v1.0 2026-10-20 王建锋 创建(W6)
|
||||
* v2.0 2026-10-25 王建锋 reader 注入(道B task-6):syslog_count/syslog_get_record
|
||||
* 直调改为 s_reader 函数表调用;未注入按空态渲染
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-20
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-20 王建锋 创建(W6 U2:合并 ui_page_runlog / ui_page_selftest 的重复实现)
|
||||
* v1.0 2026-10-20 王建锋 创建(W6:合并 ui_page_runlog / ui_page_selftest 的重复实现)
|
||||
* v2.0 2026-10-25 王建锋 记录 reader 注入(道B task-6):删 #include "sys_log.h",
|
||||
* 改 ui_rec_reader_t 函数表 + ui_w_records_bind();
|
||||
* log_id 换不透明编号(UI_W_REC_LOG_*);缓冲容量宏本地化
|
||||
|
||||
Reference in New Issue
Block a user