P0功能已实现,按键、LED、过零检测、配网、OTA都已正常实现
This commit is contained in:
+20
-2
@@ -7,13 +7,15 @@
|
||||
| 工程 | `电子开关-加热垫_soc_JieLi-JL7016` |
|
||||
| 产品码 | ProdtCode=`CBR1`,productCode=`PRCBR1` |
|
||||
| 协议 | 见宝 SOC 55AA,V1.0.0 |
|
||||
| 文档版本 | V1.0.0 |
|
||||
| 文档版本 | V1.0.1 |
|
||||
| 日期 | 2026.09.04 |
|
||||
| 作者 | cyWu |
|
||||
| 读者 | WorkBuddy / 固件开发 |
|
||||
| 参考工程 | `D:\Jianbao\Project\产品\爬宠\温湿度风扇\温湿度风扇_soc_JieLi-JL7016`(框架 / 按键分级 / 联动仲裁 / 定时 / 运行记录) |
|
||||
| 灯效参考 | `D:\Jianbao\Project\产品\宠物\门夹弹力绳\门夹弹力绳_soc_JieLi-JL7016`(红绿双通道、OTA 红绿交替) |
|
||||
|
||||
> **V1.0.1(2026-09-04):** 增补第 0.1 节编码约束:模块状态收进一个 `s_xxx` 上下文结构体;注释写「为什么」不写排障史;禁止只写不读的诊断变量。P0 过零/继电器代码已按此整理。
|
||||
>
|
||||
> **V1.0.0(2026-09-04):** 首版共同理解。220V 常电继电器加热垫;过零切继电器;短按开关;开红关绿;5s 配对 / 12s OTA;DP0 加热开关;DP1–5 本版忽略;DP6 由 RO 改为 **WO**(连着时服务器下发当前温度);断连 500ms 重连广播 / 500ms 扫描风扇 `JBao-{缸体号}` 温湿度广播;联动只看温度回差;定时看使能/类型/星期/时分(Byte1 模式忽略);运行记录计实际吸合秒。加热垫本体恒温,闭合后不会过热。
|
||||
|
||||
本文是 **已拍板的共同理解**,不是草稿。实现时以本文为准;DP 表以 `dp_definition.json` + 本文第 10.2 / 11.1 / 13.1 / 15 章为准。
|
||||
@@ -34,6 +36,21 @@
|
||||
10. 编码风格对齐风扇 + 工程师规范:文件小写+下划线,`g_` / `s_` 前缀,枚举 `Pascal_t`,接口 `xxx_init` / `xxx_run` 或 tick / `xxx_get_status`。
|
||||
11. **现有工程是协议骨架。** 没有 `apps/usr_app`、没有 `board_pin.h`。`app_main.c` 里上电强制 `usr_goto_pair=1` **必须删掉**,改为上电进工作态(已配对走重连广播)。
|
||||
12. 调试 UART TX = **PC5**(本机无 AHT20,PC5 空闲)。关掉会与 PA1 / PA7 / PA8 / PB1 / PC3 冲突的 demo 外设。
|
||||
13. **遵守第 0.1 节编码与注释。** 散落 static、把排障过程复制进每个函数、只写不读的计数,一律视为未完成。
|
||||
|
||||
---
|
||||
|
||||
## 0.1 编码与注释(禁止再犯)
|
||||
|
||||
新产品模块(`apps/usr_app/*`、`apps/usr_periph/*`、`usr_jb_main.c`)必须遵守。从风扇/门夹 **原样拷贝** 的 `key.c` / `led.c` 框架不要借机大改。
|
||||
|
||||
1. **一个模块一个上下文。** 两个及以上的模块状态变量必须收进 `XxxCtx_t`,文件内只留 `static XxxCtx_t s_xxx`。ISR 与主循环共享的成员在结构体里标 `volatile`。单个标志可以单独 `static`(如 `app_defer` 的位图)。
|
||||
2. **禁止一排裸 static。** 反例:`s_edge_cb`、`s_edge_cnt`、`s_rise_cnt`、`s_fall_cnt`、`s_last_edge_ms`、`s_last_level`、`s_initialized` 并列。正例:`static BspZcCtx_t s_zc`。
|
||||
3. **不要只写不读的诊断变量。** 需要看沿是否在跑,用已有 getter + 一条日志(`bsp_zc_edge_count`)。不要 `s_rise_cnt` / `s_fall_cnt` 这种从来没人读的计数。
|
||||
4. **文件头三件事:做什么、一两行硬约束、history。** 同一条约束只写一次。禁止把「V1.0.0 空循环漏沿」复制到 `.c` / `.h` / `usr_jb_main.c` / `board_pin.h` / 每个 `@note`。
|
||||
5. **函数注释短。** `@brief` 一行;`@param` / `@return` 按需;`@note` 只写本函数独特约束(例如「FPIN ISR,禁止 printf」)。不要复述代码(`s_zc.edge_cnt++` 旁边不要写「累计沿次数」)。
|
||||
6. **注释解释为什么,不写排障日记。** 「必须等过零再切继电器」是为什么;「我改了三次 ISR 才好」不要进源码。
|
||||
7. **P0 路径不堆死字段。** 没有 getter、没有日志、P2 也没用上的 `zc_ok_cnt` / `last_change_ms` 不要先占着。需要时再加。
|
||||
|
||||
---
|
||||
|
||||
@@ -622,6 +639,7 @@ apps/usr_app/
|
||||
| 生成协议再导回 DP6=RO / LEN=128 | 禁止;以本文 + 当前源码为准 |
|
||||
| `app_main` 上电清配对进绑定 | 必须删 |
|
||||
| 20ms ISR 写 VM / 切 BLE | 禁止(风扇已踩过栈溢出) |
|
||||
| 一排裸 static / 排障史注释 | 禁止。≥2 个状态收进一个 `s_xxx`;单标志可单独 static。详见第 0.1 节 |
|
||||
| 协议 OTA stub 返回 OK 当已升级 | 注释标明未升级 |
|
||||
| 扫描时改 GATT 名 | 不要改 0x2A00;只解析对方 adv |
|
||||
| 门夹 USB 插入直通开机 / 电池逻辑 | 禁止移植 |
|
||||
@@ -638,7 +656,7 @@ apps/usr_app/
|
||||
5. P1:VM 恢复加热、DP1–5 忽略、定时只存。
|
||||
6. P2:`app_th_scan`、`app_linkage`、`app_timer`、`app_runrec`、仲裁用例。
|
||||
|
||||
每一步都保持对应 `BOARD_xxx_ENABLE` 可关。
|
||||
每一步都保持对应 `BOARD_xxx_ENABLE` 可关。提交前对照第 0.1 节:一个模块一个 `s_xxx`,注释写为什么,不要排障日记。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user