Skip to content

v4.0.11.9 — NVS 0 noise + TWDT/stack 7 fix + TRUE 拼接 + 8MB 救砖

Choose a tag to compare

@xiangwhy xiangwhy released this 19 Jun 05:55

修复 (v4.0.6 → v4.0.11.9 五批 5 commit)

v4.0.6 — NVS / Web / Dashboard P0 批次 (commit 865402c)

  • NVS 找不到值 4 个 bug 批次:loadConfig 静默失败、AP 模式 dashboard 裸奔、按钮事件丢失、1970 时间戳
  • NTP 真实时间:接 esp_netif_sntp_init + ntp.aliyun.com,时区 CST-8,/api/status 新增 deviceTimeMs / timeSynced
  • 恢复出厂:/api/factorynvs_flash_erase() + restart 进 AP 模式
  • /send 历史清空 + WiFi 扫描下拉

v4.0.8 — PDU 解码 5 修 + 8MB 救砖 + 凭据硬编 (commit a14bf3b)

  • 8MB 救砖:board_upload.flash_size=8MB + 双 OTA partitions,efuse 实测 8MB 但老 config 当 4MB → bootloader 校验越界 boot loop
  • 凭据硬编占位符:YOUR_WIFI_SSID / YOUR_WIFI_PASS / YOUR_PUSHPLUS_TOKEN,首次烧必须 web 配网
  • PDU 解码 5 修:UCS-2 高半区 surrogate-pair 边界、7-bit UDL padding、phone 短号短长度 bug、SCA 长度越界、TP-DCS 0xC0/0xF8 表格
  • C++ host test 大扩:607 行新测试用例,绑定生产 pdu_codec.cpp 跑 (v3.6 Python 模拟弃用)

v4.0.9 — concat pdu_udh_offset 真定位 UDH 头 + nvsSentList 性能 (commit 3bc2798)

  • pdu_udh_offset 搜索范围 从 0 → UDH 起点,SCA 含 '0804'/'0003' 不再误识别为 concat IE
  • nvsSentList 性能:isKey("s0") 早返空 history(本批 v4.0.11.9 完整闭环)

v4.0.11.2 — TRUE 拼接 5 P0 批次 (commit 42c0a8a)

  • 字母数字 sender("True App") 长短信拼接:UDH 头 6 字节 IE 正确解析 (ref/total/seq),UDH 范围限定不再覆盖 SCA
  • TRUE 拼接边界 bug:中间 seq 缺失时不再误拼接
  • host test 增 148 行 覆盖 UDH 边界用例

v4.0.11.9 — NVS noise 0 + TWDT/stack 7 fix 批次 (commit d71debc)

  • TWDT 踢 cmgs_worker + net_task (v4.0.11.3):10-30s 长阻塞,5s TWDT 会触发 esp_restart;在 setup() 创完 task 后统一踢出 (task 体内 delete 报 "task not found")
  • nvsQNoteErr pcTaskGetName trace (v4.0.11.5):5s 节流日志加 task 名,定位刷屏源
  • nvsQSanityCheck lazy create pqueue (v4.0.11.6):工厂清 NVS 后 namespace 不存在 → readwrite 写 head=0 count=0,5s readonly begin 不再刷 NOT_FOUND
  • csq_poll stack 2048→4096 (v4.0.11.7):boot 35s 实测 overflow,4096 同 usb_rx
  • nvsEnsureNamespace 复用 (v4.0.11.8):lazy create cfg + sent namespace,防 loadConfig + nvsSentList 刷 NOT_FOUND
  • nvsSentList isKey("s0") 早返 (v4.0.11.9):isKey 走 nvs_get_str 不 log_e vs getString ESP_LOGE,空 history 不再 32 sX NOT_FOUND 刷屏

修复效果 (v4.0.11.9 实测)

  • ✅ 60s-once 32 sX NOT_FOUND noise: 从每次 32 行 → 0 行
  • ✅ 5s steady-state pqueue NOT_FOUND: 0 行
  • ✅ csq_poll boot 35s stack overflow: 修
  • ✅ TWDT 5s esp_restart: 修

未修 (后续批次)

  • 4 P0 (code-review-p0-pre-flash):
    • UAF on cmgs_send_pdu_async timeout
    • check_dashboard_auth 永久 true (6 个 POST 端点裸奔)
    • smsRateLimitOk 死代码 (return true + if (false && !...) 短路)
    • handleApiCfgPost 无输入验证 (空 SSID / token<16 / otaPass<4 都收)
  • 1 P1 PLAUSIBLE: pdu_udh_offset 搜索区域未限定 (本 v4.0.9 部分修, 待二次复查)
  • 1 死代码: g_cmgsJobSem 未初始化声明

验证

  • C++ host test: 86/86 pass(tests/host/,绑定 pdu_codec.cpp 生产代码)
  • 实机 v4.0.11.9 (boot #73): 60s NVS noise = 0,OTA 3.6s 烧完,板子稳定运行 4.6 min+

重要:首次使用请 web 配网

固件默认 WiFi/token 改为占位符 YOUR_WIFI_SSID / YOUR_WIFI_PASS / YOUR_PUSHPLUS_TOKEN,首次烧录后必须走 AP 配网页面(SMS-Forwarder-XXXXXX,密码 12345678,192.168.4.1)填写真实凭据。

如 NVS 已有配置(OTA 升级场景),配置直接保留,无需重新配网。

资产

文件 SHA-256 大小
v4.0.11.9.factory.bin 0d6a1a5323c310c10664388eba2918d1e192ab85bf082c488f9707f5146fadf5 1,280,576 bytes

构建来源

  • Commit: d71debc6ea9ed3de1f62e28fa584babc510e0ddd
  • 平台: pioarduino 55.03.39 (IDF 5.5 + Arduino-ESP32 3.x)
  • Flash: 1,280,576 bytes (38% of 3.3MB app partition, 8MB dual-OTA)