原先定义的大小是1024
/**
* Output ring-buffer size, must be able to fit largest outgoing publish message topic+payloads
*/
#ifndef MQTT_OUTPUT_RINGBUF_SIZE
#define MQTT_OUTPUT_RINGBUF_SIZE 1024
#endif
修改为
/**
* Output ring-buffer size, must be able to fit largest outgoing publish message topic+payloads
*/
#ifndef MQTT_OUTPUT_RINGBUF_SIZE
#define MQTT_OUTPUT_RINGBUF_SIZE 1536
#endif
就出现发送900多直接就会和mqtt断开,经过查找原因,发现
#define MQTT_OUTPUT_RINGBUF_SIZE 256*6 //011000000000
#define MQTT_RINGBUF_IDX_MASK ((MQTT_OUTPUT_RINGBUF_SIZE) - 1) //010111111111
//导致下面这些& 操作 全部没有按照预想的来
#define mqtt_ringbuf_put(rb, item) ((rb)->buf)[(rb)->put++ & MQTT_RINGBUF_IDX_MASK] = (item)
#define mqtt_ringbuf_linear_read_length(rb) LWIP_MIN(mqtt_ringbuf_len(rb), (MQTT_OUTPUT_RINGBUF_SIZE - ((rb)->get & MQTT_RINGBUF_IDX_MASK)))
#define mqtt_ringbuf_get_ptr(rb) (&(rb)->buf[(rb)->get & MQTT_RINGBUF_IDX_MASK])
如果想扩大缓存,必须是2的指数倍
比如
/**
* Output ring-buffer size, must be able to fit largest outgoing publish message topic+payloads 必须是2指数倍
*/
#ifndef MQTT_OUTPUT_RINGBUF_SIZE
#define MQTT_OUTPUT_RINGBUF_SIZE 1024*2
#endif

本文讲述了在软件开发中,针对MQTT通信问题,如何将输出缓冲区大小从1024调整为1536,以避免因消息过大导致的连接中断。重点在于理解为何需要2的指数倍数,并揭示了与缓冲索引相关的代码调整细节。
1693

被折叠的 条评论
为什么被折叠?



