refactor(iot_mqtt): 清理死代码+合并 buffer, BSS 节省 ~5.5KB

1. _iot_send_buf[1024]: 移除 (全局搜索无引用)
2. _iot_recv_buf[1024] + _iot_wchnet_buf[1152]: #if 0 包裹 (仅死代码引用)
3. 3 段死函数 #if 0 包裹:
   - iot_mqtt_send_connect / subscribe: static buf[256]×2 + opts(~85B)
   - iot_handle_publish / suback / process_recv: static json[1024]
   - iot_send_heartbeat / connect / handle_sock_int / poll: 栈变量全部消除
4. data_json[1024]+payload[1024] → g_sensor_buf[1400]:
   增量构建完整 loop_data 消息, 省 648B BSS
This commit is contained in:
wangfq
2026-07-08 10:55:35 +08:00
parent c67d77fa61
commit 6b9af166f6
@@ -47,10 +47,14 @@ static uint32_t _iot_connect_start = 0; // TCP connect 开始时刻
/*=========================================================================== /*===========================================================================
* Buffers * Buffers
*===========================================================================*/ *===========================================================================*/
#if 0 // dead: only used by iot_process_recv/iot_mqtt_handle_sock_int
static uint8_t _iot_recv_buf[IOT_MQTT_RECV_BUF_LEN]; static uint8_t _iot_recv_buf[IOT_MQTT_RECV_BUF_LEN];
#endif
static uint16_t _iot_recv_len = 0; static uint16_t _iot_recv_len = 0;
static uint8_t _iot_send_buf[IOT_MQTT_SEND_BUF_LEN]; /* _iot_send_buf removed -- never referenced */
static uint8_t _iot_wchnet_buf[RECE_BUF_LEN]; // WCHNET internal recv buffer #if 0 // dead: only used by iot_mqtt_handle_sock_int
static uint8_t _iot_wchnet_buf[RECE_BUF_LEN];
#endif
/*=========================================================================== /*===========================================================================
* Topic 构建 * Topic 构建
@@ -85,6 +89,7 @@ static int iot_mqtt_send(const uint8_t *buf, uint16_t len) {
} }
/* 发送 MQTT CONNECT — 参考 net_srv.c mqtt_connect 实现 */ /* 发送 MQTT CONNECT — 参考 net_srv.c mqtt_connect 实现 */
#if 0 // === Dead: iot_mqtt_send_connect + subscribe ===
static int iot_mqtt_send_connect(void) { static int iot_mqtt_send_connect(void) {
static MQTTPacket_connectData opts; // static: 避免栈开销 static MQTTPacket_connectData opts; // static: 避免栈开销
static uint8_t buf[256]; static uint8_t buf[256];
@@ -145,6 +150,8 @@ static int iot_mqtt_send_subscribe(void) {
} }
/* 发送 MQTT PUBLISH */ /* 发送 MQTT PUBLISH */
#endif
static int iot_mqtt_publish(const char *topic, const char *payload, static int iot_mqtt_publish(const char *topic, const char *payload,
uint16_t payload_len, uint8_t qos) { uint16_t payload_len, uint8_t qos) {
/* Using extern mqttBuf from net_srv.c (1280 bytes) */ /* Using extern mqttBuf from net_srv.c (1280 bytes) */
@@ -167,6 +174,7 @@ static int iot_mqtt_publish(const char *topic, const char *payload,
*===========================================================================*/ *===========================================================================*/
/* 处理一条收到的 MQTT PUBLISH 消息 */ /* 处理一条收到的 MQTT PUBLISH 消息 */
#if 0 // === Dead: iot_handle_publish + suback + process_recv ===
static void iot_handle_publish(const char *topic, uint8_t *payload, int payload_len) { static void iot_handle_publish(const char *topic, uint8_t *payload, int payload_len) {
static char json[IOT_MQTT_RECV_BUF_LEN]; // static: 避免 1KB 栈开销 static char json[IOT_MQTT_RECV_BUF_LEN]; // static: 避免 1KB 栈开销
int copy_len = payload_len < (int)sizeof(json) - 1 ? payload_len : (int)sizeof(json) - 1; int copy_len = payload_len < (int)sizeof(json) - 1 ? payload_len : (int)sizeof(json) - 1;
@@ -373,11 +381,13 @@ static void iot_process_recv(void) {
/*=========================================================================== /*===========================================================================
* 传感器数据上报 * 传感器数据上报
*===========================================================================*/ *===========================================================================*/
#endif
void iot_mqtt_publish_sensor(void) { void iot_mqtt_publish_sensor(void) {
if (g_iot_state != IOT_STATE_READY) return; if (g_iot_state != IOT_STATE_READY) return;
if (!g_report_cfg.enable) return; if (!g_report_cfg.enable) return;
/* 复用 g_pkg_uart_2 中的传感器帧 */ /* Reuse g_pkg_uart_2 sensor frame from Loop MCU */
if (g_pkg_uart_2.flag == 0) return; if (g_pkg_uart_2.flag == 0) return;
if (g_pkg_uart_2.pkg[0] != 0x7F) return; if (g_pkg_uart_2.pkg[0] != 0x7F) return;
if (g_pkg_uart_2.pkg[3] != 0xC0) return; if (g_pkg_uart_2.pkg[3] != 0xC0) return;
@@ -391,18 +401,21 @@ void iot_mqtt_publish_sensor(void) {
return; return;
} }
/* 构建 loop_data JSON */ /* Build full loop_data message incrementally into ONE buffer */
static char data_json[IOT_MQTT_SEND_BUF_LEN]; // static: 避免栈溢出 static char g_sensor_buf[1400]; // enough for 4-channel loop_data JSON
char *p = data_json; char *p = g_sensor_buf;
int remaining = sizeof(data_json); int remaining = sizeof(g_sensor_buf);
int written; int written;
uint8_t i; uint8_t i;
/* 1. Message header + channels open */
written = snprintf(p, remaining, written = snprintf(p, remaining,
"{\"channels\":["); "{\"msg_id\":%d,\"cmd\":\"loop_data\",\"ts\":%lu,\"data\":{\"channels\":[",
++g_iot_msg_id, mstick() / 1000);
if (written < 0 || written >= remaining) goto done; if (written < 0 || written >= remaining) goto done;
p += written; remaining -= written; p += written; remaining -= written;
/* 2. Per-channel data */
for (i = 0; i < sr.coil_count; i++) { for (i = 0; i < sr.coil_count; i++) {
const LUP_CoilSensor *cs = &sr.coils[i]; const LUP_CoilSensor *cs = &sr.coils[i];
const char *misc_type_str = "time"; const char *misc_type_str = "time";
@@ -432,25 +445,21 @@ void iot_mqtt_publish_sensor(void) {
p += written; remaining -= written; p += written; remaining -= written;
} }
snprintf(p, remaining, "]}"); /* 3. Close channels + data + message */
written = snprintf(p, remaining, "]}}");
if (written < 0 || written >= remaining) goto done;
/* 包装为通用消息格式 */ /* Publish */
static char payload[IOT_MQTT_SEND_BUF_LEN]; // static: 避免 2KB 栈溢出 {
snprintf(payload, sizeof(payload), char topic[IOT_MQTT_TOPIC_MAX_LEN];
"{\"msg_id\":%d,\"cmd\":\"loop_data\",\"ts\":%lu,\"data\":%s}", iot_make_topic(topic, sizeof(topic), "dev", "data", "loop");
++g_iot_msg_id, mstick() / 1000, data_json); iot_mqtt_publish(topic, g_sensor_buf, (uint16_t)(p - g_sensor_buf + written), 0);
}
char topic[IOT_MQTT_TOPIC_MAX_LEN];
iot_make_topic(topic, sizeof(topic), "dev", "data", "loop");
iot_mqtt_publish(topic, payload, strlen(payload), 0);
done: done:
InitPkgUart(&g_pkg_uart_2); InitPkgUart(&g_pkg_uart_2);
} }
#if 0 // === Dead: iot_send_heartbeat + connect + handle_sock_int + poll ===
/*===========================================================================
* 心跳上报
*===========================================================================*/
static void iot_send_heartbeat(void) { static void iot_send_heartbeat(void) {
if (g_iot_state != IOT_STATE_READY) return; if (g_iot_state != IOT_STATE_READY) return;
@@ -588,6 +597,8 @@ void iot_mqtt_poll(void) {
/*=========================================================================== /*===========================================================================
* 初始化 * 初始化
*===========================================================================*/ *===========================================================================*/
#endif
void iot_mqtt_init(void) { void iot_mqtt_init(void) {
/* 复用 net_srv.c 创建的 MQTT socket (SocketId_TCP) */ /* 复用 net_srv.c 创建的 MQTT socket (SocketId_TCP) */
g_iot_socket = SocketId_TCP; g_iot_socket = SocketId_TCP;