wandering1
|
e0b02d397c
|
修复 P2 全部 10 项:错误传播/竞态/门控/文档失真
待办池 docs/待处理内容.md §3.2 的 10 个 P2 全部闭环;逐项落代码 + 注释说明。
P2-1 cfg_file: 受管键行超 CFG_LINE_TEST_MAX 拒绝保存(防重复键行)
P2-2 ch395f: DMA 失败传播状态 + 锁存通道故障 + 读不拷不可信数据
P2-7 net_select: LISTENING 不再恒判可读(消除 select 忙轮询地雷)
P2-8 time_sync: 核实 L3 pending 改写已闭环(net_recv_to 分片 + 总预算)
P2-9 sys_log: 挂载改幂等 + 卷锁,defaultTask 2s 重试建 /log
P2-10 sys_log: s_read_raw 纳入卷锁 try(读者/写者 unlink 互斥)
P2-11 net_task: RECONFIG 改 osEventFlagsWait 原子取走 + 清除
P2-12 app_cfg: APP_*_ENABLE 如实标注为未接线占位,删“开关”说法
P2-13 freertos: 产品构建 vTaskDelete(testTask) 回收 8KB CCM 栈
P2-15 download.bat: 先删旧日志 + 增“未产出日志”判定
P2-13 用 USER CODE 区回收而非生成区 #if 门控:生成区改动会被 CubeMX
重生成覆盖,本方案重生成不丢。P2-12 因产品定义 B0 未定、APP_NET_ENABLE
无单一接线点,按修复建议备选(删“开关”说法)处理。
验证:@build 0 错 0 警;主机单测 watchdog 39/39 + sys_clock 100/100 +
cfg_file 149/149(新增 TC-CFG-044);pre-commit --all-files 17/17。
|
2026-10-04 08:30:30 +08:00 |
|
wandering1
|
3cc08f5d53
|
实机测试规划改造为执行判据说明:删除一次性台架窗口状态(§0.5取证记录)与规划框架,A1~A4代码状态按代码核对改写,16处外部引用重指向模块文档
|
2026-10-02 23:46:27 +08:00 |
|
wandering1
|
930215f81a
|
修复IWDG超时未配置与dhara resume回滚:看门狗误复位与复位后写入全部丢失,台架全量自检PASS
|
2026-10-02 20:48:30 +08:00 |
|
wandering1
|
8a18e388c7
|
四个 Fault 全部采集现场:MemManage/BusFault/UsageFault 由空死循环升级
原状:HardFault 已有崩溃采集,但 MemManage / BusFault / UsageFault 仍是空
while(1) —— 这三类故障发生时日志完全静默,且因 SHCSR 默认未使能,实际会
被升级成 HardFault,报告出笼统的 "HARDFAULT"、看不出根因。
改动:
- Src/stm32f4xx_it.c:三个 Handler 升级为手工 __asm 版(取 MSP/PSP 帧指针)
-> B 到 per-fault C 入口 fault_entry_{mem,bus,usage} -> hard_fault_report()。
hard_fault_report 增加 tag 参数,日志统一为
"[ERR] <TAG> PC=.. LR=.. xPSR=.. R0-R3=.. CFSR=.. HFSR=..[/BFAR][/MMFAR]"。
生成实体经 #define X X_Gen 改名保留,链接器各移除 2 字节(.map 已验)。
三个各带独立锚点 MEMFAULT/BUSFAULT/USAGEFAULT-ANCHOR。
- 新增 fault_handler_enable()(USER CODE BEGIN 1 区):使能 SHCSR 的
MEMFAULTENA/BUSFAULTENA/USGFAULTENA。声明入 Inc/stm32f4xx_it.h,调用在
app_main_init() 第一行(纯寄存器写,不依赖日志/时钟)。
- 刻意不启用 CCR.UNALIGN_TRP / CCR.DIV_0_TRP:会把普通 bug 升级成死机,
对本项目弊大于利(说明写进函数注释)。
实现约束(本轮踩坑):ARMCC 的 __asm 块取不到 C 的数据符号(ADR r1, xxx_tag
报 A1516E: Bad symbol,去 static 也无效),也无法给 C 函数传字符串参数,
故故障名必须由 C 侧 per-fault 入口带上。
配套:
- check_cubemx_survival.py:新增 fault-handlers-3 / fault-handler-enable 两项,
UNPROTECTED_LEGACY 清掉三个 Fault(WARN 2->1),清单 16 -> 18 项。
- AGENTS.md:新增"4 个 Fault 全部采集"条目;ARMCC 汇编条目补 A1516E 第 3 坑;
校验标记补 [ERR](四个 Fault 日志都以它开头 -> 一律判 FAIL,刻意)。
- 看门狗设计说明.md:§6.1 补 4 条 Fault 标记与 @test 禁项关系;
§10.2 L3 清单与四个 Fault 采集小节;§11 结论表与变更记录。
- 待处理内容.md:新增 N-03d(已完成),N-03c 补第二次重生成结论。
验证:@build 0 错误 0 警告(Flash +156 B,RAM 无变化);pre-commit 13 钩子
全通过;审计 18 通过 / 1 警告 / 0 失败。
|
2026-09-29 09:16:19 +08:00 |
|
wandering1
|
67d26ac37a
|
修正 CubeMX 重生成防丢失机制:审计脚本实测有效,恢复 5 处被覆盖定制
第二次重生成验证了审计机制,并证伪了上一轮的一处假设:
- 审计脚本 check_cubemx_survival.py 准确检出全部 5 处覆盖(16 项中 5 FAIL),
机制有效;Src/main.c 复位原因锁存(USER CODE BEGIN Init 区)完好,
是"USER CODE 区有效"的正向证据。
- 关键发现:CubeMX 本次换了一代中断函数模板(旧 HardFault_Handler /
HardFault_Report 自造区 → 新函数体内 HardFault_IRQn 0 / W1_HardFault_IRQn 0),
"生成区之外的自造标记区"同样不被保留,旧假设被证伪。
恢复方案(第二次升级):
- stm32f4xx_it.c:报告实现迁入 USER CODE BEGIN 0(区名从未变过的标准保护位);
Handler 本体改为生成区整函数替换,用 #define HardFault_Handler
HardFault_Handler_Gen 把生成实体改名保留,链接器自动移除(.map 实证
Removing ... (2 bytes)),向量表指向手工 __asm 版(0x080001a1,18 字节)。
- iwdg.c:去掉 HAL_IWDG_Init() 调用,补 IWDG-DEFER-START-ANCHOR 锚点注释。
- FreeRTOSConfig.h:恢复 FREE_RTOS_CONFIG_HARDENING 块(两个加固宏)。
- freertos.c:补回两处任务栈中文注释(栈值未丢,.ioc 已同步)。
配套:
- check_cubemx_survival.py:hardfault-handler 改 wholefile + 锚点检查;
UNPROTECTED_LEGACY 清单更新。
- AGENTS.md:新增"CubeMX 换模板"与"ARMCC 内联汇编语法"两条铁律,
以及"uvprojx 被 Keil 自动改写不入库"条目。
- 看门狗设计说明.md:§10.1 补第二次重生成验证结论与模板换代发现,
§10.2 L2/L3 全面改写(自造区名不可依赖)。
验证:@build 0 错误 0 警告;pre-commit 13 钩子全通过;审计 16 通过 / 2 警告 / 0 失败。
|
2026-09-29 07:52:39 +08:00 |
|
wandering1
|
7feeea6c56
|
实现独立看门狗:CubeMX 配置 IWDG + 任务心跳位图,恢复三处被覆盖定制
经 CubeMX 图形界面启用 IWDG(Prescaler=64 / Reload=1249,标称 2498ms /
最坏 1701ms),并落地心跳位图判定、各任务埋点、RCC_CSR 复位原因上报与
configASSERT 改造。重生成覆盖的既有定制已全部恢复。
P0(开机死循环):HAL_IWDG_Init() 内部立即启动看门狗,而 CubeMX 把
MX_IWDG_Init() 插在 app_main_init() 之前——该段 NAND/RTC/ADC 初始化耗时
数秒无喂狗点,按 2.5s 超时必然复位。改 Src/iwdg.c 为只填参数不启动,
启动移交 task_wd_start(),由 defaultTask 在存储 bring-up 完成后调用。
恢复的三处定制(重生成覆盖):
- Src/stm32f4xx_it.c:HardFault_Handler 崩溃现场采集被打回空 while(1)
- Inc/FreeRTOSConfig.h:栈溢出检测与堆失败钩子两个宏被整块删除
- Src/freertos.c:三处任务栈实测记录中文注释丢失(数值未丢)
新增:
- App/util/task_watchdog.{c,h}:心跳位图 + 抽样判定 + IWDG 延后启动
- time_sync.c 长等待切片:net_recv_to 单次可睡满 30s 预算,切成 200ms 片
- Src/main.c 复位原因锁存(读后即清 RMVF,防残留误判)
埋点:defaultTask(唯一喂狗者)/ netTask(含 PHY 等待循环)/ uiTask /
timeSyncTask。ftpTask 首期剔除掩码,待二期改 lftpd。
门禁:build 0 错误 0 警告;pre-commit 10 钩子全通过;Flash +2956B / RAM +40B。
|
2026-09-29 07:22:04 +08:00 |
|
wandering1
|
22559365b9
|
整理 App 与 test 目录:按职责分子目录并同步全库引用
|
2026-09-26 12:52:39 +08:00 |
|
wandering1
|
39bd06adea
|
为自建代码目录补齐 README,建立目录级导航体系
- 新增 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 目录结构加入说明
|
2026-09-26 12:25:36 +08:00 |
|
wandering1
|
d0cbeb6b5b
|
控制台日志实现迁出HAL生成文件至App/log并新增设计说明;defaultTask任务体迁至App/task,freertos.c恢复纯CubeMX接线形态
|
2026-09-25 01:32:09 +08:00 |
|
wandering1
|
e7d6318250
|
控制台写者循环节奏500ms改50ms:日志时延收紧到50ms内,LED心跳与配置2s轮询改tick基准保持等效
|
2026-09-24 23:54:48 +08:00 |
|
wandering1
|
3763e699dc
|
控制台改单写者发送:defaultTask唯一发串口其余任务写环形缓冲,杜绝日志交错与脏指针入UART;溢出钩子加指针窗口校验、崩溃上报改显式长度
|
2026-09-24 23:47:23 +08:00 |
|
wandering1
|
1d2a53bbc9
|
E-31修复:dhara resume失败按错误分类(仅真空白判新卷),mount失败自检上报+主循环有界重试
|
2026-09-21 18:38:23 +08:00 |
|
wandering1
|
bbdd059e25
|
修复就绪屏障位被消费致FTP永不监听;新增栈可观测(水位探针+静态调用图报告)并补FTP实测
|
2026-09-21 04:26:52 +08:00 |
|
wandering1
|
2ef1e1f0dd
|
同步CubeMX 6.18重生成的HAL/CMSIS/FreeRTOS vendor与工程配置(.ioc/.uvprojx/.mxproject及生成Src/Inc)基线
|
2026-09-21 01:26:09 +08:00 |
|
wandering1
|
a7d4339e6f
|
CCM扩容FreeRTOS堆+DMA阈值1024防栈缓冲进CCM+HardFault现场报告与栈/内存钩子+修defaultTask栈溢出+LVGL绘制缓冲护栏+存储套件05/06与恢复模式
|
2026-09-21 00:47:58 +08:00 |
|
wandering1
|
d77747ec43
|
移除FTL全部临时诊断代码(raw持久性测试/bind dump/proglog/探针窗口/指纹/扫描)保留硬化项
|
2026-09-20 13:31:15 +08:00 |
|
wandering1
|
6084af8fe6
|
修复无限重格式化真根因:探针名.fschk在FF_USE_LFN=0下恒返FR_INVALID_NAME且误入重格式化集合
|
2026-09-20 13:03:47 +08:00 |
|
wandering1
|
32283de45b
|
mkfs全程erase/prog逐条追踪窗口(proglog/eraselog):定位绑定页内容被改写的元凶
|
2026-09-20 11:20:46 +08:00 |
|
wandering1
|
66fc48cd98
|
新增map绑定转储诊断(dhara_map_find+裸读绑定页):跨boot对比定界树分歧与数据丢失
|
2026-09-20 10:48:47 +08:00 |
|
wandering1
|
93a789f87b
|
重格式化前清空FTL map树(nand_ftl_format):根治新旧树混合致复位后FAT探针失败的重格式化死循环
|
2026-09-20 05:36:10 +08:00 |
|
wandering1
|
f05b056318
|
FTL诊断:探针窗口前移至f_mount前+页内容指纹(定位挂载期坏读来源)
|
2026-09-20 05:16:27 +08:00 |
|
wandering1
|
0669471178
|
FTL诊断:L0探针窗口绑定路径日志(FAT读LPN→物理页+写目标)+重格式化行带fr码
|
2026-09-20 05:12:08 +08:00 |
|
wandering1
|
7a72aea4e5
|
FTL复位丢失修复:journal epoch 锚定最新 checkpoint(根治重格式化循环)+ checkpoint 诊断
|
2026-09-20 04:07:59 +08:00 |
|
wandering1
|
abaa801d86
|
/log 写失败修复:打开模式补 FA_WRITE 位 + 卷探针两击确认 + 自动重格式化自愈 + 错误去重
|
2026-09-20 03:46:14 +08:00 |
|
wandering1
|
6f51c62a9e
|
串口输出禁中文:syslog 中文描述改 ASCII(MCU 6 处 + 模拟器 6 处)
|
2026-09-20 02:45:27 +08:00 |
|
wandering1
|
309c92793a
|
CubeMX 6.18.1 重生成:V0.1 板引脚配置(RS485=UART4/DE=PA15,LED1=PC5、LED2=PB0)
|
2026-09-20 01:35:49 +08:00 |
|
wandering1
|
65b8fb05d5
|
回退 V2 引脚补丁:v2-on-ui 沿用 v2 硬件引脚(LED2=PB0 驱动致板级电源/复位跌落,开机死亡)
|
2026-09-19 20:32:26 +08:00 |
|
wandering1
|
deb4385a06
|
feat(bsp): V2 CPU 板引脚调整(LED1 PC4->PC5, LED2 PC5->PB0)
- LED1: PC4 -> PC5,Pull PULLUP->NOPULL,Speed HIGH->LOW
- LED2: PC5 -> PB0(新增输出),同上
- CH395F SPI2 仅标签口径互换:PB14=CH395F_SDI、PB15=CH395F_SDO;
电气 AF 映射未变(PB14=SPI2_MISO 上拉,PB15=SPI2_MOSI);删除宏 CH395F_SDOB15_Pin(已确认全工程无引用)
- 来源:CubeMX 6.18.1 依 CPU-V0.2 原理图调整并重新生成
- 本提交是可搬运的“引脚补丁”,后续 cherry-pick 到 ui-research 基座
|
2026-09-19 10:17:32 +08:00 |
|
wandering1
|
1817fe792f
|
就绪屏障与配置引擎重构,新增串口助手、V0.0网表分析报告及芯片手册,同步更新文档
|
2026-09-15 21:13:20 +08:00 |
|
wandering1
|
9eb1bd63b4
|
运行/自检记录与待机屏:sys_log定长64B日志引擎(/log/*.log,FTP可直下)+记录页x2+待机屏+密码错误提示;字体122字/217字形
|
2026-09-14 19:05:00 +08:00 |
|
wandering1
|
7f0087d430
|
新增S10~S19代码规范检查并统一time_sync_task命名
check_coding_standard.py 新增 9 条机械检查(S14 并入 S6):
- S10 (3.3.1) 函数名全小写(HAL_ 厂商回调豁免)
- S11 (2.3.5) 禁止相对/绝对路径 include
- S12 (7.6) 禁止可变参数函数
- S13 (7.7) 禁止递归函数
- S15 (6.1.4) 文件作用域指针须初始化为 NULL
- S16 (3.2.2) 非 static 全局变量须 g_ 前缀
- S17 (2.2) 非 static 函数须在配对头文件声明
- S18 (6.3.1) 禁止 Yoda 条件(常量在右)
- S19 (4.4.2) 函数定义左大括号与右括号同行
S6 词表扩充 scanf/strtok
timeSyncTask 重命名为 time_sync_task(3 处代码引用)
更新 pre-commit 使用说明规则表
|
2026-09-01 17:38:43 +08:00 |
|
wandering1
|
ae8b1aead5
|
清理全库行尾空格与文件尾换行(pre-commit 自动修复基线)
|
2026-09-01 10:24:50 +08:00 |
|
wandering1
|
2d2774124e
|
正常运行了
|
2026-08-31 15:11:18 +08:00 |
|
wandering1
|
71c41fabb9
|
开启了192k 所有RAM
|
2026-08-30 15:38:40 +08:00 |
|
wandering1
|
e2f199c6bf
|
LVGL 库提交
|
2026-08-30 08:57:07 +08:00 |
|
wandering1
|
26c9098630
|
启动顺序管理
|
2026-08-29 11:10:08 +08:00 |
|
wandering1
|
7bc616cf9b
|
整理了main 函数
|
2026-08-29 09:45:54 +08:00 |
|
wandering1
|
ad154b2f7e
|
时间同步已经完成
|
2026-08-28 16:42:44 +08:00 |
|
wandering1
|
b43dede98d
|
FTP 测试通过
|
2026-08-28 12:22:10 +08:00 |
|
wandering1
|
65f1d72ca3
|
存储测试通过
|
2026-08-27 18:22:44 +08:00 |
|
wandering1
|
572313d430
|
CH395F 硬件测试完毕
|
2026-08-24 16:16:18 +08:00 |
|
wandering1
|
c2fb2d9359
|
构建测试
|
2026-08-22 19:53:24 +08:00 |
|
wandering1
|
6113b3252b
|
成功启动
|
2026-07-21 22:24:47 +08:00 |
|
wandering1
|
02963441b5
|
初始创建FTP服务器
|
2026-07-21 22:08:11 +08:00 |
|
wandering1
|
e1aeb9b3d5
|
删除FlashDB
|
2026-07-21 21:48:23 +08:00 |
|
wandering1
|
8ab9d18c3b
|
解决一个擦除的bug
|
2026-07-21 20:18:28 +08:00 |
|
wandering1
|
fd13ad0e06
|
修改网络的初始化,异步支持问题
|
2026-07-21 01:22:09 +08:00 |
|
wandering1
|
01ad5e476f
|
增加文件系统
|
2026-07-21 00:30:59 +08:00 |
|
wandering1
|
e862009bcd
|
修复多连接的问题
|
2026-07-19 15:27:49 +08:00 |
|
wandering1
|
a08d26bcb0
|
freeRTOS支持
|
2026-07-19 13:09:06 +08:00 |
|