嵌入式技术论坛
直播中

安德森大

9年用户 1335经验值
擅长:接口/总线/驱动
私信 关注
[问答]

为什么kawaii-mqtt sim7600 mqtt服务器会切换失败呢

受到警告
提示: 作者被禁止或删除 内容自动屏蔽

回帖(1)

h1654155275.5614

2022-10-19 10:47:06
我之前也在这个软件包遇到了几个问题在这里分享一下我是怎么找到问题的吧

是没对齐的问题,这里我打了一个补丁https://github.com/jiejieTop/mqttclient/pull/63,但是作者没合,你可以参考一下

如果订阅的信息不是直接写死的,比如name是malloc出来零时赋值的,传给mqtt后又被free了,这时也会出现一些问题,因为这个软件包只保存了那个临时指针,并没有保存真实的数据,修复方式类似于这样,以topic为例,其他的像name一样的类推:

static message_handlers_t *mqtt_msg_handler_create(const char *topic_filter, mqtt_qos_t qos, message_handler_t handler)
{
    message_handlers_t *msg_handler = NULL;
    msg_handler = (message_handlers_t *)platform_memory_alloc(sizeof(message_handlers_t));
    if (NULL == msg_handler)
        return NULL;
    mqtt_list_init(&msg_handler->list);
    msg_handler->qos          = qos;
    msg_handler->handler      = handler; /* register  callback handler */
    msg_handler->topic_filter = rt_malloc(rt_strlen(topic_filter) + 1);
    rt_strncpy(msg_handler->topic_filter, topic_filter, rt_strlen(topic_filter) + 1);
    return msg_handler;
}
记得在释放的时候也销毁掉

static void mqtt_msg_handler_destory(message_handlers_t *msg_handler)
{
    if (NULL != &msg_handler->list) {
        mqtt_list_del(&msg_handler->list);
        platform_memory_free(msg_handler->topic_filter);
        platform_memory_free(msg_handler);
    }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分