fix(104): 拆掉四处恒假的上界判断——合法带只改判下界,口径不变
L0 的 cppcheck 在 --all-files 下恒红四处,全在同一文件: App/protocol/iec104/iec104_comm.c 的 80 / 94 / 107 / 121 行,诊断为 compareValueOutOfTypeRangeError —— 拿 unsigned short 与 65535 比较, Condition is always false。根因是 IEC104_COMM_CA_MAX 与 PORT_MAX 都等于 65535u,而被比较的量是 uint16_t:那个上界判断在类型上就不可能成立。 这四处随上游 iec104_comm 落地进来,本地提交只跑暂存文件所以没人看见, CI 跑 --all-files 就每轮都红(同族盲区:暂存面与全量面不等价)。 处置走「语义不动」那一支(用户裁定 2026-10-27:A):只删恒假的半边、 改判 if (v < MIN),合法带口径一字未改(仍照 iec104_comm.h 的常量注释: ca 1..65535、port 1024..65535),只在第一处写清为何不再写上界、其余三处 短引用。没有把 MAX 改成 65534(按 60870-5-104 的 65535 = 未编址),因为 test/host/iec104/iec104_test.c:1521 明确断言 ca 设成 IEC104_COMM_CA_MAX 必须被接受——那会同时打断这条断言并改变现场设备行为(配 65535 的站会 突然回退工厂默认),属协议决定,不在本次范围;要改请单独裁。 验证:单文件 cppcheck 原样复刻钩子参数 → RC=0;cppcheck --all-files 由 红转绿;iec104-unit-test Passed(即 65535 那条合同照过);@build 0 错误 0 警告(Code 231732→231720,减 12 B,RO/RW/ZI 不变);凭证与两份台账 随之重盖(ER_IROM1 257,292→257,280、Flash 合计 258,812→258,800); 本次触发的 13 根钩子全 Passed,含 test-coverage(删掉 4 行已覆盖代码 未被判成回退)。
This commit is contained in:
@@ -77,7 +77,11 @@ int iec104_comm_init(void) {
|
||||
uint16_t iec104_comm_ca(void) {
|
||||
uint16_t v = s_comm.ca;
|
||||
|
||||
if ((v < IEC104_COMM_CA_MIN) || (v > IEC104_COMM_CA_MAX)) {
|
||||
/* 只判下界。上界 IEC104_COMM_CA_MAX 就是 uint16_t 的最大值,写成
|
||||
* 「v > 65535」对 uint16_t 恒假(cppcheck compareValueOutOfTypeRangeError),
|
||||
* 留着只会让下一个读代码的人以为上界真被守过。合法带口径不变,
|
||||
* 仍照 iec104_comm.h 的常量注释(ca 1..65535 / port 1024..65535)。 */
|
||||
if (v < IEC104_COMM_CA_MIN) {
|
||||
return IEC104_COMM_DEF_CA;
|
||||
}
|
||||
return v;
|
||||
@@ -91,7 +95,7 @@ uint16_t iec104_comm_ca(void) {
|
||||
uint16_t iec104_comm_port(void) {
|
||||
uint16_t v = s_comm.port;
|
||||
|
||||
if ((v < IEC104_COMM_PORT_MIN) || (v > IEC104_COMM_PORT_MAX)) {
|
||||
if (v < IEC104_COMM_PORT_MIN) { /* 上界恒假,同 iec104_comm_ca 处注释 */
|
||||
return IEC104_COMM_DEF_PORT;
|
||||
}
|
||||
return v;
|
||||
@@ -104,7 +108,7 @@ uint16_t iec104_comm_port(void) {
|
||||
* 限定条件:UI 保存交接路(task-9);落盘走 SYS_EVT_CFG_SAVE 整档外科 save
|
||||
*/
|
||||
int iec104_comm_ca_set(uint16_t ca) {
|
||||
if ((ca < IEC104_COMM_CA_MIN) || (ca > IEC104_COMM_CA_MAX)) {
|
||||
if (ca < IEC104_COMM_CA_MIN) { /* 上界恒假,同 iec104_comm_ca 处注释 */
|
||||
return -1;
|
||||
}
|
||||
s_comm.ca = ca;
|
||||
@@ -118,7 +122,7 @@ int iec104_comm_ca_set(uint16_t ca) {
|
||||
* 限定条件:同 iec104_comm_ca_set
|
||||
*/
|
||||
int iec104_comm_port_set(uint16_t port) {
|
||||
if ((port < IEC104_COMM_PORT_MIN) || (port > IEC104_COMM_PORT_MAX)) {
|
||||
if (port < IEC104_COMM_PORT_MIN) { /* 上界恒假,同 iec104_comm_ca 处注释 */
|
||||
return -1;
|
||||
}
|
||||
s_comm.port = port;
|
||||
|
||||
@@ -47,10 +47,10 @@ dhara 失败类 +84;RO 另 +208,全是该失败类名表)→ `ER_IROM1`
|
||||
<!-- MEM_SNAPSHOT:BEGIN generated by scripts/check_mem_numbers.py -->
|
||||
| 区域 | 用量 | 容量 | 占比 |
|
||||
|---|---|---|---|
|
||||
| ER_IROM1 | 257,292 B (251.26 KB) | 1,048,576 B (1024 KB) | 24.5% |
|
||||
| ER_IROM1 | 257,280 B (251.25 KB) | 1,048,576 B (1024 KB) | 24.5% |
|
||||
| RW_IRAM1 | 80,312 B (78.43 KB) | 131,072 B (128 KB) | 61.3% |
|
||||
| RW_CCM | 57,376 B (56.03 KB) | 65,280 B (64 KB) | 87.9% |
|
||||
| **Flash (ROM 合计)** | **258,812 B (252.7 KB)** | 1,048,576 B (1024 KB) | **24.7%** |
|
||||
| **Flash (ROM 合计)** | **258,800 B (252.7 KB)** | 1,048,576 B (1024 KB) | **24.7%** |
|
||||
<!-- MEM_SNAPSHOT:END -->
|
||||
|
||||
各区的容量与常量来源:
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<!-- MEM_BUDGET:BEGIN generated by scripts/ram_baseline.py -->
|
||||
| 区域 | 用量 | 容量 | 占比 | 门禁(≤92%) |
|
||||
|---|---|---|---|---|
|
||||
| ER_IROM1 (Flash) | 257,292 B | 1,048,576 B | 24.5% | 参考 |
|
||||
| ER_IROM1 (Flash) | 257,280 B | 1,048,576 B | 24.5% | 参考 |
|
||||
| RW_CCM | 57,376 B | 65,280 B | 87.9% | PASS |
|
||||
| UNINIT_CCM | 48 B | 256 B | 18.8% | 参考 |
|
||||
| RW_IRAM1 | 80,312 B | 131,072 B | 61.3% | PASS |
|
||||
|
||||
@@ -9,4 +9,4 @@ date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi
|
||||
2026-10-24 213780 18860 1204 131852 232640 22.2 75632 57.7 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6766;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4128;sys_log_mcu.o=3944;default_task.o=2736
|
||||
2026-10-25 224860 24640 1332 135100 249500 23.8 79008 60.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4128;sys_log_mcu.o=3944;default_task.o=2736
|
||||
2026-10-26 231712 25560 1520 136216 257272 24.5 80312 61.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4003;default_task.o=2736
|
||||
2026-10-27 231732 25560 1520 136216 257292 24.5 80312 61.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4003;default_task.o=2736
|
||||
2026-10-27 231720 25560 1520 136216 257280 24.5 80312 61.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4003;default_task.o=2736
|
||||
|
||||
|
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"built_at": "2026-10-27T04:22:20+08:00",
|
||||
"fingerprint": "5ab1da8af5fdc79575db4a1f7d9838660a23d953a533e3b78c6dd681c5d7bb22",
|
||||
"built_at": "2026-10-27T10:17:30+08:00",
|
||||
"fingerprint": "1204cb60a4a9a44c3a3435166e07d7d0a54f32c98768951e79c85d6de422a447",
|
||||
"fingerprint_files": 1430,
|
||||
"fingerprint_source": "git-index",
|
||||
"gated_regions": [
|
||||
"RW_IRAM1",
|
||||
"RW_CCM"
|
||||
],
|
||||
"git_head": "b24b2b5f3113fafc086e5562941c9504d3990619",
|
||||
"git_head": "51ecd36192982fec4bfd1f50fbfba3555c571c4c",
|
||||
"map": "MDK-ARM/STM32F407-Demo/STM32F407-Demo.map",
|
||||
"map_mtime": 1793046012,
|
||||
"map_mtime": 1793067428,
|
||||
"pct": {
|
||||
"ER_IROM1": 24.54,
|
||||
"RW_CCM": 87.89,
|
||||
@@ -19,7 +19,7 @@
|
||||
"regions": {
|
||||
"ER_IROM1": {
|
||||
"max": 1048576,
|
||||
"size": 257292
|
||||
"size": 257280
|
||||
},
|
||||
"RW_CCM": {
|
||||
"max": 65280,
|
||||
@@ -37,7 +37,7 @@
|
||||
"schema": 2,
|
||||
"scope_note": "\u540c\u7801\u51ed\u8bc1\uff1a\u6307\u7eb9\u8986\u76d6\u56fa\u4ef6\u4f53\u79ef\u76f8\u5173\u6e90\u7801\uff0c\u53e3\u5f84\u89c1\u672c\u811a\u672c docstring",
|
||||
"sizes": {
|
||||
"code": 231732,
|
||||
"code": 231720,
|
||||
"ro_data": 25560,
|
||||
"rw_data": 1520,
|
||||
"zi_data": 136216
|
||||
|
||||
Reference in New Issue
Block a user